From b19e4165fb8838c72361687456da02ee9b8a14d4 Mon Sep 17 00:00:00 2001 From: TaTo30 Date: Sat, 16 Dec 2023 18:16:19 -0600 Subject: [PATCH] v1.9.0 --- 404.html | 6 +- assets/404.html-4ff4ca9a.js | 1 + assets/all_pages.html-7da2897e.js | 12 +++ assets/annotation_attachment.html-71a50c04.js | 16 +++ assets/annotation_filter.html-8b55a0e5.js | 28 ++++++ assets/annotation_forms.html-00dd803d.js | 16 +++ assets/annotation_layer.html-e575ea2d.js | 20 ++++ assets/annotation_links.html-5572ecf6.js | 16 +++ assets/app-6fe4962f.js | 16 +++ assets/composables.html-c510aae4.js | 66 +++++++++++++ assets/events.html-231531a4.js | 1 + assets/events.html-89f93546.js | 97 +++++++++++++++++++ assets/fit_parent.html-8b8c8689.js | 32 ++++++ assets/highlight_text.html-0778f069.js | 1 + assets/highlight_text.html-c49d46c1.js | 25 +++++ assets/index.html-68bc146c.js | 1 + assets/index.html-8aafe416.js | 1 + assets/introduction.html-26ff885b.js | 46 +++++++++ assets/loaded.html-8a1cb111.js | 16 +++ assets/methods.html-29c635bd.js | 25 +++++ assets/multiple_pdf.html-59f29d33.js | 1 + assets/multiple_pdf.html-7275aea6.js | 36 +++++++ assets/one_page.html-042a751a.js | 23 +++++ assets/props.html-65d0d4f8.js | 1 + assets/props.html-ef6b26fc.js | 51 ++++++++++ assets/rotation.html-362dea84.js | 23 +++++ assets/scale.html-84a9ac8a.js | 23 +++++ assets/slots.html-33cff15b.js | 8 ++ assets/style-e2ee7e0d.css | 1 + assets/text_highlight.html-51fa3454.js | 1 + assets/text_highlight.html-d3b79b62.js | 25 +++++ assets/text_layer.html-b50a143a.js | 20 ++++ assets/toc.html-7317742a.js | 1 + assets/toc.html-d62adc1c.js | 46 +++++++++ assets/watermark.html-1285d86c.js | 1 + assets/watermark.html-aef68484.js | 35 +++++++ assets/xfa_layer.html-a367bc28.js | 16 +++ examples/advanced/annotation_filter.html | 8 +- examples/advanced/fit_parent.html | 10 +- examples/advanced/highlight_text.html | 57 +++++++++++ examples/advanced/multiple_pdf.html | 10 +- examples/advanced/toc.html | 78 +++++++++++++++ examples/advanced/watermark.html | 10 +- .../annotation_attachment.html | 8 +- .../annotation_events/annotation_forms.html | 8 +- .../annotation_events/annotation_links.html | 8 +- examples/basic/all_pages.html | 8 +- examples/basic/annotation_layer.html | 8 +- examples/basic/one_page.html | 8 +- examples/basic/rotation.html | 8 +- examples/basic/scale.html | 8 +- examples/basic/text_layer.html | 8 +- examples/basic/xfa_layer.html | 8 +- examples/index.html | 8 +- examples/loaded_events/loaded.html | 10 +- examples/text_events/text_highlight.html | 57 +++++++++++ guide/composables.html | 6 +- guide/events.html | 11 ++- guide/introduction.html | 8 +- guide/methods.html | 6 +- guide/props.html | 26 +++-- guide/slots.html | 6 +- index.html | 6 +- 63 files changed, 1052 insertions(+), 99 deletions(-) create mode 100644 assets/404.html-4ff4ca9a.js create mode 100644 assets/all_pages.html-7da2897e.js create mode 100644 assets/annotation_attachment.html-71a50c04.js create mode 100644 assets/annotation_filter.html-8b55a0e5.js create mode 100644 assets/annotation_forms.html-00dd803d.js create mode 100644 assets/annotation_layer.html-e575ea2d.js create mode 100644 assets/annotation_links.html-5572ecf6.js create mode 100644 assets/app-6fe4962f.js create mode 100644 assets/composables.html-c510aae4.js create mode 100644 assets/events.html-231531a4.js create mode 100644 assets/events.html-89f93546.js create mode 100644 assets/fit_parent.html-8b8c8689.js create mode 100644 assets/highlight_text.html-0778f069.js create mode 100644 assets/highlight_text.html-c49d46c1.js create mode 100644 assets/index.html-68bc146c.js create mode 100644 assets/index.html-8aafe416.js create mode 100644 assets/introduction.html-26ff885b.js create mode 100644 assets/loaded.html-8a1cb111.js create mode 100644 assets/methods.html-29c635bd.js create mode 100644 assets/multiple_pdf.html-59f29d33.js create mode 100644 assets/multiple_pdf.html-7275aea6.js create mode 100644 assets/one_page.html-042a751a.js create mode 100644 assets/props.html-65d0d4f8.js create mode 100644 assets/props.html-ef6b26fc.js create mode 100644 assets/rotation.html-362dea84.js create mode 100644 assets/scale.html-84a9ac8a.js create mode 100644 assets/slots.html-33cff15b.js create mode 100644 assets/style-e2ee7e0d.css create mode 100644 assets/text_highlight.html-51fa3454.js create mode 100644 assets/text_highlight.html-d3b79b62.js create mode 100644 assets/text_layer.html-b50a143a.js create mode 100644 assets/toc.html-7317742a.js create mode 100644 assets/toc.html-d62adc1c.js create mode 100644 assets/watermark.html-1285d86c.js create mode 100644 assets/watermark.html-aef68484.js create mode 100644 assets/xfa_layer.html-a367bc28.js create mode 100644 examples/advanced/highlight_text.html create mode 100644 examples/advanced/toc.html create mode 100644 examples/text_events/text_highlight.html diff --git a/404.html b/404.html index 0b0a895..1a822c6 100644 --- a/404.html +++ b/404.html @@ -23,11 +23,11 @@ } Home | VuePDF - - + +
- + diff --git a/assets/404.html-4ff4ca9a.js b/assets/404.html-4ff4ca9a.js new file mode 100644 index 0000000..953edf9 --- /dev/null +++ b/assets/404.html-4ff4ca9a.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app-6fe4962f.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/assets/all_pages.html-7da2897e.js b/assets/all_pages.html-7da2897e.js new file mode 100644 index 0000000..c667688 --- /dev/null +++ b/assets/all_pages.html-7da2897e.js @@ -0,0 +1,12 @@ +import{_ as p,r as a,o as e,c as o,a as n,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

All pages

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf, pages } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+</script>
+
+<template>
+  <div v-for="page in pages" :key="page">
+    <VuePDF :pdf="pdf" :page="page" />
+  </div>
+</template>
+
`,2);function k(r,d){const s=a("AllPages"),t=a("ClientOnly");return e(),o("div",null,[i,n(t,null,{default:c(()=>[n(s)]),_:1})])}const v=p(u,[["render",k],["__file","all_pages.html.vue"]]);export{v as default}; diff --git a/assets/annotation_attachment.html-71a50c04.js b/assets/annotation_attachment.html-71a50c04.js new file mode 100644 index 0000000..52d40f8 --- /dev/null +++ b/assets/annotation_attachment.html-71a50c04.js @@ -0,0 +1,16 @@ +import{_ as p,r as n,o as e,c as o,a,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

File attachment

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf } = usePDF('/example_041.pdf')
+function onAnnotation(value) {
+  console.log(value)
+}
+</script>
+
+<template>
+  <div>
+    <VuePDF :pdf="pdf" annotation-layer image-resources-path="https://unpkg.com/pdfjs-dist@latest/web/images/" @annotation="onAnnotation" />
+  </div>
+</template>
+
`,2);function k(r,d){const s=n("AnnoAttachment"),t=n("ClientOnly");return e(),o("div",null,[i,a(t,null,{default:c(()=>[a(s)]),_:1})])}const v=p(u,[["render",k],["__file","annotation_attachment.html.vue"]]);export{v as default}; diff --git a/assets/annotation_filter.html-8b55a0e5.js b/assets/annotation_filter.html-8b55a0e5.js new file mode 100644 index 0000000..e608c8a --- /dev/null +++ b/assets/annotation_filter.html-8b55a0e5.js @@ -0,0 +1,28 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Annotations Filter

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf } = usePDF('/example_014.pdf')
+
+const filters = ref(['Widget', 'Widget.Tx', 'Widget.Btn', 'Widget.Ch'])
+const selectedFilter = ref(['Widget'])
+const vuePDFRef = ref(null)
+
+function reloadPage() {
+  vuePDFRef.value.reload()
+}
+</script>
+
+<template>
+  <div>
+    <div>
+      <select v-model="selectedFilter[0]" class="select-example" @change="reloadPage">
+        <option v-for="flt in filters" :key="flt" :value="flt">
+          {{ flt }}
+        </option>
+      </select>
+    </div>
+    <VuePDF ref="vuePDFRef" :pdf="pdf" annotation-layer :annotations-filter="selectedFilter" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("AnnotationFilter"),t=n("ClientOnly");return e(),o("div",null,[i,s(t,null,{default:c(()=>[s(a)]),_:1})])}const g=p(u,[["render",k],["__file","annotation_filter.html.vue"]]);export{g as default}; diff --git a/assets/annotation_forms.html-00dd803d.js b/assets/annotation_forms.html-00dd803d.js new file mode 100644 index 0000000..ee729e8 --- /dev/null +++ b/assets/annotation_forms.html-00dd803d.js @@ -0,0 +1,16 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const i={},u=l(`

Forms fields

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf } = usePDF('/example_014.pdf')
+function onAnnotation(value) {
+  console.log(value)
+}
+</script>
+
+<template>
+  <div>
+    <VuePDF :pdf="pdf" annotation-layer @annotation="onAnnotation" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("AnnoForms"),t=n("ClientOnly");return e(),o("div",null,[u,s(t,null,{default:c(()=>[s(a)]),_:1})])}const m=p(i,[["render",k],["__file","annotation_forms.html.vue"]]);export{m as default}; diff --git a/assets/annotation_layer.html-e575ea2d.js b/assets/annotation_layer.html-e575ea2d.js new file mode 100644 index 0000000..877399d --- /dev/null +++ b/assets/annotation_layer.html-e575ea2d.js @@ -0,0 +1,20 @@ +import{_ as p,r as n,o as e,c as o,a,w as c,e as l}from"./app-6fe4962f.js";const i={},u=l(`

Annotation Layer

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import '@tato30/vue-pdf/style.css'
+
+const annotation_layer = ref(false)
+const { pdf } = usePDF('example_014.pdf')
+</script>
+
+<template>
+  <div>
+    <div>
+      <button @click="annotation_layer = !annotation_layer">
+        Change to {{ !annotation_layer }}
+      </button>
+    </div>
+    <VuePDF :pdf="pdf" :annotation-layer="annotation_layer" />
+  </div>
+</template>
+
`,2);function k(r,d){const s=n("AnnotationLayer"),t=n("ClientOnly");return e(),o("div",null,[u,a(t,null,{default:c(()=>[a(s)]),_:1})])}const g=p(i,[["render",k],["__file","annotation_layer.html.vue"]]);export{g as default}; diff --git a/assets/annotation_links.html-5572ecf6.js b/assets/annotation_links.html-5572ecf6.js new file mode 100644 index 0000000..47351a8 --- /dev/null +++ b/assets/annotation_links.html-5572ecf6.js @@ -0,0 +1,16 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const i={},u=l(`

Links

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf } = usePDF('/example_045.pdf')
+function onAnnotation(value) {
+  console.log(value)
+}
+</script>
+
+<template>
+  <div>
+    <VuePDF :pdf="pdf" annotation-layer @annotation="onAnnotation" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("AnnoLinks"),t=n("ClientOnly");return e(),o("div",null,[u,s(t,null,{default:c(()=>[s(a)]),_:1})])}const m=p(i,[["render",k],["__file","annotation_links.html.vue"]]);export{m as default}; diff --git a/assets/app-6fe4962f.js b/assets/app-6fe4962f.js new file mode 100644 index 0000000..33ce537 --- /dev/null +++ b/assets/app-6fe4962f.js @@ -0,0 +1,16 @@ +var hs=Object.defineProperty;var Gs=(l,t,c)=>t in l?hs(l,t,{enumerable:!0,configurable:!0,writable:!0,value:c}):l[t]=c;var jt=(l,t,c)=>(Gs(l,typeof t!="symbol"?t+"":t,c),c),oc=(l,t,c)=>{if(!t.has(l))throw TypeError("Cannot "+c)};var E=(l,t,c)=>(oc(l,t,"read from private field"),c?c.call(l):t.get(l)),st=(l,t,c)=>{if(t.has(l))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(l):t.set(l,c)},mt=(l,t,c,s)=>(oc(l,t,"write to private field"),s?s.call(l,c):t.set(l,c),c),bc=(l,t,c,s)=>({set _(d){mt(l,t,d,c)},get _(){return E(l,t,s)}}),it=(l,t,c)=>(oc(l,t,"access private method"),c);const scriptRel="modulepreload",assetsURL=function(l){return"/VuePDF/"+l},seen={},__vitePreload=function(t,c,s){if(!c||c.length===0)return t();const d=document.getElementsByTagName("link");return Promise.all(c.map(Z=>{if(Z=assetsURL(Z),Z in seen)return;seen[Z]=!0;const i=Z.endsWith(".css"),o=i?'[rel="stylesheet"]':"";if(!!s)for(let u=d.length-1;u>=0;u--){const X=d[u];if(X.href===Z&&(!i||X.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${Z}"]${o}`))return;const G=document.createElement("link");if(G.rel=i?"stylesheet":scriptRel,i||(G.as="script",G.crossOrigin=""),G.href=Z,document.head.appendChild(G),i)return new Promise((u,X)=>{G.addEventListener("load",u),G.addEventListener("error",()=>X(new Error(`Unable to preload CSS for ${Z}`)))})})).then(()=>t())};function makeMap(l,t){const c=Object.create(null),s=l.split(",");for(let d=0;d!!c[d.toLowerCase()]:d=>!!c[d]}const EMPTY_OBJ={},EMPTY_ARR=[],NOOP=()=>{},NO=()=>!1,onRE=/^on[^a-z]/,isOn=l=>onRE.test(l),isModelListener=l=>l.startsWith("onUpdate:"),extend=Object.assign,remove=(l,t)=>{const c=l.indexOf(t);c>-1&&l.splice(c,1)},hasOwnProperty$1=Object.prototype.hasOwnProperty,hasOwn=(l,t)=>hasOwnProperty$1.call(l,t),isArray$1=Array.isArray,isMap=l=>toTypeString(l)==="[object Map]",isSet=l=>toTypeString(l)==="[object Set]",isDate=l=>toTypeString(l)==="[object Date]",isFunction=l=>typeof l=="function",isString=l=>typeof l=="string",isSymbol=l=>typeof l=="symbol",isObject=l=>l!==null&&typeof l=="object",isPromise=l=>isObject(l)&&isFunction(l.then)&&isFunction(l.catch),objectToString=Object.prototype.toString,toTypeString=l=>objectToString.call(l),toRawType=l=>toTypeString(l).slice(8,-1),isPlainObject$1=l=>toTypeString(l)==="[object Object]",isIntegerKey=l=>isString(l)&&l!=="NaN"&&l[0]!=="-"&&""+parseInt(l,10)===l,isReservedProp=makeMap(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),cacheStringFunction=l=>{const t=Object.create(null);return c=>t[c]||(t[c]=l(c))},camelizeRE=/-(\w)/g,camelize=cacheStringFunction(l=>l.replace(camelizeRE,(t,c)=>c?c.toUpperCase():"")),hyphenateRE=/\B([A-Z])/g,hyphenate=cacheStringFunction(l=>l.replace(hyphenateRE,"-$1").toLowerCase()),capitalize=cacheStringFunction(l=>l.charAt(0).toUpperCase()+l.slice(1)),toHandlerKey=cacheStringFunction(l=>l?`on${capitalize(l)}`:""),hasChanged=(l,t)=>!Object.is(l,t),invokeArrayFns=(l,t)=>{for(let c=0;c{Object.defineProperty(l,t,{configurable:!0,enumerable:!1,value:c})},looseToNumber=l=>{const t=parseFloat(l);return isNaN(t)?l:t},toNumber=l=>{const t=isString(l)?Number(l):NaN;return isNaN(t)?l:t};let _globalThis;const getGlobalThis=()=>_globalThis||(_globalThis=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function normalizeStyle(l){if(isArray$1(l)){const t={};for(let c=0;c{if(c){const s=c.split(propertyDelimiterRE);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function normalizeClass(l){let t="";if(isString(l))t=l;else if(isArray$1(l))for(let c=0;clooseEqual(c,t))}const toDisplayString=l=>isString(l)?l:l==null?"":isArray$1(l)||isObject(l)&&(l.toString===objectToString||!isFunction(l.toString))?JSON.stringify(l,replacer,2):String(l),replacer=(l,t)=>t&&t.__v_isRef?replacer(l,t.value):isMap(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((c,[s,d])=>(c[`${s} =>`]=d,c),{})}:isSet(t)?{[`Set(${t.size})`]:[...t.values()]}:isObject(t)&&!isArray$1(t)&&!isPlainObject$1(t)?String(t):t;let activeEffectScope;class EffectScope{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=activeEffectScope,!t&&activeEffectScope&&(this.index=(activeEffectScope.scopes||(activeEffectScope.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const c=activeEffectScope;try{return activeEffectScope=this,t()}finally{activeEffectScope=c}}}on(){activeEffectScope=this}off(){activeEffectScope=this.parent}stop(t){if(this._active){let c,s;for(c=0,s=this.effects.length;c{const t=new Set(l);return t.w=0,t.n=0,t},wasTracked=l=>(l.w&trackOpBit)>0,newTracked=l=>(l.n&trackOpBit)>0,initDepMarkers=({deps:l})=>{if(l.length)for(let t=0;t{const{deps:t}=l;if(t.length){let c=0;for(let s=0;s{(u==="length"||u>=W)&&o.push(G)})}else switch(c!==void 0&&o.push(i.get(c)),t){case"add":isArray$1(l)?isIntegerKey(c)&&o.push(i.get("length")):(o.push(i.get(ITERATE_KEY)),isMap(l)&&o.push(i.get(MAP_KEY_ITERATE_KEY)));break;case"delete":isArray$1(l)||(o.push(i.get(ITERATE_KEY)),isMap(l)&&o.push(i.get(MAP_KEY_ITERATE_KEY)));break;case"set":isMap(l)&&o.push(i.get(ITERATE_KEY));break}if(o.length===1)o[0]&&triggerEffects(o[0]);else{const W=[];for(const G of o)G&&W.push(...G);triggerEffects(createDep(W))}}function triggerEffects(l,t){const c=isArray$1(l)?l:[...l];for(const s of c)s.computed&&triggerEffect(s);for(const s of c)s.computed||triggerEffect(s)}function triggerEffect(l,t){(l!==activeEffect||l.allowRecurse)&&(l.scheduler?l.scheduler():l.run())}function getDepFromReactive(l,t){var c;return(c=targetMap.get(l))==null?void 0:c.get(t)}const isNonTrackableKeys=makeMap("__proto__,__v_isRef,__isVue"),builtInSymbols=new Set(Object.getOwnPropertyNames(Symbol).filter(l=>l!=="arguments"&&l!=="caller").map(l=>Symbol[l]).filter(isSymbol)),get$1=createGetter(),shallowGet=createGetter(!1,!0),readonlyGet=createGetter(!0),arrayInstrumentations=createArrayInstrumentations();function createArrayInstrumentations(){const l={};return["includes","indexOf","lastIndexOf"].forEach(t=>{l[t]=function(...c){const s=toRaw(this);for(let Z=0,i=this.length;Z{l[t]=function(...c){pauseTracking();const s=toRaw(this)[t].apply(this,c);return resetTracking(),s}}),l}function hasOwnProperty(l){const t=toRaw(this);return track(t,"has",l),t.hasOwnProperty(l)}function createGetter(l=!1,t=!1){return function(s,d,Z){if(d==="__v_isReactive")return!l;if(d==="__v_isReadonly")return l;if(d==="__v_isShallow")return t;if(d==="__v_raw"&&Z===(l?t?shallowReadonlyMap:readonlyMap:t?shallowReactiveMap:reactiveMap).get(s))return s;const i=isArray$1(s);if(!l){if(i&&hasOwn(arrayInstrumentations,d))return Reflect.get(arrayInstrumentations,d,Z);if(d==="hasOwnProperty")return hasOwnProperty}const o=Reflect.get(s,d,Z);return(isSymbol(d)?builtInSymbols.has(d):isNonTrackableKeys(d))||(l||track(s,"get",d),t)?o:isRef(o)?i&&isIntegerKey(d)?o:o.value:isObject(o)?l?readonly(o):reactive(o):o}}const set$1=createSetter(),shallowSet=createSetter(!0);function createSetter(l=!1){return function(c,s,d,Z){let i=c[s];if(isReadonly(i)&&isRef(i)&&!isRef(d))return!1;if(!l&&(!isShallow(d)&&!isReadonly(d)&&(i=toRaw(i),d=toRaw(d)),!isArray$1(c)&&isRef(i)&&!isRef(d)))return i.value=d,!0;const o=isArray$1(c)&&isIntegerKey(s)?Number(s)l,getProto=l=>Reflect.getPrototypeOf(l);function get(l,t,c=!1,s=!1){l=l.__v_raw;const d=toRaw(l),Z=toRaw(t);c||(t!==Z&&track(d,"get",t),track(d,"get",Z));const{has:i}=getProto(d),o=s?toShallow:c?toReadonly:toReactive;if(i.call(d,t))return o(l.get(t));if(i.call(d,Z))return o(l.get(Z));l!==d&&l.get(t)}function has(l,t=!1){const c=this.__v_raw,s=toRaw(c),d=toRaw(l);return t||(l!==d&&track(s,"has",l),track(s,"has",d)),l===d?c.has(l):c.has(l)||c.has(d)}function size(l,t=!1){return l=l.__v_raw,!t&&track(toRaw(l),"iterate",ITERATE_KEY),Reflect.get(l,"size",l)}function add(l){l=toRaw(l);const t=toRaw(this);return getProto(t).has.call(t,l)||(t.add(l),trigger(t,"add",l,l)),this}function set(l,t){t=toRaw(t);const c=toRaw(this),{has:s,get:d}=getProto(c);let Z=s.call(c,l);Z||(l=toRaw(l),Z=s.call(c,l));const i=d.call(c,l);return c.set(l,t),Z?hasChanged(t,i)&&trigger(c,"set",l,t):trigger(c,"add",l,t),this}function deleteEntry(l){const t=toRaw(this),{has:c,get:s}=getProto(t);let d=c.call(t,l);d||(l=toRaw(l),d=c.call(t,l)),s&&s.call(t,l);const Z=t.delete(l);return d&&trigger(t,"delete",l,void 0),Z}function clear(){const l=toRaw(this),t=l.size!==0,c=l.clear();return t&&trigger(l,"clear",void 0,void 0),c}function createForEach(l,t){return function(s,d){const Z=this,i=Z.__v_raw,o=toRaw(i),W=t?toShallow:l?toReadonly:toReactive;return!l&&track(o,"iterate",ITERATE_KEY),i.forEach((G,u)=>s.call(d,W(G),W(u),Z))}}function createIterableMethod(l,t,c){return function(...s){const d=this.__v_raw,Z=toRaw(d),i=isMap(Z),o=l==="entries"||l===Symbol.iterator&&i,W=l==="keys"&&i,G=d[l](...s),u=c?toShallow:t?toReadonly:toReactive;return!t&&track(Z,"iterate",W?MAP_KEY_ITERATE_KEY:ITERATE_KEY),{next(){const{value:X,done:z}=G.next();return z?{value:X,done:z}:{value:o?[u(X[0]),u(X[1])]:u(X),done:z}},[Symbol.iterator](){return this}}}}function createReadonlyMethod(l){return function(...t){return l==="delete"?!1:this}}function createInstrumentations(){const l={get(Z){return get(this,Z)},get size(){return size(this)},has,add,set,delete:deleteEntry,clear,forEach:createForEach(!1,!1)},t={get(Z){return get(this,Z,!1,!0)},get size(){return size(this)},has,add,set,delete:deleteEntry,clear,forEach:createForEach(!1,!0)},c={get(Z){return get(this,Z,!0)},get size(){return size(this,!0)},has(Z){return has.call(this,Z,!0)},add:createReadonlyMethod("add"),set:createReadonlyMethod("set"),delete:createReadonlyMethod("delete"),clear:createReadonlyMethod("clear"),forEach:createForEach(!0,!1)},s={get(Z){return get(this,Z,!0,!0)},get size(){return size(this,!0)},has(Z){return has.call(this,Z,!0)},add:createReadonlyMethod("add"),set:createReadonlyMethod("set"),delete:createReadonlyMethod("delete"),clear:createReadonlyMethod("clear"),forEach:createForEach(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(Z=>{l[Z]=createIterableMethod(Z,!1,!1),c[Z]=createIterableMethod(Z,!0,!1),t[Z]=createIterableMethod(Z,!1,!0),s[Z]=createIterableMethod(Z,!0,!0)}),[l,c,t,s]}const[mutableInstrumentations,readonlyInstrumentations,shallowInstrumentations,shallowReadonlyInstrumentations]=createInstrumentations();function createInstrumentationGetter(l,t){const c=t?l?shallowReadonlyInstrumentations:shallowInstrumentations:l?readonlyInstrumentations:mutableInstrumentations;return(s,d,Z)=>d==="__v_isReactive"?!l:d==="__v_isReadonly"?l:d==="__v_raw"?s:Reflect.get(hasOwn(c,d)&&d in s?c:s,d,Z)}const mutableCollectionHandlers={get:createInstrumentationGetter(!1,!1)},shallowCollectionHandlers={get:createInstrumentationGetter(!1,!0)},readonlyCollectionHandlers={get:createInstrumentationGetter(!0,!1)},reactiveMap=new WeakMap,shallowReactiveMap=new WeakMap,readonlyMap=new WeakMap,shallowReadonlyMap=new WeakMap;function targetTypeMap(l){switch(l){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function getTargetType(l){return l.__v_skip||!Object.isExtensible(l)?0:targetTypeMap(toRawType(l))}function reactive(l){return isReadonly(l)?l:createReactiveObject(l,!1,mutableHandlers,mutableCollectionHandlers,reactiveMap)}function shallowReactive(l){return createReactiveObject(l,!1,shallowReactiveHandlers,shallowCollectionHandlers,shallowReactiveMap)}function readonly(l){return createReactiveObject(l,!0,readonlyHandlers,readonlyCollectionHandlers,readonlyMap)}function createReactiveObject(l,t,c,s,d){if(!isObject(l)||l.__v_raw&&!(t&&l.__v_isReactive))return l;const Z=d.get(l);if(Z)return Z;const i=getTargetType(l);if(i===0)return l;const o=new Proxy(l,i===2?s:c);return d.set(l,o),o}function isReactive(l){return isReadonly(l)?isReactive(l.__v_raw):!!(l&&l.__v_isReactive)}function isReadonly(l){return!!(l&&l.__v_isReadonly)}function isShallow(l){return!!(l&&l.__v_isShallow)}function isProxy(l){return isReactive(l)||isReadonly(l)}function toRaw(l){const t=l&&l.__v_raw;return t?toRaw(t):l}function markRaw(l){return def(l,"__v_skip",!0),l}const toReactive=l=>isObject(l)?reactive(l):l,toReadonly=l=>isObject(l)?readonly(l):l;function trackRefValue(l){shouldTrack&&activeEffect&&(l=toRaw(l),trackEffects(l.dep||(l.dep=createDep())))}function triggerRefValue(l,t){l=toRaw(l);const c=l.dep;c&&triggerEffects(c)}function isRef(l){return!!(l&&l.__v_isRef===!0)}function ref(l){return createRef(l,!1)}function shallowRef(l){return createRef(l,!0)}function createRef(l,t){return isRef(l)?l:new RefImpl(l,t)}class RefImpl{constructor(t,c){this.__v_isShallow=c,this.dep=void 0,this.__v_isRef=!0,this._rawValue=c?t:toRaw(t),this._value=c?t:toReactive(t)}get value(){return trackRefValue(this),this._value}set value(t){const c=this.__v_isShallow||isShallow(t)||isReadonly(t);t=c?t:toRaw(t),hasChanged(t,this._rawValue)&&(this._rawValue=t,this._value=c?t:toReactive(t),triggerRefValue(this))}}function triggerRef(l){triggerRefValue(l)}function unref(l){return isRef(l)?l.value:l}const shallowUnwrapHandlers={get:(l,t,c)=>unref(Reflect.get(l,t,c)),set:(l,t,c,s)=>{const d=l[t];return isRef(d)&&!isRef(c)?(d.value=c,!0):Reflect.set(l,t,c,s)}};function proxyRefs(l){return isReactive(l)?l:new Proxy(l,shallowUnwrapHandlers)}class CustomRefImpl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:c,set:s}=t(()=>trackRefValue(this),()=>triggerRefValue(this));this._get=c,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function customRef(l){return new CustomRefImpl(l)}function toRefs(l){const t=isArray$1(l)?new Array(l.length):{};for(const c in l)t[c]=propertyToRef(l,c);return t}class ObjectRefImpl{constructor(t,c,s){this._object=t,this._key=c,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return getDepFromReactive(toRaw(this._object),this._key)}}class GetterRefImpl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function toRef$1(l,t,c){return isRef(l)?l:isFunction(l)?new GetterRefImpl(l):isObject(l)&&arguments.length>1?propertyToRef(l,t,c):ref(l)}function propertyToRef(l,t,c){const s=l[t];return isRef(s)?s:new ObjectRefImpl(l,t,c)}class ComputedRefImpl{constructor(t,c,s,d){this._setter=c,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new ReactiveEffect(t,()=>{this._dirty||(this._dirty=!0,triggerRefValue(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!d,this.__v_isReadonly=s}get value(){const t=toRaw(this);return trackRefValue(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function computed$1(l,t,c=!1){let s,d;const Z=isFunction(l);return Z?(s=l,d=NOOP):(s=l.get,d=l.set),new ComputedRefImpl(s,d,Z||!d,c)}function warn(l,...t){}function callWithErrorHandling(l,t,c,s){let d;try{d=s?l(...s):l()}catch(Z){handleError(Z,t,c)}return d}function callWithAsyncErrorHandling(l,t,c,s){if(isFunction(l)){const Z=callWithErrorHandling(l,t,c,s);return Z&&isPromise(Z)&&Z.catch(i=>{handleError(i,t,c)}),Z}const d=[];for(let Z=0;Z>>1;getId(queue$1[s])flushIndex&&queue$1.splice(t,1)}function queuePostFlushCb(l){isArray$1(l)?pendingPostFlushCbs.push(...l):(!activePostFlushCbs||!activePostFlushCbs.includes(l,l.allowRecurse?postFlushIndex+1:postFlushIndex))&&pendingPostFlushCbs.push(l),queueFlush()}function flushPreFlushCbs(l,t=isFlushing?flushIndex+1:0){for(;tgetId(c)-getId(s)),postFlushIndex=0;postFlushIndexl.id==null?1/0:l.id,comparator=(l,t)=>{const c=getId(l)-getId(t);if(c===0){if(l.pre&&!t.pre)return-1;if(t.pre&&!l.pre)return 1}return c};function flushJobs(l){isFlushPending=!1,isFlushing=!0,queue$1.sort(comparator);const t=NOOP;try{for(flushIndex=0;flushIndexisString(R)?R.trim():R)),X&&(d=c.map(looseToNumber))}let o,W=s[o=toHandlerKey(t)]||s[o=toHandlerKey(camelize(t))];!W&&Z&&(W=s[o=toHandlerKey(hyphenate(t))]),W&&callWithAsyncErrorHandling(W,l,6,d);const G=s[o+"Once"];if(G){if(!l.emitted)l.emitted={};else if(l.emitted[o])return;l.emitted[o]=!0,callWithAsyncErrorHandling(G,l,6,d)}}function normalizeEmitsOptions(l,t,c=!1){const s=t.emitsCache,d=s.get(l);if(d!==void 0)return d;const Z=l.emits;let i={},o=!1;if(!isFunction(l)){const W=G=>{const u=normalizeEmitsOptions(G,t,!0);u&&(o=!0,extend(i,u))};!c&&t.mixins.length&&t.mixins.forEach(W),l.extends&&W(l.extends),l.mixins&&l.mixins.forEach(W)}return!Z&&!o?(isObject(l)&&s.set(l,null),null):(isArray$1(Z)?Z.forEach(W=>i[W]=null):extend(i,Z),isObject(l)&&s.set(l,i),i)}function isEmitListener(l,t){return!l||!isOn(t)?!1:(t=t.slice(2).replace(/Once$/,""),hasOwn(l,t[0].toLowerCase()+t.slice(1))||hasOwn(l,hyphenate(t))||hasOwn(l,t))}let currentRenderingInstance=null,currentScopeId=null;function setCurrentRenderingInstance(l){const t=currentRenderingInstance;return currentRenderingInstance=l,currentScopeId=l&&l.type.__scopeId||null,t}function withCtx(l,t=currentRenderingInstance,c){if(!t||l._n)return l;const s=(...d)=>{s._d&&setBlockTracking(-1);const Z=setCurrentRenderingInstance(t);let i;try{i=l(...d)}finally{setCurrentRenderingInstance(Z),s._d&&setBlockTracking(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function markAttrsAccessed(){}function renderComponentRoot(l){const{type:t,vnode:c,proxy:s,withProxy:d,props:Z,propsOptions:[i],slots:o,attrs:W,emit:G,render:u,renderCache:X,data:z,setupState:R,ctx:S,inheritAttrs:k}=l;let L,x;const j=setCurrentRenderingInstance(l);try{if(c.shapeFlag&4){const J=d||s;L=normalizeVNode(u.call(J,J,X,Z,R,z,S)),x=W}else{const J=t;L=normalizeVNode(J.length>1?J(Z,{attrs:W,slots:o,emit:G}):J(Z,null)),x=t.props?W:getFunctionalFallthrough(W)}}catch(J){blockStack.length=0,handleError(J,l,1),L=createVNode(Comment)}let Q=L;if(x&&k!==!1){const J=Object.keys(x),{shapeFlag:M}=Q;J.length&&M&7&&(i&&J.some(isModelListener)&&(x=filterModelListeners(x,i)),Q=cloneVNode(Q,x))}return c.dirs&&(Q=cloneVNode(Q),Q.dirs=Q.dirs?Q.dirs.concat(c.dirs):c.dirs),c.transition&&(Q.transition=c.transition),L=Q,setCurrentRenderingInstance(j),L}const getFunctionalFallthrough=l=>{let t;for(const c in l)(c==="class"||c==="style"||isOn(c))&&((t||(t={}))[c]=l[c]);return t},filterModelListeners=(l,t)=>{const c={};for(const s in l)(!isModelListener(s)||!(s.slice(9)in t))&&(c[s]=l[s]);return c};function shouldUpdateComponent(l,t,c){const{props:s,children:d,component:Z}=l,{props:i,children:o,patchFlag:W}=t,G=Z.emitsOptions;if(t.dirs||t.transition)return!0;if(c&&W>=0){if(W&1024)return!0;if(W&16)return s?hasPropsChanged(s,i,G):!!i;if(W&8){const u=t.dynamicProps;for(let X=0;Xl.__isSuspense;function queueEffectWithSuspense(l,t){t&&t.pendingBranch?isArray$1(l)?t.effects.push(...l):t.effects.push(l):queuePostFlushCb(l)}function watchEffect(l,t){return doWatch(l,null,t)}const INITIAL_WATCHER_VALUE={};function watch(l,t,c){return doWatch(l,t,c)}function doWatch(l,t,{immediate:c,deep:s,flush:d,onTrack:Z,onTrigger:i}=EMPTY_OBJ){var o;const W=getCurrentScope()===((o=currentInstance)==null?void 0:o.scope)?currentInstance:null;let G,u=!1,X=!1;if(isRef(l)?(G=()=>l.value,u=isShallow(l)):isReactive(l)?(G=()=>l,s=!0):isArray$1(l)?(X=!0,u=l.some(J=>isReactive(J)||isShallow(J)),G=()=>l.map(J=>{if(isRef(J))return J.value;if(isReactive(J))return traverse(J);if(isFunction(J))return callWithErrorHandling(J,W,2)})):isFunction(l)?t?G=()=>callWithErrorHandling(l,W,2):G=()=>{if(!(W&&W.isUnmounted))return z&&z(),callWithAsyncErrorHandling(l,W,3,[R])}:G=NOOP,t&&s){const J=G;G=()=>traverse(J())}let z,R=J=>{z=j.onStop=()=>{callWithErrorHandling(J,W,4)}},S;if(isInSSRComponentSetup)if(R=NOOP,t?c&&callWithAsyncErrorHandling(t,W,3,[G(),X?[]:void 0,R]):G(),d==="sync"){const J=useSSRContext();S=J.__watcherHandles||(J.__watcherHandles=[])}else return NOOP;let k=X?new Array(l.length).fill(INITIAL_WATCHER_VALUE):INITIAL_WATCHER_VALUE;const L=()=>{if(j.active)if(t){const J=j.run();(s||u||(X?J.some((M,y)=>hasChanged(M,k[y])):hasChanged(J,k)))&&(z&&z(),callWithAsyncErrorHandling(t,W,3,[J,k===INITIAL_WATCHER_VALUE?void 0:X&&k[0]===INITIAL_WATCHER_VALUE?[]:k,R]),k=J)}else j.run()};L.allowRecurse=!!t;let x;d==="sync"?x=L:d==="post"?x=()=>queuePostRenderEffect(L,W&&W.suspense):(L.pre=!0,W&&(L.id=W.uid),x=()=>queueJob(L));const j=new ReactiveEffect(G,x);t?c?L():k=j.run():d==="post"?queuePostRenderEffect(j.run.bind(j),W&&W.suspense):j.run();const Q=()=>{j.stop(),W&&W.scope&&remove(W.scope.effects,j)};return S&&S.push(Q),Q}function instanceWatch(l,t,c){const s=this.proxy,d=isString(l)?l.includes(".")?createPathGetter(s,l):()=>s[l]:l.bind(s,s);let Z;isFunction(t)?Z=t:(Z=t.handler,c=t);const i=currentInstance;setCurrentInstance(this);const o=doWatch(d,Z.bind(s),c);return i?setCurrentInstance(i):unsetCurrentInstance(),o}function createPathGetter(l,t){const c=t.split(".");return()=>{let s=l;for(let d=0;d{traverse(c,t)});else if(isPlainObject$1(l))for(const c in l)traverse(l[c],t);return l}function withDirectives(l,t){const c=currentRenderingInstance;if(c===null)return l;const s=getExposeProxy(c)||c.proxy,d=l.dirs||(l.dirs=[]);for(let Z=0;Z{l.isMounted=!0}),onBeforeUnmount(()=>{l.isUnmounting=!0}),l}const TransitionHookValidator=[Function,Array],BaseTransitionPropsValidators={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:TransitionHookValidator,onEnter:TransitionHookValidator,onAfterEnter:TransitionHookValidator,onEnterCancelled:TransitionHookValidator,onBeforeLeave:TransitionHookValidator,onLeave:TransitionHookValidator,onAfterLeave:TransitionHookValidator,onLeaveCancelled:TransitionHookValidator,onBeforeAppear:TransitionHookValidator,onAppear:TransitionHookValidator,onAfterAppear:TransitionHookValidator,onAppearCancelled:TransitionHookValidator},BaseTransitionImpl={name:"BaseTransition",props:BaseTransitionPropsValidators,setup(l,{slots:t}){const c=getCurrentInstance(),s=useTransitionState();let d;return()=>{const Z=t.default&&getTransitionRawChildren(t.default(),!0);if(!Z||!Z.length)return;let i=Z[0];if(Z.length>1){for(const k of Z)if(k.type!==Comment){i=k;break}}const o=toRaw(l),{mode:W}=o;if(s.isLeaving)return emptyPlaceholder(i);const G=getKeepAliveChild(i);if(!G)return emptyPlaceholder(i);const u=resolveTransitionHooks(G,o,s,c);setTransitionHooks(G,u);const X=c.subTree,z=X&&getKeepAliveChild(X);let R=!1;const{getTransitionKey:S}=G.type;if(S){const k=S();d===void 0?d=k:k!==d&&(d=k,R=!0)}if(z&&z.type!==Comment&&(!isSameVNodeType(G,z)||R)){const k=resolveTransitionHooks(z,o,s,c);if(setTransitionHooks(z,k),W==="out-in")return s.isLeaving=!0,k.afterLeave=()=>{s.isLeaving=!1,c.update.active!==!1&&c.update()},emptyPlaceholder(i);W==="in-out"&&G.type!==Comment&&(k.delayLeave=(L,x,j)=>{const Q=getLeavingNodesForType(s,z);Q[String(z.key)]=z,L._leaveCb=()=>{x(),L._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=j})}return i}}},BaseTransition=BaseTransitionImpl;function getLeavingNodesForType(l,t){const{leavingVNodes:c}=l;let s=c.get(t.type);return s||(s=Object.create(null),c.set(t.type,s)),s}function resolveTransitionHooks(l,t,c,s){const{appear:d,mode:Z,persisted:i=!1,onBeforeEnter:o,onEnter:W,onAfterEnter:G,onEnterCancelled:u,onBeforeLeave:X,onLeave:z,onAfterLeave:R,onLeaveCancelled:S,onBeforeAppear:k,onAppear:L,onAfterAppear:x,onAppearCancelled:j}=t,Q=String(l.key),J=getLeavingNodesForType(c,l),M=(m,D)=>{m&&callWithAsyncErrorHandling(m,s,9,D)},y=(m,D)=>{const H=D[1];M(m,D),isArray$1(m)?m.every(V=>V.length<=1)&&H():m.length<=1&&H()},Y={mode:Z,persisted:i,beforeEnter(m){let D=o;if(!c.isMounted)if(d)D=k||o;else return;m._leaveCb&&m._leaveCb(!0);const H=J[Q];H&&isSameVNodeType(l,H)&&H.el._leaveCb&&H.el._leaveCb(),M(D,[m])},enter(m){let D=W,H=G,V=u;if(!c.isMounted)if(d)D=L||W,H=x||G,V=j||u;else return;let v=!1;const A=m._enterCb=Nl=>{v||(v=!0,Nl?M(V,[m]):M(H,[m]),Y.delayedLeave&&Y.delayedLeave(),m._enterCb=void 0)};D?y(D,[m,A]):A()},leave(m,D){const H=String(l.key);if(m._enterCb&&m._enterCb(!0),c.isUnmounting)return D();M(X,[m]);let V=!1;const v=m._leaveCb=A=>{V||(V=!0,D(),A?M(S,[m]):M(R,[m]),m._leaveCb=void 0,J[H]===l&&delete J[H])};J[H]=l,z?y(z,[m,v]):v()},clone(m){return resolveTransitionHooks(m,t,c,s)}};return Y}function emptyPlaceholder(l){if(isKeepAlive(l))return l=cloneVNode(l),l.children=null,l}function getKeepAliveChild(l){return isKeepAlive(l)?l.children?l.children[0]:void 0:l}function setTransitionHooks(l,t){l.shapeFlag&6&&l.component?setTransitionHooks(l.component.subTree,t):l.shapeFlag&128?(l.ssContent.transition=t.clone(l.ssContent),l.ssFallback.transition=t.clone(l.ssFallback)):l.transition=t}function getTransitionRawChildren(l,t=!1,c){let s=[],d=0;for(let Z=0;Z1)for(let Z=0;Zextend({name:l.name},t,{setup:l}))():l}const isAsyncWrapper=l=>!!l.type.__asyncLoader;function defineAsyncComponent(l){isFunction(l)&&(l={loader:l});const{loader:t,loadingComponent:c,errorComponent:s,delay:d=200,timeout:Z,suspensible:i=!0,onError:o}=l;let W=null,G,u=0;const X=()=>(u++,W=null,z()),z=()=>{let R;return W||(R=W=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),o)return new Promise((k,L)=>{o(S,()=>k(X()),()=>L(S),u+1)});throw S}).then(S=>R!==W&&W?W:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),G=S,S)))};return defineComponent({name:"AsyncComponentWrapper",__asyncLoader:z,get __asyncResolved(){return G},setup(){const R=currentInstance;if(G)return()=>createInnerComp(G,R);const S=j=>{W=null,handleError(j,R,13,!s)};if(i&&R.suspense||isInSSRComponentSetup)return z().then(j=>()=>createInnerComp(j,R)).catch(j=>(S(j),()=>s?createVNode(s,{error:j}):null));const k=ref(!1),L=ref(),x=ref(!!d);return d&&setTimeout(()=>{x.value=!1},d),Z!=null&&setTimeout(()=>{if(!k.value&&!L.value){const j=new Error(`Async component timed out after ${Z}ms.`);S(j),L.value=j}},Z),z().then(()=>{k.value=!0,R.parent&&isKeepAlive(R.parent.vnode)&&queueJob(R.parent.update)}).catch(j=>{S(j),L.value=j}),()=>{if(k.value&&G)return createInnerComp(G,R);if(L.value&&s)return createVNode(s,{error:L.value});if(c&&!x.value)return createVNode(c)}}})}function createInnerComp(l,t){const{ref:c,props:s,children:d,ce:Z}=t.vnode,i=createVNode(l,s,d);return i.ref=c,i.ce=Z,delete t.vnode.ce,i}const isKeepAlive=l=>l.type.__isKeepAlive;function onActivated(l,t){registerKeepAliveHook(l,"a",t)}function onDeactivated(l,t){registerKeepAliveHook(l,"da",t)}function registerKeepAliveHook(l,t,c=currentInstance){const s=l.__wdc||(l.__wdc=()=>{let d=c;for(;d;){if(d.isDeactivated)return;d=d.parent}return l()});if(injectHook(t,s,c),c){let d=c.parent;for(;d&&d.parent;)isKeepAlive(d.parent.vnode)&&injectToKeepAliveRoot(s,t,c,d),d=d.parent}}function injectToKeepAliveRoot(l,t,c,s){const d=injectHook(t,l,s,!0);onUnmounted(()=>{remove(s[t],d)},c)}function injectHook(l,t,c=currentInstance,s=!1){if(c){const d=c[l]||(c[l]=[]),Z=t.__weh||(t.__weh=(...i)=>{if(c.isUnmounted)return;pauseTracking(),setCurrentInstance(c);const o=callWithAsyncErrorHandling(t,c,l,i);return unsetCurrentInstance(),resetTracking(),o});return s?d.unshift(Z):d.push(Z),Z}}const createHook=l=>(t,c=currentInstance)=>(!isInSSRComponentSetup||l==="sp")&&injectHook(l,(...s)=>t(...s),c),onBeforeMount=createHook("bm"),onMounted=createHook("m"),onBeforeUpdate=createHook("bu"),onUpdated=createHook("u"),onBeforeUnmount=createHook("bum"),onUnmounted=createHook("um"),onServerPrefetch=createHook("sp"),onRenderTriggered=createHook("rtg"),onRenderTracked=createHook("rtc");function onErrorCaptured(l,t=currentInstance){injectHook("ec",l,t)}const COMPONENTS="components";function resolveComponent(l,t){return resolveAsset(COMPONENTS,l,!0,t)||l}const NULL_DYNAMIC_COMPONENT=Symbol.for("v-ndc");function resolveAsset(l,t,c=!0,s=!1){const d=currentRenderingInstance||currentInstance;if(d){const Z=d.type;if(l===COMPONENTS){const o=getComponentName(Z,!1);if(o&&(o===t||o===camelize(t)||o===capitalize(camelize(t))))return Z}const i=resolve(d[l]||Z[l],t)||resolve(d.appContext[l],t);return!i&&s?Z:i}}function resolve(l,t){return l&&(l[t]||l[camelize(t)]||l[capitalize(camelize(t))])}function renderList(l,t,c,s){let d;const Z=c&&c[s];if(isArray$1(l)||isString(l)){d=new Array(l.length);for(let i=0,o=l.length;it(i,o,void 0,Z&&Z[o]));else{const i=Object.keys(l);d=new Array(i.length);for(let o=0,W=i.length;oisVNode(t)?!(t.type===Comment||t.type===Fragment&&!ensureValidVNode(t.children)):!0)?l:null}const getPublicInstance=l=>l?isStatefulComponent(l)?getExposeProxy(l)||l.proxy:getPublicInstance(l.parent):null,publicPropertiesMap=extend(Object.create(null),{$:l=>l,$el:l=>l.vnode.el,$data:l=>l.data,$props:l=>l.props,$attrs:l=>l.attrs,$slots:l=>l.slots,$refs:l=>l.refs,$parent:l=>getPublicInstance(l.parent),$root:l=>getPublicInstance(l.root),$emit:l=>l.emit,$options:l=>resolveMergedOptions(l),$forceUpdate:l=>l.f||(l.f=()=>queueJob(l.update)),$nextTick:l=>l.n||(l.n=nextTick.bind(l.proxy)),$watch:l=>instanceWatch.bind(l)}),hasSetupBinding=(l,t)=>l!==EMPTY_OBJ&&!l.__isScriptSetup&&hasOwn(l,t),PublicInstanceProxyHandlers={get({_:l},t){const{ctx:c,setupState:s,data:d,props:Z,accessCache:i,type:o,appContext:W}=l;let G;if(t[0]!=="$"){const R=i[t];if(R!==void 0)switch(R){case 1:return s[t];case 2:return d[t];case 4:return c[t];case 3:return Z[t]}else{if(hasSetupBinding(s,t))return i[t]=1,s[t];if(d!==EMPTY_OBJ&&hasOwn(d,t))return i[t]=2,d[t];if((G=l.propsOptions[0])&&hasOwn(G,t))return i[t]=3,Z[t];if(c!==EMPTY_OBJ&&hasOwn(c,t))return i[t]=4,c[t];shouldCacheAccess&&(i[t]=0)}}const u=publicPropertiesMap[t];let X,z;if(u)return t==="$attrs"&&track(l,"get",t),u(l);if((X=o.__cssModules)&&(X=X[t]))return X;if(c!==EMPTY_OBJ&&hasOwn(c,t))return i[t]=4,c[t];if(z=W.config.globalProperties,hasOwn(z,t))return z[t]},set({_:l},t,c){const{data:s,setupState:d,ctx:Z}=l;return hasSetupBinding(d,t)?(d[t]=c,!0):s!==EMPTY_OBJ&&hasOwn(s,t)?(s[t]=c,!0):hasOwn(l.props,t)||t[0]==="$"&&t.slice(1)in l?!1:(Z[t]=c,!0)},has({_:{data:l,setupState:t,accessCache:c,ctx:s,appContext:d,propsOptions:Z}},i){let o;return!!c[i]||l!==EMPTY_OBJ&&hasOwn(l,i)||hasSetupBinding(t,i)||(o=Z[0])&&hasOwn(o,i)||hasOwn(s,i)||hasOwn(publicPropertiesMap,i)||hasOwn(d.config.globalProperties,i)},defineProperty(l,t,c){return c.get!=null?l._.accessCache[t]=0:hasOwn(c,"value")&&this.set(l,t,c.value,null),Reflect.defineProperty(l,t,c)}};function normalizePropsOrEmits(l){return isArray$1(l)?l.reduce((t,c)=>(t[c]=null,t),{}):l}let shouldCacheAccess=!0;function applyOptions(l){const t=resolveMergedOptions(l),c=l.proxy,s=l.ctx;shouldCacheAccess=!1,t.beforeCreate&&callHook$1(t.beforeCreate,l,"bc");const{data:d,computed:Z,methods:i,watch:o,provide:W,inject:G,created:u,beforeMount:X,mounted:z,beforeUpdate:R,updated:S,activated:k,deactivated:L,beforeDestroy:x,beforeUnmount:j,destroyed:Q,unmounted:J,render:M,renderTracked:y,renderTriggered:Y,errorCaptured:m,serverPrefetch:D,expose:H,inheritAttrs:V,components:v,directives:A,filters:Nl}=t;if(G&&resolveInjections(G,s,null),i)for(const Zt in i){const lt=i[Zt];isFunction(lt)&&(s[Zt]=lt.bind(c))}if(d){const Zt=d.call(c,c);isObject(Zt)&&(l.data=reactive(Zt))}if(shouldCacheAccess=!0,Z)for(const Zt in Z){const lt=Z[Zt],at=isFunction(lt)?lt.bind(c,c):isFunction(lt.get)?lt.get.bind(c,c):NOOP,Wt=!isFunction(lt)&&isFunction(lt.set)?lt.set.bind(c):NOOP,Mt=computed({get:at,set:Wt});Object.defineProperty(s,Zt,{enumerable:!0,configurable:!0,get:()=>Mt.value,set:Nt=>Mt.value=Nt})}if(o)for(const Zt in o)createWatcher(o[Zt],s,c,Zt);if(W){const Zt=isFunction(W)?W.call(c):W;Reflect.ownKeys(Zt).forEach(lt=>{provide(lt,Zt[lt])})}u&&callHook$1(u,l,"c");function Xl(Zt,lt){isArray$1(lt)?lt.forEach(at=>Zt(at.bind(c))):lt&&Zt(lt.bind(c))}if(Xl(onBeforeMount,X),Xl(onMounted,z),Xl(onBeforeUpdate,R),Xl(onUpdated,S),Xl(onActivated,k),Xl(onDeactivated,L),Xl(onErrorCaptured,m),Xl(onRenderTracked,y),Xl(onRenderTriggered,Y),Xl(onBeforeUnmount,j),Xl(onUnmounted,J),Xl(onServerPrefetch,D),isArray$1(H))if(H.length){const Zt=l.exposed||(l.exposed={});H.forEach(lt=>{Object.defineProperty(Zt,lt,{get:()=>c[lt],set:at=>c[lt]=at})})}else l.exposed||(l.exposed={});M&&l.render===NOOP&&(l.render=M),V!=null&&(l.inheritAttrs=V),v&&(l.components=v),A&&(l.directives=A)}function resolveInjections(l,t,c=NOOP){isArray$1(l)&&(l=normalizeInject(l));for(const s in l){const d=l[s];let Z;isObject(d)?"default"in d?Z=inject(d.from||s,d.default,!0):Z=inject(d.from||s):Z=inject(d),isRef(Z)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>Z.value,set:i=>Z.value=i}):t[s]=Z}}function callHook$1(l,t,c){callWithAsyncErrorHandling(isArray$1(l)?l.map(s=>s.bind(t.proxy)):l.bind(t.proxy),t,c)}function createWatcher(l,t,c,s){const d=s.includes(".")?createPathGetter(c,s):()=>c[s];if(isString(l)){const Z=t[l];isFunction(Z)&&watch(d,Z)}else if(isFunction(l))watch(d,l.bind(c));else if(isObject(l))if(isArray$1(l))l.forEach(Z=>createWatcher(Z,t,c,s));else{const Z=isFunction(l.handler)?l.handler.bind(c):t[l.handler];isFunction(Z)&&watch(d,Z,l)}}function resolveMergedOptions(l){const t=l.type,{mixins:c,extends:s}=t,{mixins:d,optionsCache:Z,config:{optionMergeStrategies:i}}=l.appContext,o=Z.get(t);let W;return o?W=o:!d.length&&!c&&!s?W=t:(W={},d.length&&d.forEach(G=>mergeOptions$1(W,G,i,!0)),mergeOptions$1(W,t,i)),isObject(t)&&Z.set(t,W),W}function mergeOptions$1(l,t,c,s=!1){const{mixins:d,extends:Z}=t;Z&&mergeOptions$1(l,Z,c,!0),d&&d.forEach(i=>mergeOptions$1(l,i,c,!0));for(const i in t)if(!(s&&i==="expose")){const o=internalOptionMergeStrats[i]||c&&c[i];l[i]=o?o(l[i],t[i]):t[i]}return l}const internalOptionMergeStrats={data:mergeDataFn,props:mergeEmitsOrPropsOptions,emits:mergeEmitsOrPropsOptions,methods:mergeObjectOptions,computed:mergeObjectOptions,beforeCreate:mergeAsArray,created:mergeAsArray,beforeMount:mergeAsArray,mounted:mergeAsArray,beforeUpdate:mergeAsArray,updated:mergeAsArray,beforeDestroy:mergeAsArray,beforeUnmount:mergeAsArray,destroyed:mergeAsArray,unmounted:mergeAsArray,activated:mergeAsArray,deactivated:mergeAsArray,errorCaptured:mergeAsArray,serverPrefetch:mergeAsArray,components:mergeObjectOptions,directives:mergeObjectOptions,watch:mergeWatchOptions,provide:mergeDataFn,inject:mergeInject};function mergeDataFn(l,t){return t?l?function(){return extend(isFunction(l)?l.call(this,this):l,isFunction(t)?t.call(this,this):t)}:t:l}function mergeInject(l,t){return mergeObjectOptions(normalizeInject(l),normalizeInject(t))}function normalizeInject(l){if(isArray$1(l)){const t={};for(let c=0;c1)return c&&isFunction(t)?t.call(s&&s.proxy):t}}function initProps(l,t,c,s=!1){const d={},Z={};def(Z,InternalObjectKey,1),l.propsDefaults=Object.create(null),setFullProps(l,t,d,Z);for(const i in l.propsOptions[0])i in d||(d[i]=void 0);c?l.props=s?d:shallowReactive(d):l.type.props?l.props=d:l.props=Z,l.attrs=Z}function updateProps(l,t,c,s){const{props:d,attrs:Z,vnode:{patchFlag:i}}=l,o=toRaw(d),[W]=l.propsOptions;let G=!1;if((s||i>0)&&!(i&16)){if(i&8){const u=l.vnode.dynamicProps;for(let X=0;X{W=!0;const[z,R]=normalizePropsOptions(X,t,!0);extend(i,z),R&&o.push(...R)};!c&&t.mixins.length&&t.mixins.forEach(u),l.extends&&u(l.extends),l.mixins&&l.mixins.forEach(u)}if(!Z&&!W)return isObject(l)&&s.set(l,EMPTY_ARR),EMPTY_ARR;if(isArray$1(Z))for(let u=0;u-1,R[1]=k<0||S-1||hasOwn(R,"default"))&&o.push(X)}}}const G=[i,o];return isObject(l)&&s.set(l,G),G}function validatePropName(l){return l[0]!=="$"}function getType(l){const t=l&&l.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:l===null?"null":""}function isSameType(l,t){return getType(l)===getType(t)}function getTypeIndex(l,t){return isArray$1(t)?t.findIndex(c=>isSameType(c,l)):isFunction(t)&&isSameType(t,l)?0:-1}const isInternalKey=l=>l[0]==="_"||l==="$stable",normalizeSlotValue=l=>isArray$1(l)?l.map(normalizeVNode):[normalizeVNode(l)],normalizeSlot$1=(l,t,c)=>{if(t._n)return t;const s=withCtx((...d)=>normalizeSlotValue(t(...d)),c);return s._c=!1,s},normalizeObjectSlots=(l,t,c)=>{const s=l._ctx;for(const d in l){if(isInternalKey(d))continue;const Z=l[d];if(isFunction(Z))t[d]=normalizeSlot$1(d,Z,s);else if(Z!=null){const i=normalizeSlotValue(Z);t[d]=()=>i}}},normalizeVNodeSlots=(l,t)=>{const c=normalizeSlotValue(t);l.slots.default=()=>c},initSlots=(l,t)=>{if(l.vnode.shapeFlag&32){const c=t._;c?(l.slots=toRaw(t),def(t,"_",c)):normalizeObjectSlots(t,l.slots={})}else l.slots={},t&&normalizeVNodeSlots(l,t);def(l.slots,InternalObjectKey,1)},updateSlots=(l,t,c)=>{const{vnode:s,slots:d}=l;let Z=!0,i=EMPTY_OBJ;if(s.shapeFlag&32){const o=t._;o?c&&o===1?Z=!1:(extend(d,t),!c&&o===1&&delete d._):(Z=!t.$stable,normalizeObjectSlots(t,d)),i=t}else t&&(normalizeVNodeSlots(l,t),i={default:1});if(Z)for(const o in d)!isInternalKey(o)&&!(o in i)&&delete d[o]};function setRef(l,t,c,s,d=!1){if(isArray$1(l)){l.forEach((z,R)=>setRef(z,t&&(isArray$1(t)?t[R]:t),c,s,d));return}if(isAsyncWrapper(s)&&!d)return;const Z=s.shapeFlag&4?getExposeProxy(s.component)||s.component.proxy:s.el,i=d?null:Z,{i:o,r:W}=l,G=t&&t.r,u=o.refs===EMPTY_OBJ?o.refs={}:o.refs,X=o.setupState;if(G!=null&&G!==W&&(isString(G)?(u[G]=null,hasOwn(X,G)&&(X[G]=null)):isRef(G)&&(G.value=null)),isFunction(W))callWithErrorHandling(W,o,12,[i,u]);else{const z=isString(W),R=isRef(W);if(z||R){const S=()=>{if(l.f){const k=z?hasOwn(X,W)?X[W]:u[W]:W.value;d?isArray$1(k)&&remove(k,Z):isArray$1(k)?k.includes(Z)||k.push(Z):z?(u[W]=[Z],hasOwn(X,W)&&(X[W]=u[W])):(W.value=[Z],l.k&&(u[l.k]=W.value))}else z?(u[W]=i,hasOwn(X,W)&&(X[W]=i)):R&&(W.value=i,l.k&&(u[l.k]=i))};i?(S.id=-1,queuePostRenderEffect(S,c)):S()}}}let hasMismatch=!1;const isSVGContainer=l=>/svg/.test(l.namespaceURI)&&l.tagName!=="foreignObject",isComment=l=>l.nodeType===8;function createHydrationFunctions(l){const{mt:t,p:c,o:{patchProp:s,createText:d,nextSibling:Z,parentNode:i,remove:o,insert:W,createComment:G}}=l,u=(x,j)=>{if(!j.hasChildNodes()){c(null,x,j),flushPostFlushCbs(),j._vnode=x;return}hasMismatch=!1,X(j.firstChild,x,null,null,null),flushPostFlushCbs(),j._vnode=x,hasMismatch&&console.error("Hydration completed but contains mismatches.")},X=(x,j,Q,J,M,y=!1)=>{const Y=isComment(x)&&x.data==="[",m=()=>k(x,j,Q,J,M,Y),{type:D,ref:H,shapeFlag:V,patchFlag:v}=j;let A=x.nodeType;j.el=x,v===-2&&(y=!1,j.dynamicChildren=null);let Nl=null;switch(D){case Text:A!==3?j.children===""?(W(j.el=d(""),i(x),x),Nl=x):Nl=m():(x.data!==j.children&&(hasMismatch=!0,x.data=j.children),Nl=Z(x));break;case Comment:A!==8||Y?Nl=m():Nl=Z(x);break;case Static:if(Y&&(x=Z(x),A=x.nodeType),A===1||A===3){Nl=x;const fl=!j.children.length;for(let Xl=0;Xl{y=y||!!j.dynamicChildren;const{type:Y,props:m,patchFlag:D,shapeFlag:H,dirs:V}=j,v=Y==="input"&&V||Y==="option";if(v||D!==-1){if(V&&invokeDirectiveHook(j,null,Q,"created"),m)if(v||!y||D&48)for(const Nl in m)(v&&Nl.endsWith("value")||isOn(Nl)&&!isReservedProp(Nl))&&s(x,Nl,null,m[Nl],!1,void 0,Q);else m.onClick&&s(x,"onClick",null,m.onClick,!1,void 0,Q);let A;if((A=m&&m.onVnodeBeforeMount)&&invokeVNodeHook(A,Q,j),V&&invokeDirectiveHook(j,null,Q,"beforeMount"),((A=m&&m.onVnodeMounted)||V)&&queueEffectWithSuspense(()=>{A&&invokeVNodeHook(A,Q,j),V&&invokeDirectiveHook(j,null,Q,"mounted")},J),H&16&&!(m&&(m.innerHTML||m.textContent))){let Nl=R(x.firstChild,j,x,Q,J,M,y);for(;Nl;){hasMismatch=!0;const fl=Nl;Nl=Nl.nextSibling,o(fl)}}else H&8&&x.textContent!==j.children&&(hasMismatch=!0,x.textContent=j.children)}return x.nextSibling},R=(x,j,Q,J,M,y,Y)=>{Y=Y||!!j.dynamicChildren;const m=j.children,D=m.length;for(let H=0;H{const{slotScopeIds:Y}=j;Y&&(M=M?M.concat(Y):Y);const m=i(x),D=R(Z(x),j,m,Q,J,M,y);return D&&isComment(D)&&D.data==="]"?Z(j.anchor=D):(hasMismatch=!0,W(j.anchor=G("]"),m,D),D)},k=(x,j,Q,J,M,y)=>{if(hasMismatch=!0,j.el=null,y){const D=L(x);for(;;){const H=Z(x);if(H&&H!==D)o(H);else break}}const Y=Z(x),m=i(x);return o(x),c(null,j,m,Y,Q,J,isSVGContainer(m),M),Y},L=x=>{let j=0;for(;x;)if(x=Z(x),x&&isComment(x)&&(x.data==="["&&j++,x.data==="]")){if(j===0)return Z(x);j--}return x};return[u,X]}const queuePostRenderEffect=queueEffectWithSuspense;function createHydrationRenderer(l){return baseCreateRenderer(l,createHydrationFunctions)}function baseCreateRenderer(l,t){const c=getGlobalThis();c.__VUE__=!0;const{insert:s,remove:d,patchProp:Z,createElement:i,createText:o,createComment:W,setText:G,setElementText:u,parentNode:X,nextSibling:z,setScopeId:R=NOOP,insertStaticContent:S}=l,k=(T,w,b,N=null,I=null,C=null,K=!1,f=null,Yl=!!w.dynamicChildren)=>{if(T===w)return;T&&!isSameVNodeType(T,w)&&(N=O(T),Nt(T,I,C,!0),T=null),w.patchFlag===-2&&(Yl=!1,w.dynamicChildren=null);const{type:Wl,ref:Vl,shapeFlag:Tl}=w;switch(Wl){case Text:L(T,w,b,N);break;case Comment:x(T,w,b,N);break;case Static:T==null&&j(w,b,N,K);break;case Fragment:v(T,w,b,N,I,C,K,f,Yl);break;default:Tl&1?M(T,w,b,N,I,C,K,f,Yl):Tl&6?A(T,w,b,N,I,C,K,f,Yl):(Tl&64||Tl&128)&&Wl.process(T,w,b,N,I,C,K,f,Yl,P)}Vl!=null&&I&&setRef(Vl,T&&T.ref,C,w||T,!w)},L=(T,w,b,N)=>{if(T==null)s(w.el=o(w.children),b,N);else{const I=w.el=T.el;w.children!==T.children&&G(I,w.children)}},x=(T,w,b,N)=>{T==null?s(w.el=W(w.children||""),b,N):w.el=T.el},j=(T,w,b,N)=>{[T.el,T.anchor]=S(T.children,w,b,N,T.el,T.anchor)},Q=({el:T,anchor:w},b,N)=>{let I;for(;T&&T!==w;)I=z(T),s(T,b,N),T=I;s(w,b,N)},J=({el:T,anchor:w})=>{let b;for(;T&&T!==w;)b=z(T),d(T),T=b;d(w)},M=(T,w,b,N,I,C,K,f,Yl)=>{K=K||w.type==="svg",T==null?y(w,b,N,I,C,K,f,Yl):D(T,w,I,C,K,f,Yl)},y=(T,w,b,N,I,C,K,f)=>{let Yl,Wl;const{type:Vl,props:Tl,shapeFlag:$l,transition:tt,dirs:dt}=T;if(Yl=T.el=i(T.type,C,Tl&&Tl.is,Tl),$l&8?u(Yl,T.children):$l&16&&m(T.children,Yl,null,N,I,C&&Vl!=="foreignObject",K,f),dt&&invokeDirectiveHook(T,null,N,"created"),Y(Yl,T,T.scopeId,K,N),Tl){for(const ut in Tl)ut!=="value"&&!isReservedProp(ut)&&Z(Yl,ut,null,Tl[ut],C,T.children,N,I,g);"value"in Tl&&Z(Yl,"value",null,Tl.value),(Wl=Tl.onVnodeBeforeMount)&&invokeVNodeHook(Wl,N,T)}dt&&invokeDirectiveHook(T,null,N,"beforeMount");const bt=(!I||I&&!I.pendingBranch)&&tt&&!tt.persisted;bt&&tt.beforeEnter(Yl),s(Yl,w,b),((Wl=Tl&&Tl.onVnodeMounted)||bt||dt)&&queuePostRenderEffect(()=>{Wl&&invokeVNodeHook(Wl,N,T),bt&&tt.enter(Yl),dt&&invokeDirectiveHook(T,null,N,"mounted")},I)},Y=(T,w,b,N,I)=>{if(b&&R(T,b),N)for(let C=0;C{for(let Wl=Yl;Wl{const f=w.el=T.el;let{patchFlag:Yl,dynamicChildren:Wl,dirs:Vl}=w;Yl|=T.patchFlag&16;const Tl=T.props||EMPTY_OBJ,$l=w.props||EMPTY_OBJ;let tt;b&&toggleRecurse(b,!1),(tt=$l.onVnodeBeforeUpdate)&&invokeVNodeHook(tt,b,w,T),Vl&&invokeDirectiveHook(w,T,b,"beforeUpdate"),b&&toggleRecurse(b,!0);const dt=I&&w.type!=="foreignObject";if(Wl?H(T.dynamicChildren,Wl,f,b,N,dt,C):K||lt(T,w,f,null,b,N,dt,C,!1),Yl>0){if(Yl&16)V(f,w,Tl,$l,b,N,I);else if(Yl&2&&Tl.class!==$l.class&&Z(f,"class",null,$l.class,I),Yl&4&&Z(f,"style",Tl.style,$l.style,I),Yl&8){const bt=w.dynamicProps;for(let ut=0;ut{tt&&invokeVNodeHook(tt,b,w,T),Vl&&invokeDirectiveHook(w,T,b,"updated")},N)},H=(T,w,b,N,I,C,K)=>{for(let f=0;f{if(b!==N){if(b!==EMPTY_OBJ)for(const f in b)!isReservedProp(f)&&!(f in N)&&Z(T,f,b[f],null,K,w.children,I,C,g);for(const f in N){if(isReservedProp(f))continue;const Yl=N[f],Wl=b[f];Yl!==Wl&&f!=="value"&&Z(T,f,Wl,Yl,K,w.children,I,C,g)}"value"in N&&Z(T,"value",b.value,N.value)}},v=(T,w,b,N,I,C,K,f,Yl)=>{const Wl=w.el=T?T.el:o(""),Vl=w.anchor=T?T.anchor:o("");let{patchFlag:Tl,dynamicChildren:$l,slotScopeIds:tt}=w;tt&&(f=f?f.concat(tt):tt),T==null?(s(Wl,b,N),s(Vl,b,N),m(w.children,b,Vl,I,C,K,f,Yl)):Tl>0&&Tl&64&&$l&&T.dynamicChildren?(H(T.dynamicChildren,$l,b,I,C,K,f),(w.key!=null||I&&w===I.subTree)&&traverseStaticChildren(T,w,!0)):lt(T,w,b,Vl,I,C,K,f,Yl)},A=(T,w,b,N,I,C,K,f,Yl)=>{w.slotScopeIds=f,T==null?w.shapeFlag&512?I.ctx.activate(w,b,N,K,Yl):Nl(w,b,N,I,C,K,Yl):fl(T,w,Yl)},Nl=(T,w,b,N,I,C,K)=>{const f=T.component=createComponentInstance(T,N,I);if(isKeepAlive(T)&&(f.ctx.renderer=P),setupComponent(f),f.asyncDep){if(I&&I.registerDep(f,Xl),!T.el){const Yl=f.subTree=createVNode(Comment);x(null,Yl,w,b)}return}Xl(f,T,w,b,I,C,K)},fl=(T,w,b)=>{const N=w.component=T.component;if(shouldUpdateComponent(T,w,b))if(N.asyncDep&&!N.asyncResolved){Zt(N,w,b);return}else N.next=w,invalidateJob(N.update),N.update();else w.el=T.el,N.vnode=w},Xl=(T,w,b,N,I,C,K)=>{const f=()=>{if(T.isMounted){let{next:Vl,bu:Tl,u:$l,parent:tt,vnode:dt}=T,bt=Vl,ut;toggleRecurse(T,!1),Vl?(Vl.el=dt.el,Zt(T,Vl,K)):Vl=dt,Tl&&invokeArrayFns(Tl),(ut=Vl.props&&Vl.props.onVnodeBeforeUpdate)&&invokeVNodeHook(ut,tt,Vl,dt),toggleRecurse(T,!0);const ht=renderComponentRoot(T),yt=T.subTree;T.subTree=ht,k(yt,ht,X(yt.el),O(yt),T,I,C),Vl.el=ht.el,bt===null&&updateHOCHostEl(T,ht.el),$l&&queuePostRenderEffect($l,I),(ut=Vl.props&&Vl.props.onVnodeUpdated)&&queuePostRenderEffect(()=>invokeVNodeHook(ut,tt,Vl,dt),I)}else{let Vl;const{el:Tl,props:$l}=w,{bm:tt,m:dt,parent:bt}=T,ut=isAsyncWrapper(w);if(toggleRecurse(T,!1),tt&&invokeArrayFns(tt),!ut&&(Vl=$l&&$l.onVnodeBeforeMount)&&invokeVNodeHook(Vl,bt,w),toggleRecurse(T,!0),Tl&&cl){const ht=()=>{T.subTree=renderComponentRoot(T),cl(Tl,T.subTree,T,I,null)};ut?w.type.__asyncLoader().then(()=>!T.isUnmounted&&ht()):ht()}else{const ht=T.subTree=renderComponentRoot(T);k(null,ht,b,N,T,I,C),w.el=ht.el}if(dt&&queuePostRenderEffect(dt,I),!ut&&(Vl=$l&&$l.onVnodeMounted)){const ht=w;queuePostRenderEffect(()=>invokeVNodeHook(Vl,bt,ht),I)}(w.shapeFlag&256||bt&&isAsyncWrapper(bt.vnode)&&bt.vnode.shapeFlag&256)&&T.a&&queuePostRenderEffect(T.a,I),T.isMounted=!0,w=b=N=null}},Yl=T.effect=new ReactiveEffect(f,()=>queueJob(Wl),T.scope),Wl=T.update=()=>Yl.run();Wl.id=T.uid,toggleRecurse(T,!0),Wl()},Zt=(T,w,b)=>{w.component=T;const N=T.vnode.props;T.vnode=w,T.next=null,updateProps(T,w.props,N,b),updateSlots(T,w.children,b),pauseTracking(),flushPreFlushCbs(),resetTracking()},lt=(T,w,b,N,I,C,K,f,Yl=!1)=>{const Wl=T&&T.children,Vl=T?T.shapeFlag:0,Tl=w.children,{patchFlag:$l,shapeFlag:tt}=w;if($l>0){if($l&128){Wt(Wl,Tl,b,N,I,C,K,f,Yl);return}else if($l&256){at(Wl,Tl,b,N,I,C,K,f,Yl);return}}tt&8?(Vl&16&&g(Wl,I,C),Tl!==Wl&&u(b,Tl)):Vl&16?tt&16?Wt(Wl,Tl,b,N,I,C,K,f,Yl):g(Wl,I,C,!0):(Vl&8&&u(b,""),tt&16&&m(Tl,b,N,I,C,K,f,Yl))},at=(T,w,b,N,I,C,K,f,Yl)=>{T=T||EMPTY_ARR,w=w||EMPTY_ARR;const Wl=T.length,Vl=w.length,Tl=Math.min(Wl,Vl);let $l;for($l=0;$lVl?g(T,I,C,!0,!1,Tl):m(w,b,N,I,C,K,f,Yl,Tl)},Wt=(T,w,b,N,I,C,K,f,Yl)=>{let Wl=0;const Vl=w.length;let Tl=T.length-1,$l=Vl-1;for(;Wl<=Tl&&Wl<=$l;){const tt=T[Wl],dt=w[Wl]=Yl?cloneIfMounted(w[Wl]):normalizeVNode(w[Wl]);if(isSameVNodeType(tt,dt))k(tt,dt,b,null,I,C,K,f,Yl);else break;Wl++}for(;Wl<=Tl&&Wl<=$l;){const tt=T[Tl],dt=w[$l]=Yl?cloneIfMounted(w[$l]):normalizeVNode(w[$l]);if(isSameVNodeType(tt,dt))k(tt,dt,b,null,I,C,K,f,Yl);else break;Tl--,$l--}if(Wl>Tl){if(Wl<=$l){const tt=$l+1,dt=tt$l)for(;Wl<=Tl;)Nt(T[Wl],I,C,!0),Wl++;else{const tt=Wl,dt=Wl,bt=new Map;for(Wl=dt;Wl<=$l;Wl++){const et=w[Wl]=Yl?cloneIfMounted(w[Wl]):normalizeVNode(w[Wl]);et.key!=null&&bt.set(et.key,Wl)}let ut,ht=0;const yt=$l-dt+1;let Ll=!1,Gt=0;const Lt=new Array(yt);for(Wl=0;Wl=yt){Nt(et,I,C,!0);continue}let rl;if(et.key!=null)rl=bt.get(et.key);else for(ut=dt;ut<=$l;ut++)if(Lt[ut-dt]===0&&isSameVNodeType(et,w[ut])){rl=ut;break}rl===void 0?Nt(et,I,C,!0):(Lt[rl-dt]=Wl+1,rl>=Gt?Gt=rl:Ll=!0,k(et,w[rl],b,null,I,C,K,f,Yl),ht++)}const It=Ll?getSequence(Lt):EMPTY_ARR;for(ut=It.length-1,Wl=yt-1;Wl>=0;Wl--){const et=dt+Wl,rl=w[et],_l=et+1{const{el:C,type:K,transition:f,children:Yl,shapeFlag:Wl}=T;if(Wl&6){Mt(T.component.subTree,w,b,N);return}if(Wl&128){T.suspense.move(w,b,N);return}if(Wl&64){K.move(T,w,b,P);return}if(K===Fragment){s(C,w,b);for(let Tl=0;Tlf.enter(C),I);else{const{leave:Tl,delayLeave:$l,afterLeave:tt}=f,dt=()=>s(C,w,b),bt=()=>{Tl(C,()=>{dt(),tt&&tt()})};$l?$l(C,dt,bt):bt()}else s(C,w,b)},Nt=(T,w,b,N=!1,I=!1)=>{const{type:C,props:K,ref:f,children:Yl,dynamicChildren:Wl,shapeFlag:Vl,patchFlag:Tl,dirs:$l}=T;if(f!=null&&setRef(f,null,b,T,!0),Vl&256){w.ctx.deactivate(T);return}const tt=Vl&1&&$l,dt=!isAsyncWrapper(T);let bt;if(dt&&(bt=K&&K.onVnodeBeforeUnmount)&&invokeVNodeHook(bt,w,T),Vl&6)U(T.component,b,N);else{if(Vl&128){T.suspense.unmount(b,N);return}tt&&invokeDirectiveHook(T,null,w,"beforeUnmount"),Vl&64?T.type.remove(T,w,b,I,P,N):Wl&&(C!==Fragment||Tl>0&&Tl&64)?g(Wl,w,b,!1,!0):(C===Fragment&&Tl&384||!I&&Vl&16)&&g(Yl,w,b),N&&Vt(T)}(dt&&(bt=K&&K.onVnodeUnmounted)||tt)&&queuePostRenderEffect(()=>{bt&&invokeVNodeHook(bt,w,T),tt&&invokeDirectiveHook(T,null,w,"unmounted")},b)},Vt=T=>{const{type:w,el:b,anchor:N,transition:I}=T;if(w===Fragment){Ml(b,N);return}if(w===Static){J(T);return}const C=()=>{d(b),I&&!I.persisted&&I.afterLeave&&I.afterLeave()};if(T.shapeFlag&1&&I&&!I.persisted){const{leave:K,delayLeave:f}=I,Yl=()=>K(b,C);f?f(T.el,C,Yl):Yl()}else C()},Ml=(T,w)=>{let b;for(;T!==w;)b=z(T),d(T),T=b;d(w)},U=(T,w,b)=>{const{bum:N,scope:I,update:C,subTree:K,um:f}=T;N&&invokeArrayFns(N),I.stop(),C&&(C.active=!1,Nt(K,T,w,b)),f&&queuePostRenderEffect(f,w),queuePostRenderEffect(()=>{T.isUnmounted=!0},w),w&&w.pendingBranch&&!w.isUnmounted&&T.asyncDep&&!T.asyncResolved&&T.suspenseId===w.pendingId&&(w.deps--,w.deps===0&&w.resolve())},g=(T,w,b,N=!1,I=!1,C=0)=>{for(let K=C;KT.shapeFlag&6?O(T.component.subTree):T.shapeFlag&128?T.suspense.next():z(T.anchor||T.el),B=(T,w,b)=>{T==null?w._vnode&&Nt(w._vnode,null,null,!0):k(w._vnode||null,T,w,null,null,null,b),flushPreFlushCbs(),flushPostFlushCbs(),w._vnode=T},P={p:k,um:Nt,m:Mt,r:Vt,mt:Nl,mc:m,pc:lt,pbc:H,n:O,o:l};let Zl,cl;return t&&([Zl,cl]=t(P)),{render:B,hydrate:Zl,createApp:createAppAPI(B,Zl)}}function toggleRecurse({effect:l,update:t},c){l.allowRecurse=t.allowRecurse=c}function traverseStaticChildren(l,t,c=!1){const s=l.children,d=t.children;if(isArray$1(s)&&isArray$1(d))for(let Z=0;Z>1,l[c[o]]0&&(t[s]=c[Z-1]),c[Z]=s)}}for(Z=c.length,i=c[Z-1];Z-- >0;)c[Z]=i,i=t[i];return c}const isTeleport=l=>l.__isTeleport,Fragment=Symbol.for("v-fgt"),Text=Symbol.for("v-txt"),Comment=Symbol.for("v-cmt"),Static=Symbol.for("v-stc"),blockStack=[];let currentBlock=null;function openBlock(l=!1){blockStack.push(currentBlock=l?null:[])}function closeBlock(){blockStack.pop(),currentBlock=blockStack[blockStack.length-1]||null}let isBlockTreeEnabled=1;function setBlockTracking(l){isBlockTreeEnabled+=l}function setupBlock(l){return l.dynamicChildren=isBlockTreeEnabled>0?currentBlock||EMPTY_ARR:null,closeBlock(),isBlockTreeEnabled>0&¤tBlock&¤tBlock.push(l),l}function createElementBlock(l,t,c,s,d,Z){return setupBlock(createBaseVNode(l,t,c,s,d,Z,!0))}function createBlock(l,t,c,s,d){return setupBlock(createVNode(l,t,c,s,d,!0))}function isVNode(l){return l?l.__v_isVNode===!0:!1}function isSameVNodeType(l,t){return l.type===t.type&&l.key===t.key}const InternalObjectKey="__vInternal",normalizeKey=({key:l})=>l??null,normalizeRef=({ref:l,ref_key:t,ref_for:c})=>(typeof l=="number"&&(l=""+l),l!=null?isString(l)||isRef(l)||isFunction(l)?{i:currentRenderingInstance,r:l,k:t,f:!!c}:l:null);function createBaseVNode(l,t=null,c=null,s=0,d=null,Z=l===Fragment?0:1,i=!1,o=!1){const W={__v_isVNode:!0,__v_skip:!0,type:l,props:t,key:t&&normalizeKey(t),ref:t&&normalizeRef(t),scopeId:currentScopeId,slotScopeIds:null,children:c,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:Z,patchFlag:s,dynamicProps:d,dynamicChildren:null,appContext:null,ctx:currentRenderingInstance};return o?(normalizeChildren(W,c),Z&128&&l.normalize(W)):c&&(W.shapeFlag|=isString(c)?8:16),isBlockTreeEnabled>0&&!i&¤tBlock&&(W.patchFlag>0||Z&6)&&W.patchFlag!==32&¤tBlock.push(W),W}const createVNode=_createVNode;function _createVNode(l,t=null,c=null,s=0,d=null,Z=!1){if((!l||l===NULL_DYNAMIC_COMPONENT)&&(l=Comment),isVNode(l)){const o=cloneVNode(l,t,!0);return c&&normalizeChildren(o,c),isBlockTreeEnabled>0&&!Z&¤tBlock&&(o.shapeFlag&6?currentBlock[currentBlock.indexOf(l)]=o:currentBlock.push(o)),o.patchFlag|=-2,o}if(isClassComponent(l)&&(l=l.__vccOpts),t){t=guardReactiveProps(t);let{class:o,style:W}=t;o&&!isString(o)&&(t.class=normalizeClass(o)),isObject(W)&&(isProxy(W)&&!isArray$1(W)&&(W=extend({},W)),t.style=normalizeStyle(W))}const i=isString(l)?1:isSuspense(l)?128:isTeleport(l)?64:isObject(l)?4:isFunction(l)?2:0;return createBaseVNode(l,t,c,s,d,i,Z,!0)}function guardReactiveProps(l){return l?isProxy(l)||InternalObjectKey in l?extend({},l):l:null}function cloneVNode(l,t,c=!1){const{props:s,ref:d,patchFlag:Z,children:i}=l,o=t?mergeProps(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:l.type,props:o,key:o&&normalizeKey(o),ref:t&&t.ref?c&&d?isArray$1(d)?d.concat(normalizeRef(t)):[d,normalizeRef(t)]:normalizeRef(t):d,scopeId:l.scopeId,slotScopeIds:l.slotScopeIds,children:i,target:l.target,targetAnchor:l.targetAnchor,staticCount:l.staticCount,shapeFlag:l.shapeFlag,patchFlag:t&&l.type!==Fragment?Z===-1?16:Z|16:Z,dynamicProps:l.dynamicProps,dynamicChildren:l.dynamicChildren,appContext:l.appContext,dirs:l.dirs,transition:l.transition,component:l.component,suspense:l.suspense,ssContent:l.ssContent&&cloneVNode(l.ssContent),ssFallback:l.ssFallback&&cloneVNode(l.ssFallback),el:l.el,anchor:l.anchor,ctx:l.ctx,ce:l.ce}}function createTextVNode(l=" ",t=0){return createVNode(Text,null,l,t)}function createStaticVNode(l,t){const c=createVNode(Static,null,l);return c.staticCount=t,c}function createCommentVNode(l="",t=!1){return t?(openBlock(),createBlock(Comment,null,l)):createVNode(Comment,null,l)}function normalizeVNode(l){return l==null||typeof l=="boolean"?createVNode(Comment):isArray$1(l)?createVNode(Fragment,null,l.slice()):typeof l=="object"?cloneIfMounted(l):createVNode(Text,null,String(l))}function cloneIfMounted(l){return l.el===null&&l.patchFlag!==-1||l.memo?l:cloneVNode(l)}function normalizeChildren(l,t){let c=0;const{shapeFlag:s}=l;if(t==null)t=null;else if(isArray$1(t))c=16;else if(typeof t=="object")if(s&65){const d=t.default;d&&(d._c&&(d._d=!1),normalizeChildren(l,d()),d._c&&(d._d=!0));return}else{c=32;const d=t._;!d&&!(InternalObjectKey in t)?t._ctx=currentRenderingInstance:d===3&¤tRenderingInstance&&(currentRenderingInstance.slots._===1?t._=1:(t._=2,l.patchFlag|=1024))}else isFunction(t)?(t={default:t,_ctx:currentRenderingInstance},c=32):(t=String(t),s&64?(c=16,t=[createTextVNode(t)]):c=8);l.children=t,l.shapeFlag|=c}function mergeProps(...l){const t={};for(let c=0;ccurrentInstance||currentRenderingInstance;let internalSetCurrentInstance,globalCurrentInstanceSetters,settersKey="__VUE_INSTANCE_SETTERS__";(globalCurrentInstanceSetters=getGlobalThis()[settersKey])||(globalCurrentInstanceSetters=getGlobalThis()[settersKey]=[]),globalCurrentInstanceSetters.push(l=>currentInstance=l),internalSetCurrentInstance=l=>{globalCurrentInstanceSetters.length>1?globalCurrentInstanceSetters.forEach(t=>t(l)):globalCurrentInstanceSetters[0](l)};const setCurrentInstance=l=>{internalSetCurrentInstance(l),l.scope.on()},unsetCurrentInstance=()=>{currentInstance&¤tInstance.scope.off(),internalSetCurrentInstance(null)};function isStatefulComponent(l){return l.vnode.shapeFlag&4}let isInSSRComponentSetup=!1;function setupComponent(l,t=!1){isInSSRComponentSetup=t;const{props:c,children:s}=l.vnode,d=isStatefulComponent(l);initProps(l,c,d,t),initSlots(l,s);const Z=d?setupStatefulComponent(l,t):void 0;return isInSSRComponentSetup=!1,Z}function setupStatefulComponent(l,t){const c=l.type;l.accessCache=Object.create(null),l.proxy=markRaw(new Proxy(l.ctx,PublicInstanceProxyHandlers));const{setup:s}=c;if(s){const d=l.setupContext=s.length>1?createSetupContext(l):null;setCurrentInstance(l),pauseTracking();const Z=callWithErrorHandling(s,l,0,[l.props,d]);if(resetTracking(),unsetCurrentInstance(),isPromise(Z)){if(Z.then(unsetCurrentInstance,unsetCurrentInstance),t)return Z.then(i=>{handleSetupResult(l,i,t)}).catch(i=>{handleError(i,l,0)});l.asyncDep=Z}else handleSetupResult(l,Z,t)}else finishComponentSetup(l,t)}function handleSetupResult(l,t,c){isFunction(t)?l.type.__ssrInlineRender?l.ssrRender=t:l.render=t:isObject(t)&&(l.setupState=proxyRefs(t)),finishComponentSetup(l,c)}let compile;function finishComponentSetup(l,t,c){const s=l.type;if(!l.render){if(!t&&compile&&!s.render){const d=s.template||resolveMergedOptions(l).template;if(d){const{isCustomElement:Z,compilerOptions:i}=l.appContext.config,{delimiters:o,compilerOptions:W}=s,G=extend(extend({isCustomElement:Z,delimiters:o},i),W);s.render=compile(d,G)}}l.render=s.render||NOOP}setCurrentInstance(l),pauseTracking(),applyOptions(l),resetTracking(),unsetCurrentInstance()}function getAttrsProxy(l){return l.attrsProxy||(l.attrsProxy=new Proxy(l.attrs,{get(t,c){return track(l,"get","$attrs"),t[c]}}))}function createSetupContext(l){const t=c=>{l.exposed=c||{}};return{get attrs(){return getAttrsProxy(l)},slots:l.slots,emit:l.emit,expose:t}}function getExposeProxy(l){if(l.exposed)return l.exposeProxy||(l.exposeProxy=new Proxy(proxyRefs(markRaw(l.exposed)),{get(t,c){if(c in t)return t[c];if(c in publicPropertiesMap)return publicPropertiesMap[c](l)},has(t,c){return c in t||c in publicPropertiesMap}}))}function getComponentName(l,t=!0){return isFunction(l)?l.displayName||l.name:l.name||t&&l.__name}function isClassComponent(l){return isFunction(l)&&"__vccOpts"in l}const computed=(l,t)=>computed$1(l,t,isInSSRComponentSetup);function h(l,t,c){const s=arguments.length;return s===2?isObject(t)&&!isArray$1(t)?isVNode(t)?createVNode(l,null,[t]):createVNode(l,t):createVNode(l,null,t):(s>3?c=Array.prototype.slice.call(arguments,2):s===3&&isVNode(c)&&(c=[c]),createVNode(l,t,c))}const ssrContextKey=Symbol.for("v-scx"),useSSRContext=()=>inject(ssrContextKey),version="3.3.4",svgNS="http://www.w3.org/2000/svg",doc=typeof document<"u"?document:null,templateContainer=doc&&doc.createElement("template"),nodeOps={insert:(l,t,c)=>{t.insertBefore(l,c||null)},remove:l=>{const t=l.parentNode;t&&t.removeChild(l)},createElement:(l,t,c,s)=>{const d=t?doc.createElementNS(svgNS,l):doc.createElement(l,c?{is:c}:void 0);return l==="select"&&s&&s.multiple!=null&&d.setAttribute("multiple",s.multiple),d},createText:l=>doc.createTextNode(l),createComment:l=>doc.createComment(l),setText:(l,t)=>{l.nodeValue=t},setElementText:(l,t)=>{l.textContent=t},parentNode:l=>l.parentNode,nextSibling:l=>l.nextSibling,querySelector:l=>doc.querySelector(l),setScopeId(l,t){l.setAttribute(t,"")},insertStaticContent(l,t,c,s,d,Z){const i=c?c.previousSibling:t.lastChild;if(d&&(d===Z||d.nextSibling))for(;t.insertBefore(d.cloneNode(!0),c),!(d===Z||!(d=d.nextSibling)););else{templateContainer.innerHTML=s?`${l}`:l;const o=templateContainer.content;if(s){const W=o.firstChild;for(;W.firstChild;)o.appendChild(W.firstChild);o.removeChild(W)}t.insertBefore(o,c)}return[i?i.nextSibling:t.firstChild,c?c.previousSibling:t.lastChild]}};function patchClass(l,t,c){const s=l._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?l.removeAttribute("class"):c?l.setAttribute("class",t):l.className=t}function patchStyle(l,t,c){const s=l.style,d=isString(c);if(c&&!d){if(t&&!isString(t))for(const Z in t)c[Z]==null&&setStyle(s,Z,"");for(const Z in c)setStyle(s,Z,c[Z])}else{const Z=s.display;d?t!==c&&(s.cssText=c):t&&l.removeAttribute("style"),"_vod"in l&&(s.display=Z)}}const importantRE=/\s*!important$/;function setStyle(l,t,c){if(isArray$1(c))c.forEach(s=>setStyle(l,t,s));else if(c==null&&(c=""),t.startsWith("--"))l.setProperty(t,c);else{const s=autoPrefix(l,t);importantRE.test(c)?l.setProperty(hyphenate(s),c.replace(importantRE,""),"important"):l[s]=c}}const prefixes=["Webkit","Moz","ms"],prefixCache={};function autoPrefix(l,t){const c=prefixCache[t];if(c)return c;let s=camelize(t);if(s!=="filter"&&s in l)return prefixCache[t]=s;s=capitalize(s);for(let d=0;dcachedNow||(p.then(()=>cachedNow=0),cachedNow=Date.now());function createInvoker(l,t){const c=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=c.attached)return;callWithAsyncErrorHandling(patchStopImmediatePropagation(s,c.value),t,5,[s])};return c.value=l,c.attached=getNow(),c}function patchStopImmediatePropagation(l,t){if(isArray$1(t)){const c=l.stopImmediatePropagation;return l.stopImmediatePropagation=()=>{c.call(l),l._stopped=!0},t.map(s=>d=>!d._stopped&&s&&s(d))}else return t}const nativeOnRE=/^on[a-z]/,patchProp=(l,t,c,s,d=!1,Z,i,o,W)=>{t==="class"?patchClass(l,s,d):t==="style"?patchStyle(l,c,s):isOn(t)?isModelListener(t)||patchEvent(l,t,c,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):shouldSetAsProp(l,t,s,d))?patchDOMProp(l,t,s,Z,i,o,W):(t==="true-value"?l._trueValue=s:t==="false-value"&&(l._falseValue=s),patchAttr(l,t,s,d))};function shouldSetAsProp(l,t,c,s){return s?!!(t==="innerHTML"||t==="textContent"||t in l&&nativeOnRE.test(t)&&isFunction(c)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&l.tagName==="INPUT"||t==="type"&&l.tagName==="TEXTAREA"||nativeOnRE.test(t)&&isString(c)?!1:t in l}const TRANSITION="transition",ANIMATION="animation",Transition=(l,{slots:t})=>h(BaseTransition,resolveTransitionProps(l),t);Transition.displayName="Transition";const DOMTransitionPropsValidators={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};Transition.props=extend({},BaseTransitionPropsValidators,DOMTransitionPropsValidators);const callHook=(l,t=[])=>{isArray$1(l)?l.forEach(c=>c(...t)):l&&l(...t)},hasExplicitCallback=l=>l?isArray$1(l)?l.some(t=>t.length>1):l.length>1:!1;function resolveTransitionProps(l){const t={};for(const v in l)v in DOMTransitionPropsValidators||(t[v]=l[v]);if(l.css===!1)return t;const{name:c="v",type:s,duration:d,enterFromClass:Z=`${c}-enter-from`,enterActiveClass:i=`${c}-enter-active`,enterToClass:o=`${c}-enter-to`,appearFromClass:W=Z,appearActiveClass:G=i,appearToClass:u=o,leaveFromClass:X=`${c}-leave-from`,leaveActiveClass:z=`${c}-leave-active`,leaveToClass:R=`${c}-leave-to`}=l,S=normalizeDuration(d),k=S&&S[0],L=S&&S[1],{onBeforeEnter:x,onEnter:j,onEnterCancelled:Q,onLeave:J,onLeaveCancelled:M,onBeforeAppear:y=x,onAppear:Y=j,onAppearCancelled:m=Q}=t,D=(v,A,Nl)=>{removeTransitionClass(v,A?u:o),removeTransitionClass(v,A?G:i),Nl&&Nl()},H=(v,A)=>{v._isLeaving=!1,removeTransitionClass(v,X),removeTransitionClass(v,R),removeTransitionClass(v,z),A&&A()},V=v=>(A,Nl)=>{const fl=v?Y:j,Xl=()=>D(A,v,Nl);callHook(fl,[A,Xl]),nextFrame(()=>{removeTransitionClass(A,v?W:Z),addTransitionClass(A,v?u:o),hasExplicitCallback(fl)||whenTransitionEnds(A,s,k,Xl)})};return extend(t,{onBeforeEnter(v){callHook(x,[v]),addTransitionClass(v,Z),addTransitionClass(v,i)},onBeforeAppear(v){callHook(y,[v]),addTransitionClass(v,W),addTransitionClass(v,G)},onEnter:V(!1),onAppear:V(!0),onLeave(v,A){v._isLeaving=!0;const Nl=()=>H(v,A);addTransitionClass(v,X),forceReflow(),addTransitionClass(v,z),nextFrame(()=>{v._isLeaving&&(removeTransitionClass(v,X),addTransitionClass(v,R),hasExplicitCallback(J)||whenTransitionEnds(v,s,L,Nl))}),callHook(J,[v,Nl])},onEnterCancelled(v){D(v,!1),callHook(Q,[v])},onAppearCancelled(v){D(v,!0),callHook(m,[v])},onLeaveCancelled(v){H(v),callHook(M,[v])}})}function normalizeDuration(l){if(l==null)return null;if(isObject(l))return[NumberOf(l.enter),NumberOf(l.leave)];{const t=NumberOf(l);return[t,t]}}function NumberOf(l){return toNumber(l)}function addTransitionClass(l,t){t.split(/\s+/).forEach(c=>c&&l.classList.add(c)),(l._vtc||(l._vtc=new Set)).add(t)}function removeTransitionClass(l,t){t.split(/\s+/).forEach(s=>s&&l.classList.remove(s));const{_vtc:c}=l;c&&(c.delete(t),c.size||(l._vtc=void 0))}function nextFrame(l){requestAnimationFrame(()=>{requestAnimationFrame(l)})}let endId=0;function whenTransitionEnds(l,t,c,s){const d=l._endId=++endId,Z=()=>{d===l._endId&&s()};if(c)return setTimeout(Z,c);const{type:i,timeout:o,propCount:W}=getTransitionInfo(l,t);if(!i)return s();const G=i+"end";let u=0;const X=()=>{l.removeEventListener(G,z),Z()},z=R=>{R.target===l&&++u>=W&&X()};setTimeout(()=>{u(c[S]||"").split(", "),d=s(`${TRANSITION}Delay`),Z=s(`${TRANSITION}Duration`),i=getTimeout(d,Z),o=s(`${ANIMATION}Delay`),W=s(`${ANIMATION}Duration`),G=getTimeout(o,W);let u=null,X=0,z=0;t===TRANSITION?i>0&&(u=TRANSITION,X=i,z=Z.length):t===ANIMATION?G>0&&(u=ANIMATION,X=G,z=W.length):(X=Math.max(i,G),u=X>0?i>G?TRANSITION:ANIMATION:null,z=u?u===TRANSITION?Z.length:W.length:0);const R=u===TRANSITION&&/\b(transform|all)(,|$)/.test(s(`${TRANSITION}Property`).toString());return{type:u,timeout:X,propCount:z,hasTransform:R}}function getTimeout(l,t){for(;l.lengthtoMs(c)+toMs(l[s])))}function toMs(l){return Number(l.slice(0,-1).replace(",","."))*1e3}function forceReflow(){return document.body.offsetHeight}const getModelAssigner=l=>{const t=l.props["onUpdate:modelValue"]||!1;return isArray$1(t)?c=>invokeArrayFns(t,c):t};function onCompositionStart(l){l.target.composing=!0}function onCompositionEnd(l){const t=l.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vModelText={created(l,{modifiers:{lazy:t,trim:c,number:s}},d){l._assign=getModelAssigner(d);const Z=s||d.props&&d.props.type==="number";addEventListener(l,t?"change":"input",i=>{if(i.target.composing)return;let o=l.value;c&&(o=o.trim()),Z&&(o=looseToNumber(o)),l._assign(o)}),c&&addEventListener(l,"change",()=>{l.value=l.value.trim()}),t||(addEventListener(l,"compositionstart",onCompositionStart),addEventListener(l,"compositionend",onCompositionEnd),addEventListener(l,"change",onCompositionEnd))},mounted(l,{value:t}){l.value=t??""},beforeUpdate(l,{value:t,modifiers:{lazy:c,trim:s,number:d}},Z){if(l._assign=getModelAssigner(Z),l.composing||document.activeElement===l&&l.type!=="range"&&(c||s&&l.value.trim()===t||(d||l.type==="number")&&looseToNumber(l.value)===t))return;const i=t??"";l.value!==i&&(l.value=i)}},vModelCheckbox={deep:!0,created(l,t,c){l._assign=getModelAssigner(c),addEventListener(l,"change",()=>{const s=l._modelValue,d=getValue(l),Z=l.checked,i=l._assign;if(isArray$1(s)){const o=looseIndexOf(s,d),W=o!==-1;if(Z&&!W)i(s.concat(d));else if(!Z&&W){const G=[...s];G.splice(o,1),i(G)}}else if(isSet(s)){const o=new Set(s);Z?o.add(d):o.delete(d),i(o)}else i(getCheckboxValue(l,Z))})},mounted:setChecked,beforeUpdate(l,t,c){l._assign=getModelAssigner(c),setChecked(l,t,c)}};function setChecked(l,{value:t,oldValue:c},s){l._modelValue=t,isArray$1(t)?l.checked=looseIndexOf(t,s.props.value)>-1:isSet(t)?l.checked=t.has(s.props.value):t!==c&&(l.checked=looseEqual(t,getCheckboxValue(l,!0)))}const vModelSelect={deep:!0,created(l,{value:t,modifiers:{number:c}},s){const d=isSet(t);addEventListener(l,"change",()=>{const Z=Array.prototype.filter.call(l.options,i=>i.selected).map(i=>c?looseToNumber(getValue(i)):getValue(i));l._assign(l.multiple?d?new Set(Z):Z:Z[0])}),l._assign=getModelAssigner(s)},mounted(l,{value:t}){setSelected(l,t)},beforeUpdate(l,t,c){l._assign=getModelAssigner(c)},updated(l,{value:t}){setSelected(l,t)}};function setSelected(l,t){const c=l.multiple;if(!(c&&!isArray$1(t)&&!isSet(t))){for(let s=0,d=l.options.length;s-1:Z.selected=t.has(i);else if(looseEqual(getValue(Z),t)){l.selectedIndex!==s&&(l.selectedIndex=s);return}}!c&&l.selectedIndex!==-1&&(l.selectedIndex=-1)}}function getValue(l){return"_value"in l?l._value:l.value}function getCheckboxValue(l,t){const c=t?"_trueValue":"_falseValue";return c in l?l[c]:t}const systemModifiers=["ctrl","shift","alt","meta"],modifierGuards={stop:l=>l.stopPropagation(),prevent:l=>l.preventDefault(),self:l=>l.target!==l.currentTarget,ctrl:l=>!l.ctrlKey,shift:l=>!l.shiftKey,alt:l=>!l.altKey,meta:l=>!l.metaKey,left:l=>"button"in l&&l.button!==0,middle:l=>"button"in l&&l.button!==1,right:l=>"button"in l&&l.button!==2,exact:(l,t)=>systemModifiers.some(c=>l[`${c}Key`]&&!t.includes(c))},withModifiers=(l,t)=>(c,...s)=>{for(let d=0;dc=>{if(!("key"in c))return;const s=hyphenate(c.key);if(t.some(d=>d===s||keyNames[d]===s))return l(c)},vShow={beforeMount(l,{value:t},{transition:c}){l._vod=l.style.display==="none"?"":l.style.display,c&&t?c.beforeEnter(l):setDisplay(l,t)},mounted(l,{value:t},{transition:c}){c&&t&&c.enter(l)},updated(l,{value:t,oldValue:c},{transition:s}){!t!=!c&&(s?t?(s.beforeEnter(l),setDisplay(l,!0),s.enter(l)):s.leave(l,()=>{setDisplay(l,!1)}):setDisplay(l,t))},beforeUnmount(l,{value:t}){setDisplay(l,t)}};function setDisplay(l,t){l.style.display=t?l._vod:"none"}const rendererOptions=extend({patchProp},nodeOps);let renderer,enabledHydration=!1;function ensureHydrationRenderer(){return renderer=enabledHydration?renderer:createHydrationRenderer(rendererOptions),enabledHydration=!0,renderer}const createSSRApp=(...l)=>{const t=ensureHydrationRenderer().createApp(...l),{mount:c}=t;return t.mount=s=>{const d=normalizeContainer(s);if(d)return c(d,!0,d instanceof SVGElement)},t};function normalizeContainer(l){return isString(l)?document.querySelector(l):l}const pagesData$1={"v-8daa1a0e":()=>__vitePreload(()=>import("./index.html-0c2743d0.js"),[]).then(({data:l})=>l),"v-0aca7ba6":()=>__vitePreload(()=>import("./index.html-2c73552f.js"),[]).then(({data:l})=>l),"v-7b0cac7f":()=>__vitePreload(()=>import("./composables.html-1fd84b0e.js"),[]).then(({data:l})=>l),"v-10633a18":()=>__vitePreload(()=>import("./events.html-231531a4.js"),[]).then(({data:l})=>l),"v-1c7b2593":()=>__vitePreload(()=>import("./introduction.html-d6c843db.js"),[]).then(({data:l})=>l),"v-f69aa95a":()=>__vitePreload(()=>import("./methods.html-94a5839d.js"),[]).then(({data:l})=>l),"v-0c5edf55":()=>__vitePreload(()=>import("./props.html-65d0d4f8.js"),[]).then(({data:l})=>l),"v-433985b0":()=>__vitePreload(()=>import("./slots.html-e560ff3a.js"),[]).then(({data:l})=>l),"v-65618cd9":()=>__vitePreload(()=>import("./annotation_attachment.html-a14720fd.js"),[]).then(({data:l})=>l),"v-7393d4e7":()=>__vitePreload(()=>import("./annotation_forms.html-4adb72d6.js"),[]).then(({data:l})=>l),"v-ab3e90c6":()=>__vitePreload(()=>import("./annotation_links.html-1bf3b272.js"),[]).then(({data:l})=>l),"v-d74a6fde":()=>__vitePreload(()=>import("./annotation_filter.html-1a5820fa.js"),[]).then(({data:l})=>l),"v-f2c952fe":()=>__vitePreload(()=>import("./fit_parent.html-ad35947f.js"),[]).then(({data:l})=>l),"v-169eb141":()=>__vitePreload(()=>import("./highlight_text.html-0778f069.js"),[]).then(({data:l})=>l),"v-0f2bcfb6":()=>__vitePreload(()=>import("./multiple_pdf.html-59f29d33.js"),[]).then(({data:l})=>l),"v-c7ab6d5e":()=>__vitePreload(()=>import("./toc.html-7317742a.js"),[]).then(({data:l})=>l),"v-67ec23b5":()=>__vitePreload(()=>import("./watermark.html-1285d86c.js"),[]).then(({data:l})=>l),"v-94f282be":()=>__vitePreload(()=>import("./all_pages.html-944f5fea.js"),[]).then(({data:l})=>l),"v-1612306c":()=>__vitePreload(()=>import("./annotation_layer.html-3cdccf08.js"),[]).then(({data:l})=>l),"v-d24dc4ba":()=>__vitePreload(()=>import("./one_page.html-e267caa7.js"),[]).then(({data:l})=>l),"v-52b5ccad":()=>__vitePreload(()=>import("./rotation.html-afa6471d.js"),[]).then(({data:l})=>l),"v-42931b06":()=>__vitePreload(()=>import("./scale.html-419397bc.js"),[]).then(({data:l})=>l),"v-1570d88c":()=>__vitePreload(()=>import("./text_layer.html-b996167f.js"),[]).then(({data:l})=>l),"v-e08bb73c":()=>__vitePreload(()=>import("./xfa_layer.html-fe618f0b.js"),[]).then(({data:l})=>l),"v-f45dcaf4":()=>__vitePreload(()=>import("./text_highlight.html-51fa3454.js"),[]).then(({data:l})=>l),"v-0ac90ceb":()=>__vitePreload(()=>import("./loaded.html-b9bf88fd.js"),[]).then(({data:l})=>l),"v-3706649a":()=>__vitePreload(()=>import("./404.html-60b35caa.js"),[]).then(({data:l})=>l)},siteData$1=JSON.parse('{"base":"/VuePDF/","lang":"en-US","title":"VuePDF","description":"PDF Viewer for Vue 3","head":[],"locales":{}}');var resolveHeadIdentifier=([l,t,c])=>l==="meta"&&t.name?`${l}.${t.name}`:["title","base"].includes(l)?l:l==="template"&&t.id?`${l}.${t.id}`:JSON.stringify([l,t,c]),dedupeHead=l=>{const t=new Set,c=[];return l.forEach(s=>{const d=resolveHeadIdentifier(s);t.has(d)||(t.add(d),c.push(s))}),c},isLinkHttp=l=>/^(https?:)?\/\//.test(l),isLinkMailto=l=>/^mailto:/.test(l),isLinkTel=l=>/^tel:/.test(l),isPlainObject=l=>Object.prototype.toString.call(l)==="[object Object]",removeEndingSlash=l=>l[l.length-1]==="/"?l.slice(0,-1):l,removeLeadingSlash=l=>l[0]==="/"?l.slice(1):l,resolveLocalePath=(l,t)=>{const c=Object.keys(l).sort((s,d)=>{const Z=d.split("/").length-s.split("/").length;return Z!==0?Z:d.length-s.length});for(const s of c)if(t.startsWith(s))return s;return"/"};const pagesComponents={"v-8daa1a0e":defineAsyncComponent(()=>__vitePreload(()=>import("./index.html-8aafe416.js"),[])),"v-0aca7ba6":defineAsyncComponent(()=>__vitePreload(()=>import("./index.html-68bc146c.js"),[])),"v-7b0cac7f":defineAsyncComponent(()=>__vitePreload(()=>import("./composables.html-c510aae4.js"),[])),"v-10633a18":defineAsyncComponent(()=>__vitePreload(()=>import("./events.html-89f93546.js"),[])),"v-1c7b2593":defineAsyncComponent(()=>__vitePreload(()=>import("./introduction.html-26ff885b.js"),[])),"v-f69aa95a":defineAsyncComponent(()=>__vitePreload(()=>import("./methods.html-29c635bd.js"),[])),"v-0c5edf55":defineAsyncComponent(()=>__vitePreload(()=>import("./props.html-ef6b26fc.js"),[])),"v-433985b0":defineAsyncComponent(()=>__vitePreload(()=>import("./slots.html-33cff15b.js"),[])),"v-65618cd9":defineAsyncComponent(()=>__vitePreload(()=>import("./annotation_attachment.html-71a50c04.js"),[])),"v-7393d4e7":defineAsyncComponent(()=>__vitePreload(()=>import("./annotation_forms.html-00dd803d.js"),[])),"v-ab3e90c6":defineAsyncComponent(()=>__vitePreload(()=>import("./annotation_links.html-5572ecf6.js"),[])),"v-d74a6fde":defineAsyncComponent(()=>__vitePreload(()=>import("./annotation_filter.html-8b55a0e5.js"),[])),"v-f2c952fe":defineAsyncComponent(()=>__vitePreload(()=>import("./fit_parent.html-8b8c8689.js"),[])),"v-169eb141":defineAsyncComponent(()=>__vitePreload(()=>import("./highlight_text.html-c49d46c1.js"),[])),"v-0f2bcfb6":defineAsyncComponent(()=>__vitePreload(()=>import("./multiple_pdf.html-7275aea6.js"),[])),"v-c7ab6d5e":defineAsyncComponent(()=>__vitePreload(()=>import("./toc.html-d62adc1c.js"),[])),"v-67ec23b5":defineAsyncComponent(()=>__vitePreload(()=>import("./watermark.html-aef68484.js"),[])),"v-94f282be":defineAsyncComponent(()=>__vitePreload(()=>import("./all_pages.html-7da2897e.js"),[])),"v-1612306c":defineAsyncComponent(()=>__vitePreload(()=>import("./annotation_layer.html-e575ea2d.js"),[])),"v-d24dc4ba":defineAsyncComponent(()=>__vitePreload(()=>import("./one_page.html-042a751a.js"),[])),"v-52b5ccad":defineAsyncComponent(()=>__vitePreload(()=>import("./rotation.html-362dea84.js"),[])),"v-42931b06":defineAsyncComponent(()=>__vitePreload(()=>import("./scale.html-84a9ac8a.js"),[])),"v-1570d88c":defineAsyncComponent(()=>__vitePreload(()=>import("./text_layer.html-b50a143a.js"),[])),"v-e08bb73c":defineAsyncComponent(()=>__vitePreload(()=>import("./xfa_layer.html-a367bc28.js"),[])),"v-f45dcaf4":defineAsyncComponent(()=>__vitePreload(()=>import("./text_highlight.html-d3b79b62.js"),[])),"v-0ac90ceb":defineAsyncComponent(()=>__vitePreload(()=>import("./loaded.html-8a1cb111.js"),[])),"v-3706649a":defineAsyncComponent(()=>__vitePreload(()=>import("./404.html-4ff4ca9a.js"),[]))};var layoutsSymbol=Symbol(""),pagesData=ref(pagesData$1),pageDataEmpty=readonly({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),pageData=ref(pageDataEmpty),usePageData=()=>pageData,pageFrontmatterSymbol=Symbol(""),usePageFrontmatter=()=>{const l=inject(pageFrontmatterSymbol);if(!l)throw new Error("usePageFrontmatter() is called without provider.");return l},pageHeadSymbol=Symbol(""),usePageHead=()=>{const l=inject(pageHeadSymbol);if(!l)throw new Error("usePageHead() is called without provider.");return l},pageHeadTitleSymbol=Symbol(""),pageLangSymbol=Symbol(""),usePageLang=()=>{const l=inject(pageLangSymbol);if(!l)throw new Error("usePageLang() is called without provider.");return l},pageLayoutSymbol=Symbol(""),usePageLayout=()=>{const l=inject(pageLayoutSymbol);if(!l)throw new Error("usePageLayout() is called without provider.");return l},routeLocaleSymbol=Symbol(""),useRouteLocale=()=>{const l=inject(routeLocaleSymbol);if(!l)throw new Error("useRouteLocale() is called without provider.");return l},siteData=ref(siteData$1),useSiteData=()=>siteData,siteLocaleDataSymbol=Symbol(""),useSiteLocaleData=()=>{const l=inject(siteLocaleDataSymbol);if(!l)throw new Error("useSiteLocaleData() is called without provider.");return l},updateHeadSymbol=Symbol(""),LAYOUT_NAME_DEFAULT="Layout",LAYOUT_NAME_NOT_FOUND="NotFound",resolvers=reactive({resolveLayouts:l=>l.reduce((t,c)=>({...t,...c.layouts}),{}),resolvePageData:async l=>{const t=pagesData.value[l];return await(t==null?void 0:t())??pageDataEmpty},resolvePageFrontmatter:l=>l.frontmatter,resolvePageHead:(l,t,c)=>{const s=isString(t.description)?t.description:c.description,d=[...isArray$1(t.head)?t.head:[],...c.head,["title",{},l],["meta",{name:"description",content:s}]];return dedupeHead(d)},resolvePageHeadTitle:(l,t)=>[l.title,t.title].filter(c=>!!c).join(" | "),resolvePageLang:l=>l.lang||"en",resolvePageLayout:(l,t)=>{let c;if(l.path){const s=l.frontmatter.layout;isString(s)?c=s:c=LAYOUT_NAME_DEFAULT}else c=LAYOUT_NAME_NOT_FOUND;return t[c]},resolveRouteLocale:(l,t)=>resolveLocalePath(l,t),resolveSiteLocaleData:(l,t)=>({...l,...l.locales[t]})}),ClientOnly=defineComponent({name:"ClientOnly",setup(l,t){const c=ref(!1);return onMounted(()=>{c.value=!0}),()=>{var s,d;return c.value?(d=(s=t.slots).default)==null?void 0:d.call(s):null}}}),Content=defineComponent({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(l){const t=usePageData(),c=computed(()=>pagesComponents[l.pageKey||t.value.key]);return()=>c.value?h(c.value):h("div","404 Not Found")}}),defineClientConfig=(l={})=>l,withBase=l=>isLinkHttp(l)?l:`/VuePDF/${removeLeadingSlash(l)}`;function r(l,t,c){var s,d,Z;t===void 0&&(t=50),c===void 0&&(c={});var i=(s=c.isImmediate)!=null&&s,o=(d=c.callback)!=null&&d,W=c.maxWait,G=Date.now(),u=[];function X(){if(W!==void 0){var R=Date.now()-G;if(R+t>=W)return W-R}return t}var z=function(){var R=[].slice.call(arguments),S=this;return new Promise(function(k,L){var x=i&&Z===void 0;if(Z!==void 0&&clearTimeout(Z),Z=setTimeout(function(){if(Z=void 0,G=Date.now(),!i){var Q=l.apply(S,R);o&&o(Q),u.forEach(function(J){return(0,J.resolve)(Q)}),u=[]}},X()),x){var j=l.apply(S,R);return o&&o(j),k(j)}u.push({resolve:k,reject:L})})};return z.cancel=function(R){Z!==void 0&&clearTimeout(Z),u.forEach(function(S){return(0,S.reject)(R)}),u=[]},z}/*! + * vue-router v4.2.1 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const isBrowser=typeof window<"u";function isESModule(l){return l.__esModule||l[Symbol.toStringTag]==="Module"}const assign=Object.assign;function applyToParams(l,t){const c={};for(const s in t){const d=t[s];c[s]=isArray(d)?d.map(l):l(d)}return c}const noop$1=()=>{},isArray=Array.isArray,TRAILING_SLASH_RE=/\/$/,removeTrailingSlash=l=>l.replace(TRAILING_SLASH_RE,"");function parseURL(l,t,c="/"){let s,d={},Z="",i="";const o=t.indexOf("#");let W=t.indexOf("?");return o=0&&(W=-1),W>-1&&(s=t.slice(0,W),Z=t.slice(W+1,o>-1?o:t.length),d=l(Z)),o>-1&&(s=s||t.slice(0,o),i=t.slice(o,t.length)),s=resolveRelativePath(s??t,c),{fullPath:s+(Z&&"?")+Z+i,path:s,query:d,hash:i}}function stringifyURL(l,t){const c=t.query?l(t.query):"";return t.path+(c&&"?")+c+(t.hash||"")}function stripBase(l,t){return!t||!l.toLowerCase().startsWith(t.toLowerCase())?l:l.slice(t.length)||"/"}function isSameRouteLocation(l,t,c){const s=t.matched.length-1,d=c.matched.length-1;return s>-1&&s===d&&isSameRouteRecord(t.matched[s],c.matched[d])&&isSameRouteLocationParams(t.params,c.params)&&l(t.query)===l(c.query)&&t.hash===c.hash}function isSameRouteRecord(l,t){return(l.aliasOf||l)===(t.aliasOf||t)}function isSameRouteLocationParams(l,t){if(Object.keys(l).length!==Object.keys(t).length)return!1;for(const c in l)if(!isSameRouteLocationParamsValue(l[c],t[c]))return!1;return!0}function isSameRouteLocationParamsValue(l,t){return isArray(l)?isEquivalentArray(l,t):isArray(t)?isEquivalentArray(t,l):l===t}function isEquivalentArray(l,t){return isArray(t)?l.length===t.length&&l.every((c,s)=>c===t[s]):l.length===1&&l[0]===t}function resolveRelativePath(l,t){if(l.startsWith("/"))return l;if(!l)return t;const c=t.split("/"),s=l.split("/"),d=s[s.length-1];(d===".."||d===".")&&s.push("");let Z=c.length-1,i,o;for(i=0;i1&&Z--;else break;return c.slice(0,Z).join("/")+"/"+s.slice(i-(i===s.length?1:0)).join("/")}var NavigationType;(function(l){l.pop="pop",l.push="push"})(NavigationType||(NavigationType={}));var NavigationDirection;(function(l){l.back="back",l.forward="forward",l.unknown=""})(NavigationDirection||(NavigationDirection={}));function normalizeBase(l){if(!l)if(isBrowser){const t=document.querySelector("base");l=t&&t.getAttribute("href")||"/",l=l.replace(/^\w+:\/\/[^\/]+/,"")}else l="/";return l[0]!=="/"&&l[0]!=="#"&&(l="/"+l),removeTrailingSlash(l)}const BEFORE_HASH_RE=/^[^#]+#/;function createHref(l,t){return l.replace(BEFORE_HASH_RE,"#")+t}function getElementPosition(l,t){const c=document.documentElement.getBoundingClientRect(),s=l.getBoundingClientRect();return{behavior:t.behavior,left:s.left-c.left-(t.left||0),top:s.top-c.top-(t.top||0)}}const computeScrollPosition=()=>({left:window.pageXOffset,top:window.pageYOffset});function scrollToPosition(l){let t;if("el"in l){const c=l.el,s=typeof c=="string"&&c.startsWith("#"),d=typeof c=="string"?s?document.getElementById(c.slice(1)):document.querySelector(c):c;if(!d)return;t=getElementPosition(d,l)}else t=l;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function getScrollKey(l,t){return(history.state?history.state.position-t:-1)+l}const scrollPositions=new Map;function saveScrollPosition(l,t){scrollPositions.set(l,t)}function getSavedScrollPosition(l){const t=scrollPositions.get(l);return scrollPositions.delete(l),t}let createBaseLocation=()=>location.protocol+"//"+location.host;function createCurrentLocation(l,t){const{pathname:c,search:s,hash:d}=t,Z=l.indexOf("#");if(Z>-1){let o=d.includes(l.slice(Z))?l.slice(Z).length:1,W=d.slice(o);return W[0]!=="/"&&(W="/"+W),stripBase(W,"")}return stripBase(c,l)+s+d}function useHistoryListeners(l,t,c,s){let d=[],Z=[],i=null;const o=({state:z})=>{const R=createCurrentLocation(l,location),S=c.value,k=t.value;let L=0;if(z){if(c.value=R,t.value=z,i&&i===S){i=null;return}L=k?z.position-k.position:0}else s(R);d.forEach(x=>{x(c.value,S,{delta:L,type:NavigationType.pop,direction:L?L>0?NavigationDirection.forward:NavigationDirection.back:NavigationDirection.unknown})})};function W(){i=c.value}function G(z){d.push(z);const R=()=>{const S=d.indexOf(z);S>-1&&d.splice(S,1)};return Z.push(R),R}function u(){const{history:z}=window;z.state&&z.replaceState(assign({},z.state,{scroll:computeScrollPosition()}),"")}function X(){for(const z of Z)z();Z=[],window.removeEventListener("popstate",o),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",o),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:W,listen:G,destroy:X}}function buildState(l,t,c,s=!1,d=!1){return{back:l,current:t,forward:c,replaced:s,position:window.history.length,scroll:d?computeScrollPosition():null}}function useHistoryStateNavigation(l){const{history:t,location:c}=window,s={value:createCurrentLocation(l,c)},d={value:t.state};d.value||Z(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function Z(W,G,u){const X=l.indexOf("#"),z=X>-1?(c.host&&document.querySelector("base")?l:l.slice(X))+W:createBaseLocation()+l+W;try{t[u?"replaceState":"pushState"](G,"",z),d.value=G}catch(R){console.error(R),c[u?"replace":"assign"](z)}}function i(W,G){const u=assign({},t.state,buildState(d.value.back,W,d.value.forward,!0),G,{position:d.value.position});Z(W,u,!0),s.value=W}function o(W,G){const u=assign({},d.value,t.state,{forward:W,scroll:computeScrollPosition()});Z(u.current,u,!0);const X=assign({},buildState(s.value,W,null),{position:u.position+1},G);Z(W,X,!1),s.value=W}return{location:s,state:d,push:o,replace:i}}function createWebHistory(l){l=normalizeBase(l);const t=useHistoryStateNavigation(l),c=useHistoryListeners(l,t.state,t.location,t.replace);function s(Z,i=!0){i||c.pauseListeners(),history.go(Z)}const d=assign({location:"",base:l,go:s,createHref:createHref.bind(null,l)},t,c);return Object.defineProperty(d,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(d,"state",{enumerable:!0,get:()=>t.state.value}),d}function isRouteLocation(l){return typeof l=="string"||l&&typeof l=="object"}function isRouteName(l){return typeof l=="string"||typeof l=="symbol"}const START_LOCATION_NORMALIZED={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},NavigationFailureSymbol=Symbol("");var NavigationFailureType;(function(l){l[l.aborted=4]="aborted",l[l.cancelled=8]="cancelled",l[l.duplicated=16]="duplicated"})(NavigationFailureType||(NavigationFailureType={}));function createRouterError(l,t){return assign(new Error,{type:l,[NavigationFailureSymbol]:!0},t)}function isNavigationFailure(l,t){return l instanceof Error&&NavigationFailureSymbol in l&&(t==null||!!(l.type&t))}const BASE_PARAM_PATTERN="[^/]+?",BASE_PATH_PARSER_OPTIONS={sensitive:!1,strict:!1,start:!0,end:!0},REGEX_CHARS_RE=/[.+*?^${}()[\]/\\]/g;function tokensToParser(l,t){const c=assign({},BASE_PATH_PARSER_OPTIONS,t),s=[];let d=c.start?"^":"";const Z=[];for(const G of l){const u=G.length?[]:[90];c.strict&&!G.length&&(d+="/");for(let X=0;Xt.length?t.length===1&&t[0]===40+40?1:-1:0}function comparePathParserScore(l,t){let c=0;const s=l.score,d=t.score;for(;c0&&t[t.length-1]<0}const ROOT_TOKEN={type:0,value:""},VALID_PARAM_RE=/[a-zA-Z0-9_]/;function tokenizePath(l){if(!l)return[[]];if(l==="/")return[[ROOT_TOKEN]];if(!l.startsWith("/"))throw new Error(`Invalid path "${l}"`);function t(R){throw new Error(`ERR (${c})/"${G}": ${R}`)}let c=0,s=c;const d=[];let Z;function i(){Z&&d.push(Z),Z=[]}let o=0,W,G="",u="";function X(){G&&(c===0?Z.push({type:0,value:G}):c===1||c===2||c===3?(Z.length>1&&(W==="*"||W==="+")&&t(`A repeatable param (${G}) must be alone in its segment. eg: '/:ids+.`),Z.push({type:1,value:G,regexp:u,repeatable:W==="*"||W==="+",optional:W==="*"||W==="?"})):t("Invalid state to consume buffer"),G="")}function z(){G+=W}for(;o{i(j)}:noop$1}function i(u){if(isRouteName(u)){const X=s.get(u);X&&(s.delete(u),c.splice(c.indexOf(X),1),X.children.forEach(i),X.alias.forEach(i))}else{const X=c.indexOf(u);X>-1&&(c.splice(X,1),u.record.name&&s.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function o(){return c}function W(u){let X=0;for(;X=0&&(u.record.path!==c[X].record.path||!isRecordChildOf(u,c[X]));)X++;c.splice(X,0,u),u.record.name&&!isAliasRecord(u)&&s.set(u.record.name,u)}function G(u,X){let z,R={},S,k;if("name"in u&&u.name){if(z=s.get(u.name),!z)throw createRouterError(1,{location:u});k=z.record.name,R=assign(paramsFromLocation(X.params,z.keys.filter(j=>!j.optional).map(j=>j.name)),u.params&¶msFromLocation(u.params,z.keys.map(j=>j.name))),S=z.stringify(R)}else if("path"in u)S=u.path,z=c.find(j=>j.re.test(S)),z&&(R=z.parse(S),k=z.record.name);else{if(z=X.name?s.get(X.name):c.find(j=>j.re.test(X.path)),!z)throw createRouterError(1,{location:u,currentLocation:X});k=z.record.name,R=assign({},X.params,u.params),S=z.stringify(R)}const L=[];let x=z;for(;x;)L.unshift(x.record),x=x.parent;return{name:k,path:S,params:R,matched:L,meta:mergeMetaFields(L)}}return l.forEach(u=>Z(u)),{addRoute:Z,resolve:G,removeRoute:i,getRoutes:o,getRecordMatcher:d}}function paramsFromLocation(l,t){const c={};for(const s of t)s in l&&(c[s]=l[s]);return c}function normalizeRouteRecord(l){return{path:l.path,redirect:l.redirect,name:l.name,meta:l.meta||{},aliasOf:void 0,beforeEnter:l.beforeEnter,props:normalizeRecordProps(l),children:l.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in l?l.components||null:l.component&&{default:l.component}}}function normalizeRecordProps(l){const t={},c=l.props||!1;if("component"in l)t.default=c;else for(const s in l.components)t[s]=typeof c=="boolean"?c:c[s];return t}function isAliasRecord(l){for(;l;){if(l.record.aliasOf)return!0;l=l.parent}return!1}function mergeMetaFields(l){return l.reduce((t,c)=>assign(t,c.meta),{})}function mergeOptions(l,t){const c={};for(const s in l)c[s]=s in t?t[s]:l[s];return c}function isRecordChildOf(l,t){return t.children.some(c=>c===l||isRecordChildOf(l,c))}const HASH_RE=/#/g,AMPERSAND_RE=/&/g,SLASH_RE=/\//g,EQUAL_RE=/=/g,IM_RE=/\?/g,PLUS_RE=/\+/g,ENC_BRACKET_OPEN_RE=/%5B/g,ENC_BRACKET_CLOSE_RE=/%5D/g,ENC_CARET_RE=/%5E/g,ENC_BACKTICK_RE=/%60/g,ENC_CURLY_OPEN_RE=/%7B/g,ENC_PIPE_RE=/%7C/g,ENC_CURLY_CLOSE_RE=/%7D/g,ENC_SPACE_RE=/%20/g;function commonEncode(l){return encodeURI(""+l).replace(ENC_PIPE_RE,"|").replace(ENC_BRACKET_OPEN_RE,"[").replace(ENC_BRACKET_CLOSE_RE,"]")}function encodeHash(l){return commonEncode(l).replace(ENC_CURLY_OPEN_RE,"{").replace(ENC_CURLY_CLOSE_RE,"}").replace(ENC_CARET_RE,"^")}function encodeQueryValue(l){return commonEncode(l).replace(PLUS_RE,"%2B").replace(ENC_SPACE_RE,"+").replace(HASH_RE,"%23").replace(AMPERSAND_RE,"%26").replace(ENC_BACKTICK_RE,"`").replace(ENC_CURLY_OPEN_RE,"{").replace(ENC_CURLY_CLOSE_RE,"}").replace(ENC_CARET_RE,"^")}function encodeQueryKey(l){return encodeQueryValue(l).replace(EQUAL_RE,"%3D")}function encodePath(l){return commonEncode(l).replace(HASH_RE,"%23").replace(IM_RE,"%3F")}function encodeParam(l){return l==null?"":encodePath(l).replace(SLASH_RE,"%2F")}function decode(l){try{return decodeURIComponent(""+l)}catch{}return""+l}function parseQuery(l){const t={};if(l===""||l==="?")return t;const s=(l[0]==="?"?l.slice(1):l).split("&");for(let d=0;dZ&&encodeQueryValue(Z)):[s&&encodeQueryValue(s)]).forEach(Z=>{Z!==void 0&&(t+=(t.length?"&":"")+c,Z!=null&&(t+="="+Z))})}return t}function normalizeQuery(l){const t={};for(const c in l){const s=l[c];s!==void 0&&(t[c]=isArray(s)?s.map(d=>d==null?null:""+d):s==null?s:""+s)}return t}const matchedRouteKey=Symbol(""),viewDepthKey=Symbol(""),routerKey=Symbol(""),routeLocationKey=Symbol(""),routerViewLocationKey=Symbol("");function useCallbacks(){let l=[];function t(s){return l.push(s),()=>{const d=l.indexOf(s);d>-1&&l.splice(d,1)}}function c(){l=[]}return{add:t,list:()=>l,reset:c}}function guardToPromiseFn(l,t,c,s,d){const Z=s&&(s.enterCallbacks[d]=s.enterCallbacks[d]||[]);return()=>new Promise((i,o)=>{const W=X=>{X===!1?o(createRouterError(4,{from:c,to:t})):X instanceof Error?o(X):isRouteLocation(X)?o(createRouterError(2,{from:t,to:X})):(Z&&s.enterCallbacks[d]===Z&&typeof X=="function"&&Z.push(X),i())},G=l.call(s&&s.instances[d],t,c,W);let u=Promise.resolve(G);l.length<3&&(u=u.then(W)),u.catch(X=>o(X))})}function extractComponentsGuards(l,t,c,s){const d=[];for(const Z of l)for(const i in Z.components){let o=Z.components[i];if(!(t!=="beforeRouteEnter"&&!Z.instances[i]))if(isRouteComponent(o)){const G=(o.__vccOpts||o)[t];G&&d.push(guardToPromiseFn(G,c,s,Z,i))}else{let W=o();d.push(()=>W.then(G=>{if(!G)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${Z.path}"`));const u=isESModule(G)?G.default:G;Z.components[i]=u;const z=(u.__vccOpts||u)[t];return z&&guardToPromiseFn(z,c,s,Z,i)()}))}}return d}function isRouteComponent(l){return typeof l=="object"||"displayName"in l||"props"in l||"__vccOpts"in l}function useLink(l){const t=inject(routerKey),c=inject(routeLocationKey),s=computed(()=>t.resolve(unref(l.to))),d=computed(()=>{const{matched:W}=s.value,{length:G}=W,u=W[G-1],X=c.matched;if(!u||!X.length)return-1;const z=X.findIndex(isSameRouteRecord.bind(null,u));if(z>-1)return z;const R=getOriginalPath(W[G-2]);return G>1&&getOriginalPath(u)===R&&X[X.length-1].path!==R?X.findIndex(isSameRouteRecord.bind(null,W[G-2])):z}),Z=computed(()=>d.value>-1&&includesParams(c.params,s.value.params)),i=computed(()=>d.value>-1&&d.value===c.matched.length-1&&isSameRouteLocationParams(c.params,s.value.params));function o(W={}){return guardEvent(W)?t[unref(l.replace)?"replace":"push"](unref(l.to)).catch(noop$1):Promise.resolve()}return{route:s,href:computed(()=>s.value.href),isActive:Z,isExactActive:i,navigate:o}}const RouterLinkImpl=defineComponent({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink,setup(l,{slots:t}){const c=reactive(useLink(l)),{options:s}=inject(routerKey),d=computed(()=>({[getLinkClass(l.activeClass,s.linkActiveClass,"router-link-active")]:c.isActive,[getLinkClass(l.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:c.isExactActive}));return()=>{const Z=t.default&&t.default(c);return l.custom?Z:h("a",{"aria-current":c.isExactActive?l.ariaCurrentValue:null,href:c.href,onClick:c.navigate,class:d.value},Z)}}}),RouterLink=RouterLinkImpl;function guardEvent(l){if(!(l.metaKey||l.altKey||l.ctrlKey||l.shiftKey)&&!l.defaultPrevented&&!(l.button!==void 0&&l.button!==0)){if(l.currentTarget&&l.currentTarget.getAttribute){const t=l.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return l.preventDefault&&l.preventDefault(),!0}}function includesParams(l,t){for(const c in t){const s=t[c],d=l[c];if(typeof s=="string"){if(s!==d)return!1}else if(!isArray(d)||d.length!==s.length||s.some((Z,i)=>Z!==d[i]))return!1}return!0}function getOriginalPath(l){return l?l.aliasOf?l.aliasOf.path:l.path:""}const getLinkClass=(l,t,c)=>l??t??c,RouterViewImpl=defineComponent({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(l,{attrs:t,slots:c}){const s=inject(routerViewLocationKey),d=computed(()=>l.route||s.value),Z=inject(viewDepthKey,0),i=computed(()=>{let G=unref(Z);const{matched:u}=d.value;let X;for(;(X=u[G])&&!X.components;)G++;return G}),o=computed(()=>d.value.matched[i.value]);provide(viewDepthKey,computed(()=>i.value+1)),provide(matchedRouteKey,o),provide(routerViewLocationKey,d);const W=ref();return watch(()=>[W.value,o.value,l.name],([G,u,X],[z,R,S])=>{u&&(u.instances[X]=G,R&&R!==u&&G&&G===z&&(u.leaveGuards.size||(u.leaveGuards=R.leaveGuards),u.updateGuards.size||(u.updateGuards=R.updateGuards))),G&&u&&(!R||!isSameRouteRecord(u,R)||!z)&&(u.enterCallbacks[X]||[]).forEach(k=>k(G))},{flush:"post"}),()=>{const G=d.value,u=l.name,X=o.value,z=X&&X.components[u];if(!z)return normalizeSlot(c.default,{Component:z,route:G});const R=X.props[u],S=R?R===!0?G.params:typeof R=="function"?R(G):R:null,L=h(z,assign({},S,t,{onVnodeUnmounted:x=>{x.component.isUnmounted&&(X.instances[u]=null)},ref:W}));return normalizeSlot(c.default,{Component:L,route:G})||L}}});function normalizeSlot(l,t){if(!l)return null;const c=l(t);return c.length===1?c[0]:c}const RouterView=RouterViewImpl;function createRouter(l){const t=createRouterMatcher(l.routes,l),c=l.parseQuery||parseQuery,s=l.stringifyQuery||stringifyQuery,d=l.history,Z=useCallbacks(),i=useCallbacks(),o=useCallbacks(),W=shallowRef(START_LOCATION_NORMALIZED);let G=START_LOCATION_NORMALIZED;isBrowser&&l.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=applyToParams.bind(null,O=>""+O),X=applyToParams.bind(null,encodeParam),z=applyToParams.bind(null,decode);function R(O,B){let P,Zl;return isRouteName(O)?(P=t.getRecordMatcher(O),Zl=B):Zl=O,t.addRoute(Zl,P)}function S(O){const B=t.getRecordMatcher(O);B&&t.removeRoute(B)}function k(){return t.getRoutes().map(O=>O.record)}function L(O){return!!t.getRecordMatcher(O)}function x(O,B){if(B=assign({},B||W.value),typeof O=="string"){const b=parseURL(c,O,B.path),N=t.resolve({path:b.path},B),I=d.createHref(b.fullPath);return assign(b,N,{params:z(N.params),hash:decode(b.hash),redirectedFrom:void 0,href:I})}let P;if("path"in O)P=assign({},O,{path:parseURL(c,O.path,B.path).path});else{const b=assign({},O.params);for(const N in b)b[N]==null&&delete b[N];P=assign({},O,{params:X(b)}),B.params=X(B.params)}const Zl=t.resolve(P,B),cl=O.hash||"";Zl.params=u(z(Zl.params));const T=stringifyURL(s,assign({},O,{hash:encodeHash(cl),path:Zl.path})),w=d.createHref(T);return assign({fullPath:T,hash:cl,query:s===stringifyQuery?normalizeQuery(O.query):O.query||{}},Zl,{redirectedFrom:void 0,href:w})}function j(O){return typeof O=="string"?parseURL(c,O,W.value.path):assign({},O)}function Q(O,B){if(G!==O)return createRouterError(8,{from:B,to:O})}function J(O){return Y(O)}function M(O){return J(assign(j(O),{replace:!0}))}function y(O){const B=O.matched[O.matched.length-1];if(B&&B.redirect){const{redirect:P}=B;let Zl=typeof P=="function"?P(O):P;return typeof Zl=="string"&&(Zl=Zl.includes("?")||Zl.includes("#")?Zl=j(Zl):{path:Zl},Zl.params={}),assign({query:O.query,hash:O.hash,params:"path"in Zl?{}:O.params},Zl)}}function Y(O,B){const P=G=x(O),Zl=W.value,cl=O.state,T=O.force,w=O.replace===!0,b=y(P);if(b)return Y(assign(j(b),{state:typeof b=="object"?assign({},cl,b.state):cl,force:T,replace:w}),B||P);const N=P;N.redirectedFrom=B;let I;return!T&&isSameRouteLocation(s,Zl,P)&&(I=createRouterError(16,{to:N,from:Zl}),Mt(Zl,Zl,!0,!1)),(I?Promise.resolve(I):H(N,Zl)).catch(C=>isNavigationFailure(C)?isNavigationFailure(C,2)?C:Wt(C):lt(C,N,Zl)).then(C=>{if(C){if(isNavigationFailure(C,2))return Y(assign({replace:w},j(C.to),{state:typeof C.to=="object"?assign({},cl,C.to.state):cl,force:T}),B||N)}else C=v(N,Zl,!0,w,cl);return V(N,Zl,C),C})}function m(O,B){const P=Q(O,B);return P?Promise.reject(P):Promise.resolve()}function D(O){const B=Ml.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(O):O()}function H(O,B){let P;const[Zl,cl,T]=extractChangingRecords(O,B);P=extractComponentsGuards(Zl.reverse(),"beforeRouteLeave",O,B);for(const b of Zl)b.leaveGuards.forEach(N=>{P.push(guardToPromiseFn(N,O,B))});const w=m.bind(null,O,B);return P.push(w),g(P).then(()=>{P=[];for(const b of Z.list())P.push(guardToPromiseFn(b,O,B));return P.push(w),g(P)}).then(()=>{P=extractComponentsGuards(cl,"beforeRouteUpdate",O,B);for(const b of cl)b.updateGuards.forEach(N=>{P.push(guardToPromiseFn(N,O,B))});return P.push(w),g(P)}).then(()=>{P=[];for(const b of O.matched)if(b.beforeEnter&&!B.matched.includes(b))if(isArray(b.beforeEnter))for(const N of b.beforeEnter)P.push(guardToPromiseFn(N,O,B));else P.push(guardToPromiseFn(b.beforeEnter,O,B));return P.push(w),g(P)}).then(()=>(O.matched.forEach(b=>b.enterCallbacks={}),P=extractComponentsGuards(T,"beforeRouteEnter",O,B),P.push(w),g(P))).then(()=>{P=[];for(const b of i.list())P.push(guardToPromiseFn(b,O,B));return P.push(w),g(P)}).catch(b=>isNavigationFailure(b,8)?b:Promise.reject(b))}function V(O,B,P){for(const Zl of o.list())D(()=>Zl(O,B,P))}function v(O,B,P,Zl,cl){const T=Q(O,B);if(T)return T;const w=B===START_LOCATION_NORMALIZED,b=isBrowser?history.state:{};P&&(Zl||w?d.replace(O.fullPath,assign({scroll:w&&b&&b.scroll},cl)):d.push(O.fullPath,cl)),W.value=O,Mt(O,B,P,w),Wt()}let A;function Nl(){A||(A=d.listen((O,B,P)=>{if(!U.listening)return;const Zl=x(O),cl=y(Zl);if(cl){Y(assign(cl,{replace:!0}),Zl).catch(noop$1);return}G=Zl;const T=W.value;isBrowser&&saveScrollPosition(getScrollKey(T.fullPath,P.delta),computeScrollPosition()),H(Zl,T).catch(w=>isNavigationFailure(w,12)?w:isNavigationFailure(w,2)?(Y(w.to,Zl).then(b=>{isNavigationFailure(b,20)&&!P.delta&&P.type===NavigationType.pop&&d.go(-1,!1)}).catch(noop$1),Promise.reject()):(P.delta&&d.go(-P.delta,!1),lt(w,Zl,T))).then(w=>{w=w||v(Zl,T,!1),w&&(P.delta&&!isNavigationFailure(w,8)?d.go(-P.delta,!1):P.type===NavigationType.pop&&isNavigationFailure(w,20)&&d.go(-1,!1)),V(Zl,T,w)}).catch(noop$1)}))}let fl=useCallbacks(),Xl=useCallbacks(),Zt;function lt(O,B,P){Wt(O);const Zl=Xl.list();return Zl.length?Zl.forEach(cl=>cl(O,B,P)):console.error(O),Promise.reject(O)}function at(){return Zt&&W.value!==START_LOCATION_NORMALIZED?Promise.resolve():new Promise((O,B)=>{fl.add([O,B])})}function Wt(O){return Zt||(Zt=!O,Nl(),fl.list().forEach(([B,P])=>O?P(O):B()),fl.reset()),O}function Mt(O,B,P,Zl){const{scrollBehavior:cl}=l;if(!isBrowser||!cl)return Promise.resolve();const T=!P&&getSavedScrollPosition(getScrollKey(O.fullPath,0))||(Zl||!P)&&history.state&&history.state.scroll||null;return nextTick().then(()=>cl(O,B,T)).then(w=>w&&scrollToPosition(w)).catch(w=>lt(w,O,B))}const Nt=O=>d.go(O);let Vt;const Ml=new Set,U={currentRoute:W,listening:!0,addRoute:R,removeRoute:S,hasRoute:L,getRoutes:k,resolve:x,options:l,push:J,replace:M,go:Nt,back:()=>Nt(-1),forward:()=>Nt(1),beforeEach:Z.add,beforeResolve:i.add,afterEach:o.add,onError:Xl.add,isReady:at,install(O){const B=this;O.component("RouterLink",RouterLink),O.component("RouterView",RouterView),O.config.globalProperties.$router=B,Object.defineProperty(O.config.globalProperties,"$route",{enumerable:!0,get:()=>unref(W)}),isBrowser&&!Vt&&W.value===START_LOCATION_NORMALIZED&&(Vt=!0,J(d.location).catch(cl=>{}));const P={};for(const cl in START_LOCATION_NORMALIZED)P[cl]=computed(()=>W.value[cl]);O.provide(routerKey,B),O.provide(routeLocationKey,reactive(P)),O.provide(routerViewLocationKey,W);const Zl=O.unmount;Ml.add(O),O.unmount=function(){Ml.delete(O),Ml.size<1&&(G=START_LOCATION_NORMALIZED,A&&A(),A=null,W.value=START_LOCATION_NORMALIZED,Vt=!1,Zt=!1),Zl()}}};function g(O){return O.reduce((B,P)=>B.then(()=>D(P)),Promise.resolve())}return U}function extractChangingRecords(l,t){const c=[],s=[],d=[],Z=Math.max(t.matched.length,l.matched.length);for(let i=0;iisSameRouteRecord(G,o))?s.push(o):c.push(o));const W=l.matched[i];W&&(t.matched.find(G=>isSameRouteRecord(G,W))||d.push(W))}return[c,s,d]}function useRouter(){return inject(routerKey)}function useRoute(){return inject(routeLocationKey)}const useActiveHeaderLinks=({headerLinkSelector:l,headerAnchorSelector:t,delay:c,offset:s=5})=>{const d=useRouter(),i=r(()=>{var k,L;const o=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(o-0)z.some(j=>j.hash===x.hash));for(let x=0;x=(((k=j.parentElement)==null?void 0:k.offsetTop)??0)-s,M=!Q||o<(((L=Q.parentElement)==null?void 0:L.offsetTop)??0)-s;if(!(J&&M))continue;const Y=decodeURIComponent(d.currentRoute.value.hash),m=decodeURIComponent(j.hash);if(Y===m)return;if(X){for(let D=x+1;D{window.addEventListener("scroll",i)}),onBeforeUnmount(()=>{window.removeEventListener("scroll",i)})},updateHash=async(l,t)=>{const{scrollBehavior:c}=l.options;l.options.scrollBehavior=void 0,await l.replace({query:l.currentRoute.value.query,hash:t,force:!0}).finally(()=>l.options.scrollBehavior=c)},headerLinkSelector="a.sidebar-item",headerAnchorSelector=".header-anchor",delay$1=300,offset=5,clientConfig0=defineClientConfig({setup(){useActiveHeaderLinks({headerLinkSelector,headerAnchorSelector,delay:delay$1,offset})}}),getScrollTop=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,scrollToTop=()=>window.scrollTo({top:0,behavior:"smooth"}),vars$4="",backToTop="",BackToTop=defineComponent({name:"BackToTop",setup(){const l=ref(0),t=computed(()=>l.value>300),c=r(()=>{l.value=getScrollTop()},100);onMounted(()=>{l.value=getScrollTop(),window.addEventListener("scroll",()=>c())});const s=h("div",{class:"back-to-top",onClick:scrollToTop});return()=>h(Transition,{name:"back-to-top"},()=>t.value?s:null)}}),clientConfig1=defineClientConfig({rootComponents:[BackToTop]}),vars$3="",externalLinkIcon="",svg=h("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[h("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),h("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),ExternalLinkIcon=defineComponent({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(l){const t=useRouteLocale(),c=computed(()=>l.locales[t.value]??{openInNewWindow:"open in new window"});return()=>h("span",[svg,h("span",{class:"external-link-icon-sr-only"},c.value.openInNewWindow)])}}),locales$1={"/":{openInNewWindow:"open in new window"}},clientConfig2=defineClientConfig({enhance({app:l}){l.component("ExternalLinkIcon",h(ExternalLinkIcon,{locales:locales$1}))}});/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */var _extends=Object.assign||function(l){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},s=window.Promise||function(v){function A(){}v(A,A)},d=function(v){var A=v.target;if(A===D){S();return}Q.indexOf(A)!==-1&&k({target:A})},Z=function(){if(!(M||!m.original)){var v=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(y-v)>Y.scrollOffset&&setTimeout(S,150)}},i=function(v){var A=v.key||v.keyCode;(A==="Escape"||A==="Esc"||A===27)&&S()},o=function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},A=v;if(v.background&&(D.style.background=v.background),v.container&&v.container instanceof Object&&(A.container=_extends({},Y.container,v.container)),v.template){var Nl=isNode(v.template)?v.template:document.querySelector(v.template);A.template=Nl}return Y=_extends({},Y,A),Q.forEach(function(fl){fl.dispatchEvent(createCustomEvent("medium-zoom:update",{detail:{zoom:H}}))}),H},W=function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return l(_extends({},Y,v))},G=function(){for(var v=arguments.length,A=Array(v),Nl=0;Nl0?A.reduce(function(Xl,Zt){return[].concat(Xl,getImagesFromSelector(Zt))},[]):Q;return fl.forEach(function(Xl){Xl.classList.remove("medium-zoom-image"),Xl.dispatchEvent(createCustomEvent("medium-zoom:detach",{detail:{zoom:H}}))}),Q=Q.filter(function(Xl){return fl.indexOf(Xl)===-1}),H},X=function(v,A){var Nl=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return Q.forEach(function(fl){fl.addEventListener("medium-zoom:"+v,A,Nl)}),J.push({type:"medium-zoom:"+v,listener:A,options:Nl}),H},z=function(v,A){var Nl=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return Q.forEach(function(fl){fl.removeEventListener("medium-zoom:"+v,A,Nl)}),J=J.filter(function(fl){return!(fl.type==="medium-zoom:"+v&&fl.listener.toString()===A.toString())}),H},R=function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},A=v.target,Nl=function(){var Xl={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},Zt=void 0,lt=void 0;if(Y.container)if(Y.container instanceof Object)Xl=_extends({},Xl,Y.container),Zt=Xl.width-Xl.left-Xl.right-Y.margin*2,lt=Xl.height-Xl.top-Xl.bottom-Y.margin*2;else{var at=isNode(Y.container)?Y.container:document.querySelector(Y.container),Wt=at.getBoundingClientRect(),Mt=Wt.width,Nt=Wt.height,Vt=Wt.left,Ml=Wt.top;Xl=_extends({},Xl,{width:Mt,height:Nt,left:Vt,top:Ml})}Zt=Zt||Xl.width-Y.margin*2,lt=lt||Xl.height-Y.margin*2;var U=m.zoomedHd||m.original,g=isSvg(U)?Zt:U.naturalWidth||Zt,O=isSvg(U)?lt:U.naturalHeight||lt,B=U.getBoundingClientRect(),P=B.top,Zl=B.left,cl=B.width,T=B.height,w=Math.min(Math.max(cl,g),Zt)/cl,b=Math.min(Math.max(T,O),lt)/T,N=Math.min(w,b),I=(-Zl+(Zt-cl)/2+Y.margin+Xl.left)/N,C=(-P+(lt-T)/2+Y.margin+Xl.top)/N,K="scale("+N+") translate3d("+I+"px, "+C+"px, 0)";m.zoomed.style.transform=K,m.zoomedHd&&(m.zoomedHd.style.transform=K)};return new s(function(fl){if(A&&Q.indexOf(A)===-1){fl(H);return}var Xl=function Mt(){M=!1,m.zoomed.removeEventListener("transitionend",Mt),m.original.dispatchEvent(createCustomEvent("medium-zoom:opened",{detail:{zoom:H}})),fl(H)};if(m.zoomed){fl(H);return}if(A)m.original=A;else if(Q.length>0){var Zt=Q;m.original=Zt[0]}else{fl(H);return}if(m.original.dispatchEvent(createCustomEvent("medium-zoom:open",{detail:{zoom:H}})),y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,M=!0,m.zoomed=cloneTarget(m.original),document.body.appendChild(D),Y.template){var lt=isNode(Y.template)?Y.template:document.querySelector(Y.template);m.template=document.createElement("div"),m.template.appendChild(lt.content.cloneNode(!0)),document.body.appendChild(m.template)}if(m.original.parentElement&&m.original.parentElement.tagName==="PICTURE"&&m.original.currentSrc&&(m.zoomed.src=m.original.currentSrc),document.body.appendChild(m.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),m.original.classList.add("medium-zoom-image--hidden"),m.zoomed.classList.add("medium-zoom-image--opened"),m.zoomed.addEventListener("click",S),m.zoomed.addEventListener("transitionend",Xl),m.original.getAttribute("data-zoom-src")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("srcset"),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading"),m.zoomedHd.src=m.zoomed.getAttribute("data-zoom-src"),m.zoomedHd.onerror=function(){clearInterval(at),console.warn("Unable to reach the zoom image target "+m.zoomedHd.src),m.zoomedHd=null,Nl()};var at=setInterval(function(){m.zoomedHd.complete&&(clearInterval(at),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",S),document.body.appendChild(m.zoomedHd),Nl())},10)}else if(m.original.hasAttribute("srcset")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading");var Wt=m.zoomedHd.addEventListener("load",function(){m.zoomedHd.removeEventListener("load",Wt),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",S),document.body.appendChild(m.zoomedHd),Nl()})}else Nl()})},S=function(){return new s(function(v){if(M||!m.original){v(H);return}var A=function Nl(){m.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(m.zoomed),m.zoomedHd&&document.body.removeChild(m.zoomedHd),document.body.removeChild(D),m.zoomed.classList.remove("medium-zoom-image--opened"),m.template&&document.body.removeChild(m.template),M=!1,m.zoomed.removeEventListener("transitionend",Nl),m.original.dispatchEvent(createCustomEvent("medium-zoom:closed",{detail:{zoom:H}})),m.original=null,m.zoomed=null,m.zoomedHd=null,m.template=null,v(H)};M=!0,document.body.classList.remove("medium-zoom--opened"),m.zoomed.style.transform="",m.zoomedHd&&(m.zoomedHd.style.transform=""),m.template&&(m.template.style.transition="opacity 150ms",m.template.style.opacity=0),m.original.dispatchEvent(createCustomEvent("medium-zoom:close",{detail:{zoom:H}})),m.zoomed.addEventListener("transitionend",A)})},k=function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},A=v.target;return m.original?S():R({target:A})},L=function(){return Y},x=function(){return Q},j=function(){return m.original},Q=[],J=[],M=!1,y=0,Y=c,m={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?Y=t:(t||typeof t=="string")&&G(t),Y=_extends({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},Y);var D=createOverlay(Y.background);document.addEventListener("click",d),document.addEventListener("keyup",i),document.addEventListener("scroll",Z),window.addEventListener("resize",S);var H={open:R,close:S,toggle:k,update:o,clone:W,attach:G,detach:u,on:X,off:z,getOptions:L,getImages:x,getZoomedImage:j};return H};function styleInject(l,t){t===void 0&&(t={});var c=t.insertAt;if(!(!l||typeof document>"u")){var s=document.head||document.getElementsByTagName("head")[0],d=document.createElement("style");d.type="text/css",c==="top"&&s.firstChild?s.insertBefore(d,s.firstChild):s.appendChild(d),d.styleSheet?d.styleSheet.cssText=l:d.appendChild(document.createTextNode(l))}}var css$1=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";styleInject(css$1);const mediumZoom$2=mediumZoom$1,mediumZoomSymbol=Symbol("mediumZoom"),vars$2="",mediumZoom="",selector=".theme-default-content > img, .theme-default-content :not(a) > img",zoomOptions={},delay=300,clientConfig3=defineClientConfig({enhance({app:l,router:t}){const c=mediumZoom$2(zoomOptions);c.refresh=(s=selector)=>{c.detach(),c.attach(s)},l.provide(mediumZoomSymbol,c),t.afterEach(()=>{setTimeout(()=>c.refresh(),delay)})}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const nprogress$1={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:l=>{const t=nprogress$1.isStarted();l=clamp(l,nprogress$1.settings.minimum,1),nprogress$1.status=l===1?null:l;const c=nprogress$1.render(!t),s=c.querySelector(nprogress$1.settings.barSelector),d=nprogress$1.settings.speed,Z=nprogress$1.settings.easing;return c.offsetWidth,queue(i=>{css(s,{transform:"translate3d("+toBarPerc(l)+"%,0,0)",transition:"all "+d+"ms "+Z}),l===1?(css(c,{transition:"none",opacity:"1"}),c.offsetWidth,setTimeout(function(){css(c,{transition:"all "+d+"ms linear",opacity:"0"}),setTimeout(function(){nprogress$1.remove(),i()},d)},d)):setTimeout(()=>i(),d)}),nprogress$1},isStarted:()=>typeof nprogress$1.status=="number",start:()=>{nprogress$1.status||nprogress$1.set(0);const l=()=>{setTimeout(()=>{nprogress$1.status&&(nprogress$1.trickle(),l())},nprogress$1.settings.trickleSpeed)};return nprogress$1.settings.trickle&&l(),nprogress$1},done:l=>!l&&!nprogress$1.status?nprogress$1:nprogress$1.inc(.3+.5*Math.random()).set(1),inc:l=>{let t=nprogress$1.status;return t?(typeof l!="number"&&(l=(1-t)*clamp(Math.random()*t,.1,.95)),t=clamp(t+l,0,.994),nprogress$1.set(t)):nprogress$1.start()},trickle:()=>nprogress$1.inc(Math.random()*nprogress$1.settings.trickleRate),render:l=>{if(nprogress$1.isRendered())return document.getElementById("nprogress");addClass(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=nprogress$1.settings.template;const c=t.querySelector(nprogress$1.settings.barSelector),s=l?"-100":toBarPerc(nprogress$1.status||0),d=document.querySelector(nprogress$1.settings.parent);return css(c,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),d!==document.body&&addClass(d,"nprogress-custom-parent"),d==null||d.appendChild(t),t},remove:()=>{removeClass(document.documentElement,"nprogress-busy"),removeClass(document.querySelector(nprogress$1.settings.parent),"nprogress-custom-parent");const l=document.getElementById("nprogress");l&&removeElement(l)},isRendered:()=>!!document.getElementById("nprogress")},clamp=(l,t,c)=>lc?c:l,toBarPerc=l=>(-1+l)*100,queue=function(){const l=[];function t(){const c=l.shift();c&&c(t)}return function(c){l.push(c),l.length===1&&t()}}(),css=function(){const l=["Webkit","O","Moz","ms"],t={};function c(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(o,W){return W.toUpperCase()})}function s(i){const o=document.body.style;if(i in o)return i;let W=l.length;const G=i.charAt(0).toUpperCase()+i.slice(1);let u;for(;W--;)if(u=l[W]+G,u in o)return u;return i}function d(i){return i=c(i),t[i]??(t[i]=s(i))}function Z(i,o,W){o=d(o),i.style[o]=W}return function(i,o){for(const W in o){const G=o[W];G!==void 0&&Object.prototype.hasOwnProperty.call(o,W)&&Z(i,W,G)}}}(),hasClass=(l,t)=>(typeof l=="string"?l:classList(l)).indexOf(" "+t+" ")>=0,addClass=(l,t)=>{const c=classList(l),s=c+t;hasClass(c,t)||(l.className=s.substring(1))},removeClass=(l,t)=>{const c=classList(l);if(!hasClass(l,t))return;const s=c.replace(" "+t+" "," ");l.className=s.substring(1,s.length-1)},classList=l=>(" "+(l.className||"")+" ").replace(/\s+/gi," "),removeElement=l=>{l&&l.parentNode&&l.parentNode.removeChild(l)},vars$1="",nprogress="",useNprogress=()=>{onMounted(()=>{const l=useRouter(),t=new Set;t.add(l.currentRoute.value.path),l.beforeEach(c=>{t.has(c.path)||nprogress$1.start()}),l.afterEach(c=>{t.add(c.path),nprogress$1.done()})})},clientConfig4=defineClientConfig({setup(){useNprogress()}}),themeData$1=JSON.parse(`{"logo":"/logo.png","repo":"https://github.com/TaTo30/VuePDF","colorMode":"auto","docsBranch":"master","docsDir":"docs","navbar":[{"text":"Docs","link":"/guide/introduction.md"},{"text":"Examples","children":[{"text":"Basic usages","link":"/examples/basic/one_page.md"},{"text":"Advanced usages","link":"/examples/advanced/fit_parent.md"},{"text":"Events","link":"/examples/loaded_events/loaded.md"}]}],"sidebar":{"/guide/":[{"text":"Guide","children":["/guide/introduction.md","/guide/composables.md"]},{"text":"VuePDF Component","children":["/guide/props.md","/guide/events.md","/guide/methods.md","/guide/slots.md"]}],"/examples/":[{"text":"Basic usages","children":["/examples/basic/one_page.md","/examples/basic/all_pages.md","/examples/basic/scale.md","/examples/basic/rotation.md","/examples/basic/text_layer.md","/examples/basic/annotation_layer.md","/examples/basic/xfa_layer.md"]},{"text":"Advanced usages","children":["/examples/advanced/watermark.md","/examples/advanced/highlight_text.md","/examples/advanced/fit_parent.md","/examples/advanced/annotation_filter.md","/examples/advanced/multiple_pdf.md","/examples/advanced/toc.md"]},{"text":"Events","children":["/examples/loaded_events/loaded.md","/examples/text_events/text_highlight.md",{"text":"Annotation Events","children":["/examples/annotation_events/annotation_forms.md","/examples/annotation_events/annotation_links.md","/examples/annotation_events/annotation_attachment.md"]}]}]},"locales":{"/":{"selectLanguageName":"English"}},"colorModeSwitch":true,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),themeData=ref(themeData$1),useThemeData=()=>themeData,themeLocaleDataSymbol=Symbol(""),useThemeLocaleData$1=()=>{const l=inject(themeLocaleDataSymbol);if(!l)throw new Error("useThemeLocaleData() is called without provider.");return l},resolveThemeLocaleData=(l,t)=>{const{locales:c,...s}=l;return{...s,...c==null?void 0:c[t]}},clientConfig5=defineClientConfig({enhance({app:l}){const t=useThemeData(),c=l._context.provides[routeLocaleSymbol],s=computed(()=>resolveThemeLocaleData(t.value,c.value));l.provide(themeLocaleDataSymbol,s),Object.defineProperties(l.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return s.value}}})}}),_sfc_main$F=defineComponent({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(l){return(t,c)=>(openBlock(),createElementBlock("span",{class:normalizeClass(["badge",l.type]),style:normalizeStyle({verticalAlign:l.vertical})},[renderSlot(t.$slots,"default",{},()=>[createTextVNode(toDisplayString(l.text),1)])],6))}}),_export_sfc=(l,t)=>{const c=l.__vccOpts||l;for(const[s,d]of t)c[s]=d;return c},Badge=_export_sfc(_sfc_main$F,[["__file","Badge.vue"]]),CodeGroup=defineComponent({name:"CodeGroup",slots:Object,setup(l,{slots:t}){const c=ref(-1),s=ref([]),d=(o=c.value)=>{o{o>0?c.value=o-1:c.value=s.value.length-1,s.value[c.value].focus()},i=(o,W)=>{o.key===" "||o.key==="Enter"?(o.preventDefault(),c.value=W):o.key==="ArrowRight"?(o.preventDefault(),d(W)):o.key==="ArrowLeft"&&(o.preventDefault(),Z(W))};return()=>{var W;const o=(((W=t.default)==null?void 0:W.call(t))||[]).filter(G=>G.type.name==="CodeGroupItem").map(G=>(G.props===null&&(G.props={}),G));return o.length===0?null:(c.value<0||c.value>o.length-1?(c.value=o.findIndex(G=>G.props.active===""||G.props.active===!0),c.value===-1&&(c.value=0)):o.forEach((G,u)=>{G.props.active=u===c.value}),h("div",{class:"code-group"},[h("div",{class:"code-group__nav"},h("ul",{class:"code-group__ul"},o.map((G,u)=>{const X=u===c.value;return h("li",{class:"code-group__li"},h("button",{ref:z=>{z&&(s.value[u]=z)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":X},ariaPressed:X,ariaExpanded:X,onClick:()=>c.value=u,onKeydown:z=>i(z,u)},G.props.title))}))),o]))}}}),_hoisted_1$z=["aria-selected"],__default__$1=defineComponent({name:"CodeGroupItem"}),_sfc_main$E=defineComponent({...__default__$1,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(l){return(t,c)=>(openBlock(),createElementBlock("div",{class:normalizeClass(["code-group-item",{"code-group-item__active":l.active}]),"aria-selected":l.active},[renderSlot(t.$slots,"default")],10,_hoisted_1$z))}}),CodeGroupItem=_export_sfc(_sfc_main$E,[["__file","CodeGroupItem.vue"]]);function tryOnScopeDispose(l){return getCurrentScope()?(onScopeDispose(l),!0):!1}function toValue(l){return typeof l=="function"?l():unref(l)}const isClient=typeof window<"u",noop=()=>{};function createFilterWrapper(l,t){function c(...s){return new Promise((d,Z)=>{Promise.resolve(l(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(d).catch(Z)})}return c}const bypassFilter=l=>l();function pausableFilter(l=bypassFilter){const t=ref(!0);function c(){t.value=!1}function s(){t.value=!0}const d=(...Z)=>{t.value&&l(...Z)};return{isActive:readonly(t),pause:c,resume:s,eventFilter:d}}function toRef(...l){if(l.length!==1)return toRef$1(...l);const t=l[0];return typeof t=="function"?readonly(customRef(()=>({get:t,set:noop}))):ref(t)}function useToggle(l=!1,t={}){const{truthyValue:c=!0,falsyValue:s=!1}=t,d=isRef(l),Z=ref(l);function i(o){if(arguments.length)return Z.value=o,Z.value;{const W=toValue(c);return Z.value=Z.value===W?toValue(s):W,Z.value}}return d?i:[Z,i]}var __getOwnPropSymbols$8=Object.getOwnPropertySymbols,__hasOwnProp$8=Object.prototype.hasOwnProperty,__propIsEnum$8=Object.prototype.propertyIsEnumerable,__objRest$5=(l,t)=>{var c={};for(var s in l)__hasOwnProp$8.call(l,s)&&t.indexOf(s)<0&&(c[s]=l[s]);if(l!=null&&__getOwnPropSymbols$8)for(var s of __getOwnPropSymbols$8(l))t.indexOf(s)<0&&__propIsEnum$8.call(l,s)&&(c[s]=l[s]);return c};function watchWithFilter(l,t,c={}){const s=c,{eventFilter:d=bypassFilter}=s,Z=__objRest$5(s,["eventFilter"]);return watch(l,createFilterWrapper(d,t),Z)}var __defProp$2=Object.defineProperty,__defProps$2=Object.defineProperties,__getOwnPropDescs$2=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$2=Object.getOwnPropertySymbols,__hasOwnProp$2=Object.prototype.hasOwnProperty,__propIsEnum$2=Object.prototype.propertyIsEnumerable,__defNormalProp$2=(l,t,c)=>t in l?__defProp$2(l,t,{enumerable:!0,configurable:!0,writable:!0,value:c}):l[t]=c,__spreadValues$2=(l,t)=>{for(var c in t||(t={}))__hasOwnProp$2.call(t,c)&&__defNormalProp$2(l,c,t[c]);if(__getOwnPropSymbols$2)for(var c of __getOwnPropSymbols$2(t))__propIsEnum$2.call(t,c)&&__defNormalProp$2(l,c,t[c]);return l},__spreadProps$2=(l,t)=>__defProps$2(l,__getOwnPropDescs$2(t)),__objRest$1=(l,t)=>{var c={};for(var s in l)__hasOwnProp$2.call(l,s)&&t.indexOf(s)<0&&(c[s]=l[s]);if(l!=null&&__getOwnPropSymbols$2)for(var s of __getOwnPropSymbols$2(l))t.indexOf(s)<0&&__propIsEnum$2.call(l,s)&&(c[s]=l[s]);return c};function watchPausable(l,t,c={}){const s=c,{eventFilter:d}=s,Z=__objRest$1(s,["eventFilter"]),{eventFilter:i,pause:o,resume:W,isActive:G}=pausableFilter(d);return{stop:watchWithFilter(l,t,__spreadProps$2(__spreadValues$2({},Z),{eventFilter:i})),pause:o,resume:W,isActive:G}}function unrefElement(l){var t;const c=toValue(l);return(t=c==null?void 0:c.$el)!=null?t:c}const defaultWindow=isClient?window:void 0;function useEventListener(...l){let t,c,s,d;if(typeof l[0]=="string"||Array.isArray(l[0])?([c,s,d]=l,t=defaultWindow):[t,c,s,d]=l,!t)return noop;Array.isArray(c)||(c=[c]),Array.isArray(s)||(s=[s]);const Z=[],i=()=>{Z.forEach(u=>u()),Z.length=0},o=(u,X,z,R)=>(u.addEventListener(X,z,R),()=>u.removeEventListener(X,z,R)),W=watch(()=>[unrefElement(t),toValue(d)],([u,X])=>{i(),u&&Z.push(...c.flatMap(z=>s.map(R=>o(u,z,R,X))))},{immediate:!0,flush:"post"}),G=()=>{W(),i()};return tryOnScopeDispose(G),G}function useMounted(){const l=ref(!1);return getCurrentInstance()&&onMounted(()=>{l.value=!0}),l}function useSupported(l){const t=useMounted();return computed(()=>(t.value,!!l()))}function useMediaQuery(l,t={}){const{window:c=defaultWindow}=t,s=useSupported(()=>c&&"matchMedia"in c&&typeof c.matchMedia=="function");let d;const Z=ref(!1),i=()=>{d&&("removeEventListener"in d?d.removeEventListener("change",o):d.removeListener(o))},o=()=>{s.value&&(i(),d=c.matchMedia(toRef(l).value),Z.value=!!(d!=null&&d.matches),d&&("addEventListener"in d?d.addEventListener("change",o):d.addListener(o)))};return watchEffect(o),tryOnScopeDispose(()=>i()),Z}const _global=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},globalKey="__vueuse_ssr_handlers__",handlers=getHandlers();function getHandlers(){return globalKey in _global||(_global[globalKey]=_global[globalKey]||{}),_global[globalKey]}function getSSRHandler(l,t){return handlers[l]||t}function guessSerializerType(l){return l==null?"any":l instanceof Set?"set":l instanceof Map?"map":l instanceof Date?"date":typeof l=="boolean"?"boolean":typeof l=="string"?"string":typeof l=="object"?"object":Number.isNaN(l)?"any":"number"}var __defProp$l=Object.defineProperty,__getOwnPropSymbols$o=Object.getOwnPropertySymbols,__hasOwnProp$o=Object.prototype.hasOwnProperty,__propIsEnum$o=Object.prototype.propertyIsEnumerable,__defNormalProp$l=(l,t,c)=>t in l?__defProp$l(l,t,{enumerable:!0,configurable:!0,writable:!0,value:c}):l[t]=c,__spreadValues$l=(l,t)=>{for(var c in t||(t={}))__hasOwnProp$o.call(t,c)&&__defNormalProp$l(l,c,t[c]);if(__getOwnPropSymbols$o)for(var c of __getOwnPropSymbols$o(t))__propIsEnum$o.call(t,c)&&__defNormalProp$l(l,c,t[c]);return l};const StorageSerializers={boolean:{read:l=>l==="true",write:l=>String(l)},object:{read:l=>JSON.parse(l),write:l=>JSON.stringify(l)},number:{read:l=>Number.parseFloat(l),write:l=>String(l)},any:{read:l=>l,write:l=>String(l)},string:{read:l=>l,write:l=>String(l)},map:{read:l=>new Map(JSON.parse(l)),write:l=>JSON.stringify(Array.from(l.entries()))},set:{read:l=>new Set(JSON.parse(l)),write:l=>JSON.stringify(Array.from(l))},date:{read:l=>new Date(l),write:l=>l.toISOString()}},customStorageEventName="vueuse-storage";function useStorage(l,t,c,s={}){var d;const{flush:Z="pre",deep:i=!0,listenToStorageChanges:o=!0,writeDefaults:W=!0,mergeDefaults:G=!1,shallow:u,window:X=defaultWindow,eventFilter:z,onError:R=m=>{console.error(m)}}=s,S=(u?shallowRef:ref)(t);if(!c)try{c=getSSRHandler("getDefaultStorage",()=>{var m;return(m=defaultWindow)==null?void 0:m.localStorage})()}catch(m){R(m)}if(!c)return S;const k=toValue(t),L=guessSerializerType(k),x=(d=s.serializer)!=null?d:StorageSerializers[L],{pause:j,resume:Q}=watchPausable(S,()=>J(S.value),{flush:Z,deep:i,eventFilter:z});return X&&o&&(useEventListener(X,"storage",Y),useEventListener(X,customStorageEventName,y)),Y(),S;function J(m){try{if(m==null)c.removeItem(l);else{const D=x.write(m),H=c.getItem(l);H!==D&&(c.setItem(l,D),X&&X.dispatchEvent(new CustomEvent(customStorageEventName,{detail:{key:l,oldValue:H,newValue:D,storageArea:c}})))}}catch(D){R(D)}}function M(m){const D=m?m.newValue:c.getItem(l);if(D==null)return W&&k!==null&&c.setItem(l,x.write(k)),k;if(!m&&G){const H=x.read(D);return typeof G=="function"?G(H,k):L==="object"&&!Array.isArray(H)?__spreadValues$l(__spreadValues$l({},k),H):H}else return typeof D!="string"?D:x.read(D)}function y(m){Y(m.detail)}function Y(m){if(!(m&&m.storageArea!==c)){if(m&&m.key==null){S.value=k;return}if(!(m&&m.key!==l)){j();try{S.value=M(m)}catch(D){R(D)}finally{m?nextTick(Q):Q()}}}}}function usePreferredDark(l){return useMediaQuery("(prefers-color-scheme: dark)",l)}const useThemeLocaleData=()=>useThemeLocaleData$1(),darkModeSymbol=Symbol(""),useDarkMode=()=>{const l=inject(darkModeSymbol);if(!l)throw new Error("useDarkMode() is called without provider.");return l},setupDarkMode=()=>{const l=useThemeLocaleData(),t=usePreferredDark(),c=useStorage("vuepress-color-scheme",l.value.colorMode),s=computed({get(){return l.value.colorModeSwitch?c.value==="auto"?t.value:c.value==="dark":l.value.colorMode==="dark"},set(d){d===t.value?c.value="auto":c.value=d?"dark":"light"}});provide(darkModeSymbol,s),updateHtmlDarkClass(s)},updateHtmlDarkClass=l=>{const t=(c=l.value)=>{const s=window==null?void 0:window.document.querySelector("html");s==null||s.classList.toggle("dark",c)};onMounted(()=>{watch(l,t,{immediate:!0})}),onUnmounted(()=>t())},useResolveRouteWithRedirect=(...l)=>{const c=useRouter().resolve(...l),s=c.matched[c.matched.length-1];if(!(s!=null&&s.redirect))return c;const{redirect:d}=s,Z=isFunction(d)?d(c):d,i=isString(Z)?{path:Z}:Z;return useResolveRouteWithRedirect({hash:c.hash,query:c.query,params:c.params,...i})},useNavLink=l=>{const t=useResolveRouteWithRedirect(encodeURI(l));return{text:t.meta.title||l,link:t.name==="404"?l:t.fullPath}};let promise=null,promiseResolve=null;const scrollPromise={wait:()=>promise,pending:()=>{promise=new Promise(l=>promiseResolve=l)},resolve:()=>{promiseResolve==null||promiseResolve(),promise=null,promiseResolve=null}},useScrollPromise=()=>scrollPromise,sidebarItemsSymbol=Symbol("sidebarItems"),useSidebarItems=()=>{const l=inject(sidebarItemsSymbol);if(!l)throw new Error("useSidebarItems() is called without provider.");return l},setupSidebarItems=()=>{const l=useThemeLocaleData(),t=usePageFrontmatter(),c=computed(()=>resolveSidebarItems(t.value,l.value));provide(sidebarItemsSymbol,c)},resolveSidebarItems=(l,t)=>{const c=l.sidebar??t.sidebar??"auto",s=l.sidebarDepth??t.sidebarDepth??2;return l.home||c===!1?[]:c==="auto"?resolveAutoSidebarItems(s):isArray$1(c)?resolveArraySidebarItems(c,s):isPlainObject(c)?resolveMultiSidebarItems(c,s):[]},headerToSidebarItem=(l,t)=>({text:l.title,link:l.link,children:headersToSidebarItemChildren(l.children,t)}),headersToSidebarItemChildren=(l,t)=>t>0?l.map(c=>headerToSidebarItem(c,t-1)):[],resolveAutoSidebarItems=l=>{const t=usePageData();return[{text:t.value.title,children:headersToSidebarItemChildren(t.value.headers,l)}]},resolveArraySidebarItems=(l,t)=>{const c=useRoute(),s=usePageData(),d=Z=>{var o;let i;if(isString(Z)?i=useNavLink(Z):i=Z,i.children)return{...i,children:i.children.map(W=>d(W))};if(i.link===c.path){const W=((o=s.value.headers[0])==null?void 0:o.level)===1?s.value.headers[0].children:s.value.headers;return{...i,children:headersToSidebarItemChildren(W,t)}}return i};return l.map(Z=>d(Z))},resolveMultiSidebarItems=(l,t)=>{const c=useRoute(),s=resolveLocalePath(l,c.path),d=l[s]??[];return resolveArraySidebarItems(d,t)},mobile="719px",cssVars={mobile};var DeviceType;(function(l){l.MOBILE="mobile"})(DeviceType||(DeviceType={}));var Uc;const DeviceTypeMap={[DeviceType.MOBILE]:Number.parseInt((Uc=cssVars.mobile)==null?void 0:Uc.replace("px",""),10)},useUpdateDeviceStatus=(l,t)=>{const c=DeviceTypeMap[l];Number.isInteger(c)&&onMounted(()=>{t(c),window.addEventListener("resize",()=>t(c),!1),window.addEventListener("orientationchange",()=>t(c),!1)})},_sfc_main$D={},_hoisted_1$y={class:"theme-default-content"};function _sfc_render$1(l,t){const c=resolveComponent("Content");return openBlock(),createElementBlock("div",_hoisted_1$y,[createVNode(c)])}const HomeContent=_export_sfc(_sfc_main$D,[["render",_sfc_render$1],["__file","HomeContent.vue"]]),_hoisted_1$x={key:0,class:"features"},_sfc_main$C=defineComponent({__name:"HomeFeatures",setup(l){const t=usePageFrontmatter(),c=computed(()=>isArray$1(t.value.features)?t.value.features:[]);return(s,d)=>c.value.length?(openBlock(),createElementBlock("div",_hoisted_1$x,[(openBlock(!0),createElementBlock(Fragment,null,renderList(c.value,Z=>(openBlock(),createElementBlock("div",{key:Z.title,class:"feature"},[createBaseVNode("h2",null,toDisplayString(Z.title),1),createBaseVNode("p",null,toDisplayString(Z.details),1)]))),128))])):createCommentVNode("v-if",!0)}}),HomeFeatures=_export_sfc(_sfc_main$C,[["__file","HomeFeatures.vue"]]),_hoisted_1$w=["innerHTML"],_hoisted_2$k=["textContent"],_sfc_main$B=defineComponent({__name:"HomeFooter",setup(l){const t=usePageFrontmatter(),c=computed(()=>t.value.footer),s=computed(()=>t.value.footerHtml);return(d,Z)=>c.value?(openBlock(),createElementBlock(Fragment,{key:0},[createCommentVNode(" eslint-disable-next-line vue/no-v-html "),s.value?(openBlock(),createElementBlock("div",{key:0,class:"footer",innerHTML:c.value},null,8,_hoisted_1$w)):(openBlock(),createElementBlock("div",{key:1,class:"footer",textContent:toDisplayString(c.value)},null,8,_hoisted_2$k))],64)):createCommentVNode("v-if",!0)}}),HomeFooter=_export_sfc(_sfc_main$B,[["__file","HomeFooter.vue"]]),_hoisted_1$v=["href","rel","target","aria-label"],__default__=defineComponent({inheritAttrs:!1}),_sfc_main$A=defineComponent({...__default__,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(l){const t=l,c=useRoute(),s=useSiteData(),{item:d}=toRefs(t),Z=computed(()=>isLinkHttp(d.value.link)),i=computed(()=>isLinkMailto(d.value.link)||isLinkTel(d.value.link)),o=computed(()=>{if(!i.value){if(d.value.target)return d.value.target;if(Z.value)return"_blank"}}),W=computed(()=>o.value==="_blank"),G=computed(()=>!Z.value&&!i.value&&!W.value),u=computed(()=>{if(!i.value){if(d.value.rel)return d.value.rel;if(W.value)return"noopener noreferrer"}}),X=computed(()=>d.value.ariaLabel||d.value.text),z=computed(()=>{const k=Object.keys(s.value.locales);return k.length?!k.some(L=>L===d.value.link):d.value.link!=="/"}),R=computed(()=>z.value?c.path.startsWith(d.value.link):!1),S=computed(()=>G.value?d.value.activeMatch?new RegExp(d.value.activeMatch).test(c.path):R.value:!1);return(k,L)=>{const x=resolveComponent("RouterLink"),j=resolveComponent("AutoLinkExternalIcon");return G.value?(openBlock(),createBlock(x,mergeProps({key:0,class:{"router-link-active":S.value},to:unref(d).link,"aria-label":X.value},k.$attrs),{default:withCtx(()=>[renderSlot(k.$slots,"before"),createTextVNode(" "+toDisplayString(unref(d).text)+" ",1),renderSlot(k.$slots,"after")]),_:3},16,["class","to","aria-label"])):(openBlock(),createElementBlock("a",mergeProps({key:1,class:"external-link",href:unref(d).link,rel:u.value,target:o.value,"aria-label":X.value},k.$attrs),[renderSlot(k.$slots,"before"),createTextVNode(" "+toDisplayString(unref(d).text)+" ",1),W.value?(openBlock(),createBlock(j,{key:0})):createCommentVNode("v-if",!0),renderSlot(k.$slots,"after")],16,_hoisted_1$v))}}}),AutoLink=_export_sfc(_sfc_main$A,[["__file","AutoLink.vue"]]),_hoisted_1$u={class:"hero"},_hoisted_2$j={key:0,id:"main-title"},_hoisted_3$e={key:1,class:"description"},_hoisted_4$8={key:2,class:"actions"},_sfc_main$z=defineComponent({__name:"HomeHero",setup(l){const t=usePageFrontmatter(),c=useSiteLocaleData(),s=useDarkMode(),d=computed(()=>s.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),Z=computed(()=>t.value.heroAlt||o.value||"hero"),i=computed(()=>t.value.heroHeight||280),o=computed(()=>t.value.heroText===null?null:t.value.heroText||c.value.title||"Hello"),W=computed(()=>t.value.tagline===null?null:t.value.tagline||c.value.description||"Welcome to your VuePress site"),G=computed(()=>isArray$1(t.value.actions)?t.value.actions.map(({text:X,link:z,type:R="primary"})=>({text:X,link:z,type:R})):[]),u=()=>{if(!d.value)return null;const X=h("img",{src:withBase(d.value),alt:Z.value,height:i.value});return t.value.heroImageDark===void 0?X:h(ClientOnly,()=>X)};return(X,z)=>(openBlock(),createElementBlock("header",_hoisted_1$u,[createVNode(u),o.value?(openBlock(),createElementBlock("h1",_hoisted_2$j,toDisplayString(o.value),1)):createCommentVNode("v-if",!0),W.value?(openBlock(),createElementBlock("p",_hoisted_3$e,toDisplayString(W.value),1)):createCommentVNode("v-if",!0),G.value.length?(openBlock(),createElementBlock("p",_hoisted_4$8,[(openBlock(!0),createElementBlock(Fragment,null,renderList(G.value,R=>(openBlock(),createBlock(AutoLink,{key:R.text,class:normalizeClass(["action-button",[R.type]]),item:R},null,8,["class","item"]))),128))])):createCommentVNode("v-if",!0)]))}}),HomeHero=_export_sfc(_sfc_main$z,[["__file","HomeHero.vue"]]),_hoisted_1$t={class:"home"},_sfc_main$y=defineComponent({__name:"Home",setup(l){return(t,c)=>(openBlock(),createElementBlock("main",_hoisted_1$t,[createVNode(HomeHero),createVNode(HomeFeatures),createVNode(HomeContent),createVNode(HomeFooter)]))}}),Home=_export_sfc(_sfc_main$y,[["__file","Home.vue"]]),_sfc_main$x=defineComponent({__name:"NavbarBrand",setup(l){const t=useRouteLocale(),c=useSiteLocaleData(),s=useThemeLocaleData(),d=useDarkMode(),Z=computed(()=>s.value.home||t.value),i=computed(()=>c.value.title),o=computed(()=>d.value&&s.value.logoDark!==void 0?s.value.logoDark:s.value.logo),W=()=>{if(!o.value)return null;const G=h("img",{class:"logo",src:withBase(o.value),alt:i.value});return s.value.logoDark===void 0?G:h(ClientOnly,()=>G)};return(G,u)=>{const X=resolveComponent("RouterLink");return openBlock(),createBlock(X,{to:Z.value},{default:withCtx(()=>[createVNode(W),i.value?(openBlock(),createElementBlock("span",{key:0,class:normalizeClass(["site-name",{"can-hide":o.value}])},toDisplayString(i.value),3)):createCommentVNode("v-if",!0)]),_:1},8,["to"])}}}),NavbarBrand=_export_sfc(_sfc_main$x,[["__file","NavbarBrand.vue"]]),_sfc_main$w=defineComponent({__name:"DropdownTransition",setup(l){const t=s=>{s.style.height=s.scrollHeight+"px"},c=s=>{s.style.height=""};return(s,d)=>(openBlock(),createBlock(Transition,{name:"dropdown",onEnter:t,onAfterEnter:c,onBeforeLeave:t},{default:withCtx(()=>[renderSlot(s.$slots,"default")]),_:3}))}}),DropdownTransition=_export_sfc(_sfc_main$w,[["__file","DropdownTransition.vue"]]),_hoisted_1$s=["aria-label"],_hoisted_2$i={class:"title"},_hoisted_3$d=createBaseVNode("span",{class:"arrow down"},null,-1),_hoisted_4$7=["aria-label"],_hoisted_5$4={class:"title"},_hoisted_6$2={class:"navbar-dropdown"},_hoisted_7$2={class:"navbar-dropdown-subtitle"},_hoisted_8$2={key:1},_hoisted_9$2={class:"navbar-dropdown-subitem-wrapper"},_sfc_main$v=defineComponent({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(l){const t=l,{item:c}=toRefs(t),s=computed(()=>c.value.ariaLabel||c.value.text),d=ref(!1),Z=useRoute();watch(()=>Z.path,()=>{d.value=!1});const i=W=>{W.detail===0?d.value=!d.value:d.value=!1},o=(W,G)=>G[G.length-1]===W;return(W,G)=>(openBlock(),createElementBlock("div",{class:normalizeClass(["navbar-dropdown-wrapper",{open:d.value}])},[createBaseVNode("button",{class:"navbar-dropdown-title",type:"button","aria-label":s.value,onClick:i},[createBaseVNode("span",_hoisted_2$i,toDisplayString(unref(c).text),1),_hoisted_3$d],8,_hoisted_1$s),createBaseVNode("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":s.value,onClick:G[0]||(G[0]=u=>d.value=!d.value)},[createBaseVNode("span",_hoisted_5$4,toDisplayString(unref(c).text),1),createBaseVNode("span",{class:normalizeClass(["arrow",d.value?"down":"right"])},null,2)],8,_hoisted_4$7),createVNode(DropdownTransition,null,{default:withCtx(()=>[withDirectives(createBaseVNode("ul",_hoisted_6$2,[(openBlock(!0),createElementBlock(Fragment,null,renderList(unref(c).children,u=>(openBlock(),createElementBlock("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode("h4",_hoisted_7$2,[u.link?(openBlock(),createBlock(AutoLink,{key:0,item:u,onFocusout:X=>o(u,unref(c).children)&&u.children.length===0&&(d.value=!1)},null,8,["item","onFocusout"])):(openBlock(),createElementBlock("span",_hoisted_8$2,toDisplayString(u.text),1))]),createBaseVNode("ul",_hoisted_9$2,[(openBlock(!0),createElementBlock(Fragment,null,renderList(u.children,X=>(openBlock(),createElementBlock("li",{key:X.link,class:"navbar-dropdown-subitem"},[createVNode(AutoLink,{item:X,onFocusout:z=>o(X,u.children)&&o(u,unref(c).children)&&(d.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(openBlock(),createBlock(AutoLink,{key:1,item:u,onFocusout:X=>o(u,unref(c).children)&&(d.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[vShow,d.value]])]),_:1})],2))}}),NavbarDropdown=_export_sfc(_sfc_main$v,[["__file","NavbarDropdown.vue"]]),normalizePath=l=>decodeURI(l).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),isActiveLink=(l,t)=>{if(t.hash===l)return!0;const c=normalizePath(t.path),s=normalizePath(l);return c===s},isActiveSidebarItem=(l,t)=>l.link&&isActiveLink(l.link,t)?!0:l.children?l.children.some(c=>isActiveSidebarItem(c,t)):!1,resolveRepoType=l=>!isLinkHttp(l)||/github\.com/.test(l)?"GitHub":/bitbucket\.org/.test(l)?"Bitbucket":/gitlab\.com/.test(l)?"GitLab":/gitee\.com/.test(l)?"Gitee":null,editLinkPatterns={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},resolveEditLinkPatterns=({docsRepo:l,editLinkPattern:t})=>{if(t)return t;const c=resolveRepoType(l);return c!==null?editLinkPatterns[c]:null},resolveEditLink=({docsRepo:l,docsBranch:t,docsDir:c,filePathRelative:s,editLinkPattern:d})=>{if(!s)return null;const Z=resolveEditLinkPatterns({docsRepo:l,editLinkPattern:d});return Z?Z.replace(/:repo/,isLinkHttp(l)?l:`https://github.com/${l}`).replace(/:branch/,t).replace(/:path/,removeLeadingSlash(`${removeEndingSlash(c)}/${s}`)):null},_hoisted_1$r={key:0,class:"navbar-items"},_sfc_main$u=defineComponent({__name:"NavbarItems",setup(l){const t=()=>{const u=useRouter(),X=useRouteLocale(),z=useSiteLocaleData(),R=useThemeLocaleData();return computed(()=>{const S=Object.keys(z.value.locales);if(S.length<2)return[];const k=u.currentRoute.value.path,L=u.currentRoute.value.fullPath;return[{text:R.value.selectLanguageText??"unknown language",ariaLabel:R.value.selectLanguageAriaLabel??R.value.selectLanguageText??"unknown language",children:S.map(j=>{var m,D;const Q=((m=z.value.locales)==null?void 0:m[j])??{},J=((D=R.value.locales)==null?void 0:D[j])??{},M=`${Q.lang}`,y=J.selectLanguageName??M;let Y;if(M===z.value.lang)Y=L;else{const H=k.replace(X.value,j);u.getRoutes().some(V=>V.path===H)?Y=L.replace(k,H):Y=J.home??j}return{text:y,link:Y}})}]})},c=()=>{const u=useThemeLocaleData(),X=computed(()=>u.value.repo),z=computed(()=>X.value?resolveRepoType(X.value):null),R=computed(()=>X.value&&!isLinkHttp(X.value)?`https://github.com/${X.value}`:X.value),S=computed(()=>R.value?u.value.repoLabel?u.value.repoLabel:z.value===null?"Source":z.value:null);return computed(()=>!R.value||!S.value?[]:[{text:S.value,link:R.value}])},s=u=>isString(u)?useNavLink(u):u.children?{...u,children:u.children.map(s)}:u,d=()=>{const u=useThemeLocaleData();return computed(()=>(u.value.navbar||[]).map(s))},Z=ref(!1),i=d(),o=t(),W=c(),G=computed(()=>[...i.value,...o.value,...W.value]);return useUpdateDeviceStatus(DeviceType.MOBILE,u=>{window.innerWidthG.value.length?(openBlock(),createElementBlock("nav",_hoisted_1$r,[(openBlock(!0),createElementBlock(Fragment,null,renderList(G.value,z=>(openBlock(),createElementBlock("div",{key:z.text,class:"navbar-item"},[z.children?(openBlock(),createBlock(NavbarDropdown,{key:0,item:z,class:normalizeClass(Z.value?"mobile":"")},null,8,["item","class"])):(openBlock(),createBlock(AutoLink,{key:1,item:z},null,8,["item"]))]))),128))])):createCommentVNode("v-if",!0)}}),NavbarItems=_export_sfc(_sfc_main$u,[["__file","NavbarItems.vue"]]),_hoisted_1$q=["title"],_hoisted_2$h={class:"icon",focusable:"false",viewBox:"0 0 32 32"},_hoisted_3$c=createStaticVNode('',9),_hoisted_12=[_hoisted_3$c],_hoisted_13={class:"icon",focusable:"false",viewBox:"0 0 32 32"},_hoisted_14=createBaseVNode("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),_hoisted_15=[_hoisted_14],_sfc_main$t=defineComponent({__name:"ToggleColorModeButton",setup(l){const t=useThemeLocaleData(),c=useDarkMode(),s=()=>{c.value=!c.value};return(d,Z)=>(openBlock(),createElementBlock("button",{class:"toggle-color-mode-button",title:unref(t).toggleColorMode,onClick:s},[withDirectives((openBlock(),createElementBlock("svg",_hoisted_2$h,_hoisted_12,512)),[[vShow,!unref(c)]]),withDirectives((openBlock(),createElementBlock("svg",_hoisted_13,_hoisted_15,512)),[[vShow,unref(c)]])],8,_hoisted_1$q))}}),ToggleColorModeButton=_export_sfc(_sfc_main$t,[["__file","ToggleColorModeButton.vue"]]),_hoisted_1$p=["title"],_hoisted_2$g=createBaseVNode("div",{class:"icon","aria-hidden":"true"},[createBaseVNode("span"),createBaseVNode("span"),createBaseVNode("span")],-1),_hoisted_3$b=[_hoisted_2$g],_sfc_main$s=defineComponent({__name:"ToggleSidebarButton",emits:["toggle"],setup(l){const t=useThemeLocaleData();return(c,s)=>(openBlock(),createElementBlock("div",{class:"toggle-sidebar-button",title:unref(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:s[0]||(s[0]=d=>c.$emit("toggle"))},_hoisted_3$b,8,_hoisted_1$p))}}),ToggleSidebarButton=_export_sfc(_sfc_main$s,[["__file","ToggleSidebarButton.vue"]]),_sfc_main$r=defineComponent({__name:"Navbar",emits:["toggle-sidebar"],setup(l){const t=useThemeLocaleData(),c=ref(null),s=ref(null),d=ref(0),Z=computed(()=>d.value?{maxWidth:d.value+"px"}:{});useUpdateDeviceStatus(DeviceType.MOBILE,o=>{var G;const W=i(c.value,"paddingLeft")+i(c.value,"paddingRight");window.innerWidth{const G=resolveComponent("NavbarSearch");return openBlock(),createElementBlock("header",{ref_key:"navbar",ref:c,class:"navbar"},[createVNode(ToggleSidebarButton,{onToggle:W[0]||(W[0]=u=>o.$emit("toggle-sidebar"))}),createBaseVNode("span",{ref_key:"navbarBrand",ref:s},[createVNode(NavbarBrand)],512),createBaseVNode("div",{class:"navbar-items-wrapper",style:normalizeStyle(Z.value)},[renderSlot(o.$slots,"before"),createVNode(NavbarItems,{class:"can-hide"}),renderSlot(o.$slots,"after"),unref(t).colorModeSwitch?(openBlock(),createBlock(ToggleColorModeButton,{key:0})):createCommentVNode("v-if",!0),createVNode(G)],4)],512)}}}),Navbar=_export_sfc(_sfc_main$r,[["__file","Navbar.vue"]]),_hoisted_1$o={class:"page-meta"},_hoisted_2$f={key:0,class:"meta-item edit-link"},_hoisted_3$a={key:1,class:"meta-item last-updated"},_hoisted_4$6={class:"meta-item-label"},_hoisted_5$3={class:"meta-item-info"},_hoisted_6$1={key:2,class:"meta-item contributors"},_hoisted_7$1={class:"meta-item-label"},_hoisted_8$1={class:"meta-item-info"},_hoisted_9$1=["title"],_sfc_main$q=defineComponent({__name:"PageMeta",setup(l){const t=()=>{const W=useThemeLocaleData(),G=usePageData(),u=usePageFrontmatter();return computed(()=>{if(!(u.value.editLink??W.value.editLink??!0))return null;const{repo:z,docsRepo:R=z,docsBranch:S="main",docsDir:k="",editLinkText:L}=W.value;if(!R)return null;const x=resolveEditLink({docsRepo:R,docsBranch:S,docsDir:k,filePathRelative:G.value.filePathRelative,editLinkPattern:u.value.editLinkPattern??W.value.editLinkPattern});return x?{text:L??"Edit this page",link:x}:null})},c=()=>{const W=useThemeLocaleData(),G=usePageData(),u=usePageFrontmatter();return computed(()=>{var R,S;return!(u.value.lastUpdated??W.value.lastUpdated??!0)||!((R=G.value.git)!=null&&R.updatedTime)?null:new Date((S=G.value.git)==null?void 0:S.updatedTime).toLocaleString()})},s=()=>{const W=useThemeLocaleData(),G=usePageData(),u=usePageFrontmatter();return computed(()=>{var z;return u.value.contributors??W.value.contributors??!0?((z=G.value.git)==null?void 0:z.contributors)??null:null})},d=useThemeLocaleData(),Z=t(),i=c(),o=s();return(W,G)=>{const u=resolveComponent("ClientOnly");return openBlock(),createElementBlock("footer",_hoisted_1$o,[unref(Z)?(openBlock(),createElementBlock("div",_hoisted_2$f,[createVNode(AutoLink,{class:"meta-item-label",item:unref(Z)},null,8,["item"])])):createCommentVNode("v-if",!0),unref(i)?(openBlock(),createElementBlock("div",_hoisted_3$a,[createBaseVNode("span",_hoisted_4$6,toDisplayString(unref(d).lastUpdatedText)+": ",1),createVNode(u,null,{default:withCtx(()=>[createBaseVNode("span",_hoisted_5$3,toDisplayString(unref(i)),1)]),_:1})])):createCommentVNode("v-if",!0),unref(o)&&unref(o).length?(openBlock(),createElementBlock("div",_hoisted_6$1,[createBaseVNode("span",_hoisted_7$1,toDisplayString(unref(d).contributorsText)+": ",1),createBaseVNode("span",_hoisted_8$1,[(openBlock(!0),createElementBlock(Fragment,null,renderList(unref(o),(X,z)=>(openBlock(),createElementBlock(Fragment,{key:z},[createBaseVNode("span",{class:"contributor",title:`email: ${X.email}`},toDisplayString(X.name),9,_hoisted_9$1),z!==unref(o).length-1?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(", ")],64)):createCommentVNode("v-if",!0)],64))),128))])])):createCommentVNode("v-if",!0)])}}}),PageMeta=_export_sfc(_sfc_main$q,[["__file","PageMeta.vue"]]),_hoisted_1$n={key:0,class:"page-nav"},_hoisted_2$e={class:"inner"},_hoisted_3$9={key:0,class:"prev"},_hoisted_4$5={key:1,class:"next"},_sfc_main$p=defineComponent({__name:"PageNav",setup(l){const t=W=>W===!1?null:isString(W)?useNavLink(W):isPlainObject(W)?W:!1,c=(W,G,u)=>{const X=W.findIndex(z=>z.link===G);if(X!==-1){const z=W[X+u];return z!=null&&z.link?z:null}for(const z of W)if(z.children){const R=c(z.children,G,u);if(R)return R}return null},s=usePageFrontmatter(),d=useSidebarItems(),Z=useRoute(),i=computed(()=>{const W=t(s.value.prev);return W!==!1?W:c(d.value,Z.path,-1)}),o=computed(()=>{const W=t(s.value.next);return W!==!1?W:c(d.value,Z.path,1)});return(W,G)=>i.value||o.value?(openBlock(),createElementBlock("nav",_hoisted_1$n,[createBaseVNode("p",_hoisted_2$e,[i.value?(openBlock(),createElementBlock("span",_hoisted_3$9,[createVNode(AutoLink,{item:i.value},null,8,["item"])])):createCommentVNode("v-if",!0),o.value?(openBlock(),createElementBlock("span",_hoisted_4$5,[createVNode(AutoLink,{item:o.value},null,8,["item"])])):createCommentVNode("v-if",!0)])])):createCommentVNode("v-if",!0)}}),PageNav=_export_sfc(_sfc_main$p,[["__file","PageNav.vue"]]),_hoisted_1$m={class:"page"},_hoisted_2$d={class:"theme-default-content"},_sfc_main$o=defineComponent({__name:"Page",setup(l){return(t,c)=>{const s=resolveComponent("Content");return openBlock(),createElementBlock("main",_hoisted_1$m,[renderSlot(t.$slots,"top"),createBaseVNode("div",_hoisted_2$d,[renderSlot(t.$slots,"content-top"),createVNode(s),renderSlot(t.$slots,"content-bottom")]),createVNode(PageMeta),createVNode(PageNav),renderSlot(t.$slots,"bottom")])}}}),Page=_export_sfc(_sfc_main$o,[["__file","Page.vue"]]),_hoisted_1$l=["onKeydown"],_hoisted_2$c={class:"sidebar-item-children"},_sfc_main$n=defineComponent({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(l){const t=l,{item:c,depth:s}=toRefs(t),d=useRoute(),Z=useRouter(),i=computed(()=>isActiveSidebarItem(c.value,d)),o=computed(()=>({"sidebar-item":!0,"sidebar-heading":s.value===0,active:i.value,collapsible:c.value.collapsible})),W=computed(()=>c.value.collapsible?i.value:!0),[G,u]=useToggle(W.value),X=R=>{c.value.collapsible&&(R.preventDefault(),u())},z=Z.afterEach(R=>{nextTick(()=>{G.value=W.value})});return onBeforeUnmount(()=>{z()}),(R,S)=>{var L;const k=resolveComponent("SidebarItem",!0);return openBlock(),createElementBlock("li",null,[unref(c).link?(openBlock(),createBlock(AutoLink,{key:0,class:normalizeClass(o.value),item:unref(c)},null,8,["class","item"])):(openBlock(),createElementBlock("p",{key:1,tabindex:"0",class:normalizeClass(o.value),onClick:X,onKeydown:withKeys(X,["enter"])},[createTextVNode(toDisplayString(unref(c).text)+" ",1),unref(c).collapsible?(openBlock(),createElementBlock("span",{key:0,class:normalizeClass(["arrow",unref(G)?"down":"right"])},null,2)):createCommentVNode("v-if",!0)],42,_hoisted_1$l)),(L=unref(c).children)!=null&&L.length?(openBlock(),createBlock(DropdownTransition,{key:2},{default:withCtx(()=>[withDirectives(createBaseVNode("ul",_hoisted_2$c,[(openBlock(!0),createElementBlock(Fragment,null,renderList(unref(c).children,x=>(openBlock(),createBlock(k,{key:`${unref(s)}${x.text}${x.link}`,item:x,depth:unref(s)+1},null,8,["item","depth"]))),128))],512),[[vShow,unref(G)]])]),_:1})):createCommentVNode("v-if",!0)])}}}),SidebarItem=_export_sfc(_sfc_main$n,[["__file","SidebarItem.vue"]]),_hoisted_1$k={key:0,class:"sidebar-items"},_sfc_main$m=defineComponent({__name:"SidebarItems",setup(l){const t=useRoute(),c=useSidebarItems();return onMounted(()=>{watch(()=>t.hash,s=>{const d=document.querySelector(".sidebar");if(!d)return;const Z=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${s}"]`);if(!Z)return;const{top:i,height:o}=d.getBoundingClientRect(),{top:W,height:G}=Z.getBoundingClientRect();Wi+o&&Z.scrollIntoView(!1)})}),(s,d)=>unref(c).length?(openBlock(),createElementBlock("ul",_hoisted_1$k,[(openBlock(!0),createElementBlock(Fragment,null,renderList(unref(c),Z=>(openBlock(),createBlock(SidebarItem,{key:`${Z.text}${Z.link}`,item:Z},null,8,["item"]))),128))])):createCommentVNode("v-if",!0)}}),SidebarItems=_export_sfc(_sfc_main$m,[["__file","SidebarItems.vue"]]),_hoisted_1$j={class:"sidebar"},_sfc_main$l=defineComponent({__name:"Sidebar",setup(l){return(t,c)=>(openBlock(),createElementBlock("aside",_hoisted_1$j,[createVNode(NavbarItems),renderSlot(t.$slots,"top"),createVNode(SidebarItems),renderSlot(t.$slots,"bottom")]))}}),Sidebar=_export_sfc(_sfc_main$l,[["__file","Sidebar.vue"]]),_sfc_main$k=defineComponent({__name:"Layout",setup(l){const t=usePageData(),c=usePageFrontmatter(),s=useThemeLocaleData(),d=computed(()=>c.value.navbar!==!1&&s.value.navbar!==!1),Z=useSidebarItems(),i=ref(!1),o=L=>{i.value=typeof L=="boolean"?L:!i.value},W={x:0,y:0},G=L=>{W.x=L.changedTouches[0].clientX,W.y=L.changedTouches[0].clientY},u=L=>{const x=L.changedTouches[0].clientX-W.x,j=L.changedTouches[0].clientY-W.y;Math.abs(x)>Math.abs(j)&&Math.abs(x)>40&&(x>0&&W.x<=80?o(!0):o(!1))},X=computed(()=>[{"no-navbar":!d.value,"no-sidebar":!Z.value.length,"sidebar-open":i.value},c.value.pageClass]);let z;onMounted(()=>{z=useRouter().afterEach(()=>{o(!1)})}),onUnmounted(()=>{z()});const R=useScrollPromise(),S=R.resolve,k=R.pending;return(L,x)=>(openBlock(),createElementBlock("div",{class:normalizeClass(["theme-container",X.value]),onTouchstart:G,onTouchend:u},[renderSlot(L.$slots,"navbar",{},()=>[d.value?(openBlock(),createBlock(Navbar,{key:0,onToggleSidebar:o},{before:withCtx(()=>[renderSlot(L.$slots,"navbar-before")]),after:withCtx(()=>[renderSlot(L.$slots,"navbar-after")]),_:3})):createCommentVNode("v-if",!0)]),createBaseVNode("div",{class:"sidebar-mask",onClick:x[0]||(x[0]=j=>o(!1))}),renderSlot(L.$slots,"sidebar",{},()=>[createVNode(Sidebar,null,{top:withCtx(()=>[renderSlot(L.$slots,"sidebar-top")]),bottom:withCtx(()=>[renderSlot(L.$slots,"sidebar-bottom")]),_:3})]),renderSlot(L.$slots,"page",{},()=>[unref(c).home?(openBlock(),createBlock(Home,{key:0})):(openBlock(),createBlock(Transition,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:unref(S),onBeforeLeave:unref(k)},{default:withCtx(()=>[(openBlock(),createBlock(Page,{key:unref(t).path},{top:withCtx(()=>[renderSlot(L.$slots,"page-top")]),"content-top":withCtx(()=>[renderSlot(L.$slots,"page-content-top")]),"content-bottom":withCtx(()=>[renderSlot(L.$slots,"page-content-bottom")]),bottom:withCtx(()=>[renderSlot(L.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Layout=_export_sfc(_sfc_main$k,[["__file","Layout.vue"]]),_hoisted_1$i={class:"theme-container"},_hoisted_2$b={class:"page"},_hoisted_3$8={class:"theme-default-content"},_hoisted_4$4=createBaseVNode("h1",null,"404",-1),_sfc_main$j=defineComponent({__name:"NotFound",setup(l){const t=useRouteLocale(),c=useThemeLocaleData(),s=c.value.notFound??["Not Found"],d=()=>s[Math.floor(Math.random()*s.length)],Z=c.value.home??t.value,i=c.value.backToHome??"Back to home";return(o,W)=>{const G=resolveComponent("RouterLink");return openBlock(),createElementBlock("div",_hoisted_1$i,[createBaseVNode("main",_hoisted_2$b,[createBaseVNode("div",_hoisted_3$8,[_hoisted_4$4,createBaseVNode("blockquote",null,toDisplayString(d()),1),createVNode(G,{to:unref(Z)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(i)),1)]),_:1},8,["to"])])])])}}}),NotFound=_export_sfc(_sfc_main$j,[["__file","NotFound.vue"]]),index$1="",clientConfig6=defineClientConfig({enhance({app:l,router:t}){l.component("Badge",Badge),l.component("CodeGroup",CodeGroup),l.component("CodeGroupItem",CodeGroupItem),l.component("AutoLinkExternalIcon",()=>{const s=l.component("ExternalLinkIcon");return s?h(s):null}),l.component("NavbarSearch",()=>{const s=l.component("Docsearch")||l.component("SearchBox");return s?h(s):null});const c=t.options.scrollBehavior;t.options.scrollBehavior=async(...s)=>(await useScrollPromise().wait(),c(...s))},setup(){setupDarkMode(),setupSidebarItems()},layouts:{Layout,NotFound}}),isFocusingTextControl=l=>l instanceof Element?document.activeElement===l&&(["TEXTAREA","SELECT","INPUT"].includes(l.tagName)||l.hasAttribute("contenteditable")):!1,isKeyMatched=(l,t)=>t.some(c=>{if(isString(c))return c===l.key;const{key:s,ctrl:d=!1,shift:Z=!1,alt:i=!1}=c;return s===l.key&&d===l.ctrlKey&&Z===l.shiftKey&&i===l.altKey}),nonASCIIRegExp=/[^\x00-\x7F]/,splitWords=l=>l.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),escapeRegExp=l=>l.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),isQueryMatched=(l,t)=>{const c=t.join(" "),s=splitWords(l);if(nonASCIIRegExp.test(l))return s.some(i=>c.toLowerCase().indexOf(i)>-1);const d=l.endsWith(" ");return new RegExp(s.map((i,o)=>s.length===o+1&&!d?`(?=.*\\b${escapeRegExp(i)})`:`(?=.*\\b${escapeRegExp(i)}\\b)`).join("")+".+","gi").test(c)},useHotKeys=({input:l,hotKeys:t})=>{if(t.value.length===0)return;const c=s=>{l.value&&isKeyMatched(s,t.value)&&!isFocusingTextControl(s.target)&&(s.preventDefault(),l.value.focus())};onMounted(()=>{document.addEventListener("keydown",c)}),onBeforeUnmount(()=>{document.removeEventListener("keydown",c)})},searchIndex$1=[{title:"Home",headers:[],path:"/",pathLocale:"/",extraFields:[]},{title:"Examples List",headers:[],path:"/examples/",pathLocale:"/",extraFields:[]},{title:"Composables",headers:[{level:2,title:"usePDF",slug:"usepdf",link:"#usepdf",children:[{level:3,title:"Parameters",slug:"parameters",link:"#parameters",children:[]},{level:3,title:"Properties",slug:"properties",link:"#properties",children:[]},{level:3,title:"Document API",slug:"document-api",link:"#document-api",children:[]}]},{level:2,title:"Custom",slug:"custom",link:"#custom",children:[]}],path:"/guide/composables.html",pathLocale:"/",extraFields:[]},{title:"Events",headers:[{level:2,title:"loaded",slug:"loaded",link:"#loaded",children:[]},{level:2,title:"highlight",slug:"highlight",link:"#highlight",children:[]},{level:2,title:"annotation",slug:"annotation",link:"#annotation",children:[{level:3,title:"internal-link",slug:"internal-link",link:"#internal-link",children:[]},{level:3,title:"link",slug:"link",link:"#link",children:[]},{level:3,title:"file-attachment",slug:"file-attachment",link:"#file-attachment",children:[]},{level:3,title:"form-text",slug:"form-text",link:"#form-text",children:[]},{level:3,title:"form-select",slug:"form-select",link:"#form-select",children:[]},{level:3,title:"form-checkbox",slug:"form-checkbox",link:"#form-checkbox",children:[]},{level:3,title:"form-radio",slug:"form-radio",link:"#form-radio",children:[]},{level:3,title:"form-button",slug:"form-button",link:"#form-button",children:[]}]}],path:"/guide/events.html",pathLocale:"/",extraFields:[]},{title:"Introduction",headers:[{level:2,title:"Installation",slug:"installation",link:"#installation",children:[]},{level:2,title:"Basic Usage",slug:"basic-usage",link:"#basic-usage",children:[]},{level:2,title:"Working With Layers",slug:"working-with-layers",link:"#working-with-layers",children:[{level:3,title:"Text and Annotations",slug:"text-and-annotations",link:"#text-and-annotations",children:[]},{level:3,title:"XFA Forms",slug:"xfa-forms",link:"#xfa-forms",children:[]}]},{level:2,title:"Server-Side Rendering",slug:"server-side-rendering",link:"#server-side-rendering",children:[]},{level:2,title:"Contributing",slug:"contributing",link:"#contributing",children:[]}],path:"/guide/introduction.html",pathLocale:"/",extraFields:[]},{title:"Methods",headers:[{level:2,title:"reload",slug:"reload",link:"#reload",children:[]},{level:2,title:"cancel",slug:"cancel",link:"#cancel",children:[]}],path:"/guide/methods.html",pathLocale:"/",extraFields:[]},{title:"Props",headers:[{level:2,title:"pdf",slug:"pdf",link:"#pdf",children:[]},{level:2,title:"page",slug:"page",link:"#page",children:[]},{level:2,title:"scale",slug:"scale",link:"#scale",children:[]},{level:2,title:"fit-parent",slug:"fit-parent",link:"#fit-parent",children:[]},{level:2,title:"width",slug:"width",link:"#width",children:[]},{level:2,title:"height",slug:"height",link:"#height",children:[]},{level:2,title:"rotation",slug:"rotation",link:"#rotation",children:[]},{level:2,title:"text-layer",slug:"text-layer",link:"#text-layer",children:[]},{level:2,title:"highlight-text",slug:"highlight-text",link:"#highlight-text",children:[]},{level:2,title:"highlight-options",slug:"highlight-options",link:"#highlight-options",children:[]},{level:2,title:"annotation-layer",slug:"annotation-layer",link:"#annotation-layer",children:[]},{level:2,title:"watermark-text",slug:"watermark-text",link:"#watermark-text",children:[]},{level:2,title:"watermark-options",slug:"watermark-options",link:"#watermark-options",children:[]},{level:2,title:"image-resources-path",slug:"image-resources-path",link:"#image-resources-path",children:[]},{level:2,title:"hide-forms",slug:"hide-forms",link:"#hide-forms",children:[]},{level:2,title:"annotations-filter",slug:"annotations-filter",link:"#annotations-filter",children:[]},{level:2,title:"annotations-map",slug:"annotations-map",link:"#annotations-map",children:[]}],path:"/guide/props.html",pathLocale:"/",extraFields:[]},{title:"Slots",headers:[{level:2,title:"loading: default",slug:"loading-default",link:"#loading-default",children:[]}],path:"/guide/slots.html",pathLocale:"/",extraFields:[]},{title:"File attachment",headers:[],path:"/examples/annotation_events/annotation_attachment.html",pathLocale:"/",extraFields:[]},{title:"Forms fields",headers:[],path:"/examples/annotation_events/annotation_forms.html",pathLocale:"/",extraFields:[]},{title:"Links",headers:[],path:"/examples/annotation_events/annotation_links.html",pathLocale:"/",extraFields:[]},{title:"Annotations Filter",headers:[],path:"/examples/advanced/annotation_filter.html",pathLocale:"/",extraFields:[]},{title:"Fit parent",headers:[],path:"/examples/advanced/fit_parent.html",pathLocale:"/",extraFields:[]},{title:"Highlight Text",headers:[],path:"/examples/advanced/highlight_text.html",pathLocale:"/",extraFields:[]},{title:"Multiples PDF",headers:[],path:"/examples/advanced/multiple_pdf.html",pathLocale:"/",extraFields:[]},{title:"Table of content",headers:[],path:"/examples/advanced/toc.html",pathLocale:"/",extraFields:[]},{title:"Watermark Text",headers:[],path:"/examples/advanced/watermark.html",pathLocale:"/",extraFields:[]},{title:"All pages",headers:[],path:"/examples/basic/all_pages.html",pathLocale:"/",extraFields:[]},{title:"Annotation Layer",headers:[],path:"/examples/basic/annotation_layer.html",pathLocale:"/",extraFields:[]},{title:"One page",headers:[],path:"/examples/basic/one_page.html",pathLocale:"/",extraFields:[]},{title:"Rotation",headers:[],path:"/examples/basic/rotation.html",pathLocale:"/",extraFields:[]},{title:"Scale",headers:[],path:"/examples/basic/scale.html",pathLocale:"/",extraFields:[]},{title:"Text Layer",headers:[],path:"/examples/basic/text_layer.html",pathLocale:"/",extraFields:[]},{title:"XFA Forms",headers:[],path:"/examples/basic/xfa_layer.html",pathLocale:"/",extraFields:[]},{title:"Highlight Event",headers:[],path:"/examples/text_events/text_highlight.html",pathLocale:"/",extraFields:[]},{title:"Loaded Event",headers:[],path:"/examples/loaded_events/loaded.html",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],searchIndex=ref(searchIndex$1),useSearchIndex=()=>searchIndex,useSearchSuggestions=({searchIndex:l,routeLocale:t,query:c,maxSuggestions:s})=>{const d=computed(()=>l.value.filter(Z=>Z.pathLocale===t.value));return computed(()=>{const Z=c.value.trim().toLowerCase();if(!Z)return[];const i=[],o=(W,G)=>{isQueryMatched(Z,[G.title])&&i.push({link:`${W.path}#${G.slug}`,title:W.title,header:G.title});for(const u of G.children){if(i.length>=s.value)return;o(W,u)}};for(const W of d.value){if(i.length>=s.value)break;if(isQueryMatched(Z,[W.title,...W.extraFields])){i.push({link:W.path,title:W.title});continue}for(const G of W.headers){if(i.length>=s.value)break;o(W,G)}}return i})},useSuggestionsFocus=l=>{const t=ref(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=l.value.length-1}}},SearchBox=defineComponent({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(l){const{locales:t,hotKeys:c,maxSuggestions:s}=toRefs(l),d=useRouter(),Z=useRouteLocale(),i=useSearchIndex(),o=ref(null),W=ref(!1),G=ref(""),u=computed(()=>t.value[Z.value]??{}),X=useSearchSuggestions({searchIndex:i,routeLocale:Z,query:G,maxSuggestions:s}),{focusIndex:z,focusNext:R,focusPrev:S}=useSuggestionsFocus(X);useHotKeys({input:o,hotKeys:c});const k=computed(()=>W.value&&!!X.value.length),L=()=>{k.value&&S()},x=()=>{k.value&&R()},j=Q=>{if(!k.value)return;const J=X.value[Q];J&&d.push(J.link).then(()=>{G.value="",z.value=0})};return()=>h("form",{class:"search-box",role:"search"},[h("input",{ref:o,type:"search",placeholder:u.value.placeholder,autocomplete:"off",spellcheck:!1,value:G.value,onFocus:()=>W.value=!0,onBlur:()=>W.value=!1,onInput:Q=>G.value=Q.target.value,onKeydown:Q=>{switch(Q.key){case"ArrowUp":{L();break}case"ArrowDown":{x();break}case"Enter":{Q.preventDefault(),j(z.value);break}}}}),k.value&&h("ul",{class:"suggestions",onMouseleave:()=>z.value=-1},X.value.map(({link:Q,title:J,header:M},y)=>h("li",{class:["suggestion",{focus:z.value===y}],onMouseenter:()=>z.value=y,onMousedown:()=>j(y)},h("a",{href:Q,onClick:Y=>Y.preventDefault()},[h("span",{class:"page-title"},J),M&&h("span",{class:"page-header"},`> ${M}`)]))))])}}),vars="",search="",locales={"/":{placeholder:"Search"}},hotKeys=["s","/"],maxSuggestions=5,clientConfig7=defineClientConfig({enhance({app:l}){l.component("SearchBox",t=>h(SearchBox,{locales,hotKeys,maxSuggestions,...t}))}}),index="";function getAugmentedNamespace(l){if(l.__esModule)return l;var t=l.default;if(typeof t=="function"){var c=function s(){if(this instanceof s){var d=[null];d.push.apply(d,arguments);var Z=Function.bind.apply(t,d);return new Z}return t.apply(this,arguments)};c.prototype=t.prototype}else c={};return Object.defineProperty(c,"__esModule",{value:!0}),Object.keys(l).forEach(function(s){var d=Object.getOwnPropertyDescriptor(l,s);Object.defineProperty(c,s,d.get?d:{enumerable:!0,get:function(){return l[s]}})}),c}function commonjsRequire(l){throw new Error('Could not dynamically require "'+l+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var pdf={exports:{}};const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$5=getAugmentedNamespace(__viteBrowserExternal$1);(function(module,exports){(function(t,c){module.exports=c()})(globalThis,()=>(()=>{var __webpack_modules__=[,(l,t)=>{var It;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.AnnotationStateModelType=t.AnnotationReviewState=t.AnnotationReplyType=t.AnnotationMode=t.AnnotationMarkedState=t.AnnotationFlag=t.AnnotationFieldFlag=t.AnnotationEditorType=t.AnnotationEditorPrefix=t.AnnotationEditorParamsType=t.AnnotationBorderStyleType=t.AnnotationActionEventType=t.AbortException=void 0,t.assert=Mt,t.bytesToString=w,t.createValidAbsoluteUrl=Vt,t.getModificationDate=ht,t.getVerbosityLevel=Zt,t.info=lt,t.isArrayBuffer=bt,t.isArrayEqual=ut,t.normalizeUnicode=Lt,t.objectFromMap=C,t.objectSize=I,t.setVerbosityLevel=Xl,t.shadow=Ml,t.string32=N,t.stringToBytes=b,t.stringToPDFString=$l,t.stringToUTF8String=tt,t.unreachable=Wt,t.utf8StringToString=dt,t.warn=at;const c=[1,0,0,1,0,0];t.IDENTITY_MATRIX=c;const s=[.001,0,0,.001,0,0];t.FONT_IDENTITY_MATRIX=s;const d=1e7;t.MAX_IMAGE_SIZE_TO_CACHE=d;const Z=1.35;t.LINE_FACTOR=Z;const i=.35;t.LINE_DESCENT_FACTOR=i;const o=i/Z;t.BASELINE_FACTOR=o;const W={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,OPLIST:256};t.RenderingIntentFlag=W;const G={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3};t.AnnotationMode=G;const u="pdfjs_internal_editor_";t.AnnotationEditorPrefix=u;const X={DISABLE:-1,NONE:0,FREETEXT:3,INK:15};t.AnnotationEditorType=X;const z={FREETEXT_SIZE:1,FREETEXT_COLOR:2,FREETEXT_OPACITY:3,INK_COLOR:11,INK_THICKNESS:12,INK_OPACITY:13};t.AnnotationEditorParamsType=z;const R={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048};t.PermissionFlag=R;const S={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4};t.TextRenderingMode=S;const k={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3};t.ImageKind=k;const L={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26};t.AnnotationType=L;const x={MARKED:"Marked",REVIEW:"Review"};t.AnnotationStateModelType=x;const j={MARKED:"Marked",UNMARKED:"Unmarked"};t.AnnotationMarkedState=j;const Q={ACCEPTED:"Accepted",REJECTED:"Rejected",CANCELLED:"Cancelled",COMPLETED:"Completed",NONE:"None"};t.AnnotationReviewState=Q;const J={GROUP:"Group",REPLY:"R"};t.AnnotationReplyType=J;const M={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512};t.AnnotationFlag=M;const y={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864};t.AnnotationFieldFlag=y;const Y={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};t.AnnotationBorderStyleType=Y;const m={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"};t.AnnotationActionEventType=m;const D={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"};t.DocumentActionEventType=D;const H={O:"PageOpen",C:"PageClose"};t.PageActionEventType=H;const V={ERRORS:0,WARNINGS:1,INFOS:5};t.VerbosityLevel=V;const v={NONE:0,BINARY:1};t.CMapCompressionType=v;const A={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91};t.OPS=A;const Nl={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};t.PasswordResponses=Nl;let fl=V.WARNINGS;function Xl(et){Number.isInteger(et)&&(fl=et)}function Zt(){return fl}function lt(et){fl>=V.INFOS&&console.log(`Info: ${et}`)}function at(et){fl>=V.WARNINGS&&console.log(`Warning: ${et}`)}function Wt(et){throw new Error(et)}function Mt(et,rl){et||Wt(rl)}function Nt(et){switch(et==null?void 0:et.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function Vt(et,rl=null,_l=null){if(!et)return null;try{if(_l&&typeof et=="string"){if(_l.addDefaultProtocol&&et.startsWith("www.")){const wt=et.match(/\./g);(wt==null?void 0:wt.length)>=2&&(et=`http://${et}`)}if(_l.tryConvertEncoding)try{et=tt(et)}catch{}}const ot=rl?new URL(et,rl):new URL(et);if(Nt(ot))return ot}catch{}return null}function Ml(et,rl,_l,ot=!1){return Object.defineProperty(et,rl,{value:_l,enumerable:!ot,configurable:!0,writable:!1}),_l}const U=function(){function rl(_l,ot){this.constructor===rl&&Wt("Cannot initialize BaseException."),this.message=_l,this.name=ot}return rl.prototype=new Error,rl.constructor=rl,rl}();t.BaseException=U;class g extends U{constructor(rl,_l){super(rl,"PasswordException"),this.code=_l}}t.PasswordException=g;class O extends U{constructor(rl,_l){super(rl,"UnknownErrorException"),this.details=_l}}t.UnknownErrorException=O;class B extends U{constructor(rl){super(rl,"InvalidPDFException")}}t.InvalidPDFException=B;class P extends U{constructor(rl){super(rl,"MissingPDFException")}}t.MissingPDFException=P;class Zl extends U{constructor(rl,_l){super(rl,"UnexpectedResponseException"),this.status=_l}}t.UnexpectedResponseException=Zl;class cl extends U{constructor(rl){super(rl,"FormatError")}}t.FormatError=cl;class T extends U{constructor(rl){super(rl,"AbortException")}}t.AbortException=T;function w(et){(typeof et!="object"||(et==null?void 0:et.length)===void 0)&&Wt("Invalid argument for bytesToString");const rl=et.length,_l=8192;if(rl<_l)return String.fromCharCode.apply(null,et);const ot=[];for(let wt=0;wt>24&255,et>>16&255,et>>8&255,et&255)}function I(et){return Object.keys(et).length}function C(et){const rl=Object.create(null);for(const[_l,ot]of et)rl[_l]=ot;return rl}function K(){const et=new Uint8Array(4);return et[0]=1,new Uint32Array(et.buffer,0,1)[0]===1}function f(){try{return new Function(""),!0}catch{return!1}}class Yl{static get isLittleEndian(){return Ml(this,"isLittleEndian",K())}static get isEvalSupported(){return Ml(this,"isEvalSupported",f())}static get isOffscreenCanvasSupported(){return Ml(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas<"u")}static get platform(){return typeof navigator>"u"?Ml(this,"platform",{isWin:!1,isMac:!1}):Ml(this,"platform",{isWin:navigator.platform.includes("Win"),isMac:navigator.platform.includes("Mac")})}}t.FeatureTest=Yl;const Wl=[...Array(256).keys()].map(et=>et.toString(16).padStart(2,"0"));class Vl{static makeHexColor(rl,_l,ot){return`#${Wl[rl]}${Wl[_l]}${Wl[ot]}`}static scaleMinMax(rl,_l){let ot;rl[0]?(rl[0]<0&&(ot=_l[0],_l[0]=_l[1],_l[1]=ot),_l[0]*=rl[0],_l[1]*=rl[0],rl[3]<0&&(ot=_l[2],_l[2]=_l[3],_l[3]=ot),_l[2]*=rl[3],_l[3]*=rl[3]):(ot=_l[0],_l[0]=_l[2],_l[2]=ot,ot=_l[1],_l[1]=_l[3],_l[3]=ot,rl[1]<0&&(ot=_l[2],_l[2]=_l[3],_l[3]=ot),_l[2]*=rl[1],_l[3]*=rl[1],rl[2]<0&&(ot=_l[0],_l[0]=_l[1],_l[1]=ot),_l[0]*=rl[2],_l[1]*=rl[2]),_l[0]+=rl[4],_l[1]+=rl[4],_l[2]+=rl[5],_l[3]+=rl[5]}static transform(rl,_l){return[rl[0]*_l[0]+rl[2]*_l[1],rl[1]*_l[0]+rl[3]*_l[1],rl[0]*_l[2]+rl[2]*_l[3],rl[1]*_l[2]+rl[3]*_l[3],rl[0]*_l[4]+rl[2]*_l[5]+rl[4],rl[1]*_l[4]+rl[3]*_l[5]+rl[5]]}static applyTransform(rl,_l){const ot=rl[0]*_l[0]+rl[1]*_l[2]+_l[4],wt=rl[0]*_l[1]+rl[1]*_l[3]+_l[5];return[ot,wt]}static applyInverseTransform(rl,_l){const ot=_l[0]*_l[3]-_l[1]*_l[2],wt=(rl[0]*_l[3]-rl[1]*_l[2]+_l[2]*_l[5]-_l[4]*_l[3])/ot,Jt=(-rl[0]*_l[1]+rl[1]*_l[0]+_l[4]*_l[1]-_l[5]*_l[0])/ot;return[wt,Jt]}static getAxialAlignedBoundingBox(rl,_l){const ot=Vl.applyTransform(rl,_l),wt=Vl.applyTransform(rl.slice(2,4),_l),Jt=Vl.applyTransform([rl[0],rl[3]],_l),Ut=Vl.applyTransform([rl[2],rl[1]],_l);return[Math.min(ot[0],wt[0],Jt[0],Ut[0]),Math.min(ot[1],wt[1],Jt[1],Ut[1]),Math.max(ot[0],wt[0],Jt[0],Ut[0]),Math.max(ot[1],wt[1],Jt[1],Ut[1])]}static inverseTransform(rl){const _l=rl[0]*rl[3]-rl[1]*rl[2];return[rl[3]/_l,-rl[1]/_l,-rl[2]/_l,rl[0]/_l,(rl[2]*rl[5]-rl[4]*rl[3])/_l,(rl[4]*rl[1]-rl[5]*rl[0])/_l]}static singularValueDecompose2dScale(rl){const _l=[rl[0],rl[2],rl[1],rl[3]],ot=rl[0]*_l[0]+rl[1]*_l[2],wt=rl[0]*_l[1]+rl[1]*_l[3],Jt=rl[2]*_l[0]+rl[3]*_l[2],Ut=rl[2]*_l[1]+rl[3]*_l[3],Ft=(ot+Ut)/2,_t=Math.sqrt((ot+Ut)**2-4*(ot*Ut-Jt*wt))/2,Bt=Ft+_t||1,ct=Ft-_t||1;return[Math.sqrt(Bt),Math.sqrt(ct)]}static normalizeRect(rl){const _l=rl.slice(0);return rl[0]>rl[2]&&(_l[0]=rl[2],_l[2]=rl[0]),rl[1]>rl[3]&&(_l[1]=rl[3],_l[3]=rl[1]),_l}static intersect(rl,_l){const ot=Math.max(Math.min(rl[0],rl[2]),Math.min(_l[0],_l[2])),wt=Math.min(Math.max(rl[0],rl[2]),Math.max(_l[0],_l[2]));if(ot>wt)return null;const Jt=Math.max(Math.min(rl[1],rl[3]),Math.min(_l[1],_l[3])),Ut=Math.min(Math.max(rl[1],rl[3]),Math.max(_l[1],_l[3]));return Jt>Ut?null:[ot,Jt,wt,Ut]}static bezierBoundingBox(rl,_l,ot,wt,Jt,Ut,Ft,_t){const Bt=[],ct=[[],[]];let nt,Yt,Xt,Tt,zt,Rt,pt,xt;for(let kt=0;kt<2;++kt){if(kt===0?(Yt=6*rl-12*ot+6*Jt,nt=-3*rl+9*ot-9*Jt+3*Ft,Xt=3*ot-3*rl):(Yt=6*_l-12*wt+6*Ut,nt=-3*_l+9*wt-9*Ut+3*_t,Xt=3*wt-3*_l),Math.abs(nt)<1e-12){if(Math.abs(Yt)<1e-12)continue;Tt=-Xt/Yt,0="ï"){let _l;if(et[0]==="þ"&&et[1]==="ÿ"?_l="utf-16be":et[0]==="ÿ"&&et[1]==="þ"?_l="utf-16le":et[0]==="ï"&&et[1]==="»"&&et[2]==="¿"&&(_l="utf-8"),_l)try{const ot=new TextDecoder(_l,{fatal:!0}),wt=b(et);return ot.decode(wt)}catch(ot){at(`stringToPDFString: "${ot}".`)}}const rl=[];for(let _l=0,ot=et.length;_l{this.resolve=ot=>{mt(this,It,!0),rl(ot)},this.reject=ot=>{mt(this,It,!0),_l(ot)}})}get settled(){return E(this,It)}}It=new WeakMap,t.PromiseCapability=yt;let Ll=null,Gt=null;function Lt(et){return Ll||(Ll=/([\u00a0\u00b5\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+)/gu,Gt=new Map([["ſt","ſt"]])),et.replaceAll(Ll,(rl,_l,ot)=>_l?_l.normalize("NFKC"):Gt.get(ot))}},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{var l,c,s,d,qt,i,nc,W,G,u,X,z,R,S,k,Nc,x,j,Mc,J,M;Object.defineProperty(exports,"__esModule",{value:!0}),exports.build=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,exports.getDocument=getDocument,exports.version=void 0;var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(3),_display_utils=__w_pdfjs_require__(6),_font_loader=__w_pdfjs_require__(9),_canvas=__w_pdfjs_require__(11),_worker_options=__w_pdfjs_require__(14),_is_node=__w_pdfjs_require__(10),_message_handler=__w_pdfjs_require__(15),_metadata=__w_pdfjs_require__(16),_optional_content_config=__w_pdfjs_require__(17),_transport_stream=__w_pdfjs_require__(18),_xfa_text=__w_pdfjs_require__(19);const DEFAULT_RANGE_CHUNK_SIZE=65536,RENDERING_CANCELLED_TIMEOUT=100,DELAYED_CLEANUP_TIMEOUT=5e3;let DefaultCanvasFactory=_display_utils.DOMCanvasFactory;exports.DefaultCanvasFactory=DefaultCanvasFactory;let DefaultCMapReaderFactory=_display_utils.DOMCMapReaderFactory;exports.DefaultCMapReaderFactory=DefaultCMapReaderFactory;let DefaultFilterFactory=_display_utils.DOMFilterFactory;exports.DefaultFilterFactory=DefaultFilterFactory;let DefaultStandardFontDataFactory=_display_utils.DOMStandardFontDataFactory;if(exports.DefaultStandardFontDataFactory=DefaultStandardFontDataFactory,_is_node.isNodeJS){const{NodeCanvasFactory:Y,NodeCMapReaderFactory:m,NodeFilterFactory:D,NodeStandardFontDataFactory:H}=__w_pdfjs_require__(20);exports.DefaultCanvasFactory=DefaultCanvasFactory=Y,exports.DefaultCMapReaderFactory=DefaultCMapReaderFactory=m,exports.DefaultFilterFactory=DefaultFilterFactory=D,exports.DefaultStandardFontDataFactory=DefaultStandardFontDataFactory=H}let createPDFNetworkStream;if(_is_node.isNodeJS){const{PDFNodeStream:Y}=__w_pdfjs_require__(21);createPDFNetworkStream=m=>new Y(m)}else{const{PDFNetworkStream:Y}=__w_pdfjs_require__(24),{PDFFetchStream:m}=__w_pdfjs_require__(25);createPDFNetworkStream=D=>(0,_display_utils.isValidFetchUrl)(D.url)?new m(D):new Y(D)}function getDocument(Y){if(typeof Y=="string"||Y instanceof URL?Y={url:Y}:(0,_util.isArrayBuffer)(Y)&&(Y={data:Y}),typeof Y!="object")throw new Error("Invalid parameter in getDocument, need parameter object.");if(!Y.url&&!Y.data&&!Y.range)throw new Error("Invalid parameter object: need either .data, .range or .url");const m=new PDFDocumentLoadingTask,{docId:D}=m,H=Y.url?getUrlProp(Y.url):null,V=Y.data?getDataProp(Y.data):null,v=Y.httpHeaders||null,A=Y.withCredentials===!0,Nl=Y.password??null,fl=Y.range instanceof PDFDataRangeTransport?Y.range:null,Xl=Number.isInteger(Y.rangeChunkSize)&&Y.rangeChunkSize>0?Y.rangeChunkSize:DEFAULT_RANGE_CHUNK_SIZE;let Zt=Y.worker instanceof PDFWorker?Y.worker:null;const lt=Y.verbosity,at=typeof Y.docBaseUrl=="string"&&!(0,_display_utils.isDataScheme)(Y.docBaseUrl)?Y.docBaseUrl:null,Wt=typeof Y.cMapUrl=="string"?Y.cMapUrl:null,Mt=Y.cMapPacked!==!1,Nt=Y.CMapReaderFactory||DefaultCMapReaderFactory,Vt=typeof Y.standardFontDataUrl=="string"?Y.standardFontDataUrl:null,Ml=Y.StandardFontDataFactory||DefaultStandardFontDataFactory,U=Y.stopAtErrors!==!0,g=Number.isInteger(Y.maxImageSize)&&Y.maxImageSize>-1?Y.maxImageSize:-1,O=Y.isEvalSupported!==!1,B=typeof Y.isOffscreenCanvasSupported=="boolean"?Y.isOffscreenCanvasSupported:!_is_node.isNodeJS,P=Number.isInteger(Y.canvasMaxAreaInBytes)?Y.canvasMaxAreaInBytes:-1,Zl=typeof Y.disableFontFace=="boolean"?Y.disableFontFace:_is_node.isNodeJS,cl=Y.fontExtraProperties===!0,T=Y.enableXfa===!0,w=Y.ownerDocument||globalThis.document,b=Y.disableRange===!0,N=Y.disableStream===!0,I=Y.disableAutoFetch===!0,C=Y.pdfBug===!0,K=fl?fl.length:Y.length??NaN,f=typeof Y.useSystemFonts=="boolean"?Y.useSystemFonts:!_is_node.isNodeJS&&!Zl,Yl=typeof Y.useWorkerFetch=="boolean"?Y.useWorkerFetch:Nt===_display_utils.DOMCMapReaderFactory&&Ml===_display_utils.DOMStandardFontDataFactory&&(0,_display_utils.isValidFetchUrl)(Wt,document.baseURI)&&(0,_display_utils.isValidFetchUrl)(Vt,document.baseURI),Wl=Y.canvasFactory||new DefaultCanvasFactory({ownerDocument:w}),Vl=Y.filterFactory||new DefaultFilterFactory({docId:D,ownerDocument:w}),Tl=null;(0,_util.setVerbosityLevel)(lt);const $l={canvasFactory:Wl,filterFactory:Vl};if(Yl||($l.cMapReaderFactory=new Nt({baseUrl:Wt,isCompressed:Mt}),$l.standardFontDataFactory=new Ml({baseUrl:Vt})),!Zt){const bt={verbosity:lt,port:_worker_options.GlobalWorkerOptions.workerPort};Zt=bt.port?PDFWorker.fromPort(bt):new PDFWorker(bt),m._worker=Zt}const tt={docId:D,apiVersion:"3.7.107",data:V,password:Nl,disableAutoFetch:I,rangeChunkSize:Xl,length:K,docBaseUrl:at,enableXfa:T,evaluatorOptions:{maxImageSize:g,disableFontFace:Zl,ignoreErrors:U,isEvalSupported:O,isOffscreenCanvasSupported:B,canvasMaxAreaInBytes:P,fontExtraProperties:cl,useSystemFonts:f,cMapUrl:Yl?Wt:null,standardFontDataUrl:Yl?Vt:null}},dt={ignoreErrors:U,isEvalSupported:O,disableFontFace:Zl,fontExtraProperties:cl,enableXfa:T,ownerDocument:w,disableAutoFetch:I,pdfBug:C,styleElement:Tl};return Zt.promise.then(function(){if(m.destroyed)throw new Error("Loading aborted");const bt=_fetchDocument(Zt,tt),ut=new Promise(function(ht){let yt;fl?yt=new _transport_stream.PDFDataTransportStream({length:K,initialData:fl.initialData,progressiveDone:fl.progressiveDone,contentDispositionFilename:fl.contentDispositionFilename,disableRange:b,disableStream:N},fl):V||(yt=createPDFNetworkStream({url:H,length:K,httpHeaders:v,withCredentials:A,rangeChunkSize:Xl,disableRange:b,disableStream:N})),ht(yt)});return Promise.all([bt,ut]).then(function([ht,yt]){if(m.destroyed)throw new Error("Loading aborted");const Ll=new _message_handler.MessageHandler(D,ht,Zt.port),Gt=new WorkerTransport(Ll,m,yt,dt,$l);m._transport=Gt,Ll.send("Ready",null)})}).catch(m._capability.reject),m}async function _fetchDocument(Y,m){if(Y.destroyed)throw new Error("Worker was destroyed");const D=await Y.messageHandler.sendWithPromise("GetDocRequest",m,m.data?[m.data.buffer]:null);if(Y.destroyed)throw new Error("Worker was destroyed");return D}function getUrlProp(Y){if(Y instanceof URL)return Y.href;try{return new URL(Y,window.location).href}catch{if(_is_node.isNodeJS&&typeof Y=="string")return Y}throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.")}function getDataProp(Y){if(_is_node.isNodeJS&&typeof Buffer<"u"&&Y instanceof Buffer)return(0,_display_utils.deprecated)("Please provide binary data as `Uint8Array`, rather than `Buffer`."),new Uint8Array(Y);if(Y instanceof Uint8Array&&Y.byteLength===Y.buffer.byteLength)return Y;if(typeof Y=="string")return(0,_util.stringToBytes)(Y);if(typeof Y=="object"&&!isNaN(Y==null?void 0:Y.length)||(0,_util.isArrayBuffer)(Y))return new Uint8Array(Y);throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.")}const t=class{constructor(){this._capability=new _util.PromiseCapability,this._transport=null,this._worker=null,this.docId=`d${bc(t,l)._++}`,this.destroyed=!1,this.onPassword=null,this.onProgress=null}get promise(){return this._capability.promise}async destroy(){var m;this.destroyed=!0,await((m=this._transport)==null?void 0:m.destroy()),this._transport=null,this._worker&&(this._worker.destroy(),this._worker=null)}};let PDFDocumentLoadingTask=t;l=new WeakMap,st(PDFDocumentLoadingTask,l,0),exports.PDFDocumentLoadingTask=PDFDocumentLoadingTask;class PDFDataRangeTransport{constructor(m,D,H=!1,V=null){this.length=m,this.initialData=D,this.progressiveDone=H,this.contentDispositionFilename=V,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=new _util.PromiseCapability}addRangeListener(m){this._rangeListeners.push(m)}addProgressListener(m){this._progressListeners.push(m)}addProgressiveReadListener(m){this._progressiveReadListeners.push(m)}addProgressiveDoneListener(m){this._progressiveDoneListeners.push(m)}onDataRange(m,D){for(const H of this._rangeListeners)H(m,D)}onDataProgress(m,D){this._readyCapability.promise.then(()=>{for(const H of this._progressListeners)H(m,D)})}onDataProgressiveRead(m){this._readyCapability.promise.then(()=>{for(const D of this._progressiveReadListeners)D(m)})}onDataProgressiveDone(){this._readyCapability.promise.then(()=>{for(const m of this._progressiveDoneListeners)m()})}transportReady(){this._readyCapability.resolve()}requestDataRange(m,D){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}abort(){}}exports.PDFDataRangeTransport=PDFDataRangeTransport;class PDFDocumentProxy{constructor(m,D){this._pdfInfo=m,this._transport=D}get annotationStorage(){return this._transport.annotationStorage}get filterFactory(){return this._transport.filterFactory}get numPages(){return this._pdfInfo.numPages}get fingerprints(){return this._pdfInfo.fingerprints}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}get allXfaHtml(){return this._transport._htmlForXfa}getPage(m){return this._transport.getPage(m)}getPageIndex(m){return this._transport.getPageIndex(m)}getDestinations(){return this._transport.getDestinations()}getDestination(m){return this._transport.getDestination(m)}getPageLabels(){return this._transport.getPageLabels()}getPageLayout(){return this._transport.getPageLayout()}getPageMode(){return this._transport.getPageMode()}getViewerPreferences(){return this._transport.getViewerPreferences()}getOpenAction(){return this._transport.getOpenAction()}getAttachments(){return this._transport.getAttachments()}getJavaScript(){return this._transport.getJavaScript()}getJSActions(){return this._transport.getDocJSActions()}getOutline(){return this._transport.getOutline()}getOptionalContentConfig(){return this._transport.getOptionalContentConfig()}getPermissions(){return this._transport.getPermissions()}getMetadata(){return this._transport.getMetadata()}getMarkInfo(){return this._transport.getMarkInfo()}getData(){return this._transport.getData()}saveDocument(){return this._transport.saveDocument()}getDownloadInfo(){return this._transport.downloadInfoCapability.promise}cleanup(m=!1){return this._transport.startCleanup(m||this.isPureXfa)}destroy(){return this.loadingTask.destroy()}get loadingParams(){return this._transport.loadingParams}get loadingTask(){return this._transport.loadingTask}getFieldObjects(){return this._transport.getFieldObjects()}hasJSActions(){return this._transport.hasJSActions()}getCalculationOrderIds(){return this._transport.getCalculationOrderIds()}}exports.PDFDocumentProxy=PDFDocumentProxy;class PDFPageProxy{constructor(m,D,H,V=!1){st(this,d);st(this,i);st(this,c,null);st(this,s,!1);this._pageIndex=m,this._pageInfo=D,this._transport=H,this._stats=V?new _display_utils.StatTimer:null,this._pdfBug=V,this.commonObjs=H.commonObjs,this.objs=new PDFObjects,this._maybeCleanupAfterRender=!1,this._intentStates=new Map,this.destroyed=!1}get pageNumber(){return this._pageIndex+1}get rotate(){return this._pageInfo.rotate}get ref(){return this._pageInfo.ref}get userUnit(){return this._pageInfo.userUnit}get view(){return this._pageInfo.view}getViewport({scale:m,rotation:D=this.rotate,offsetX:H=0,offsetY:V=0,dontFlip:v=!1}={}){return new _display_utils.PageViewport({viewBox:this.view,scale:m,rotation:D,offsetX:H,offsetY:V,dontFlip:v})}getAnnotations({intent:m="display"}={}){const D=this._transport.getRenderingIntent(m);return this._transport.getAnnotations(this._pageIndex,D.renderingIntent)}getJSActions(){return this._transport.getPageJSActions(this._pageIndex)}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}async getXfa(){var m;return((m=this._transport._htmlForXfa)==null?void 0:m.children[this._pageIndex])||null}render({canvasContext:m,viewport:D,intent:H="display",annotationMode:V=_util.AnnotationMode.ENABLE,transform:v=null,background:A=null,optionalContentConfigPromise:Nl=null,annotationCanvasMap:fl=null,pageColors:Xl=null,printAnnotationStorage:Zt=null}){var Ml,U,g;if((Ml=arguments[0])!=null&&Ml.canvasFactory)throw new Error("render no longer accepts the `canvasFactory`-option, please pass it to the `getDocument`-function instead.");(U=this._stats)==null||U.time("Overall");const lt=this._transport.getRenderingIntent(H,V,Zt);mt(this,s,!1),it(this,i,nc).call(this),Nl||(Nl=this._transport.getOptionalContentConfig());let at=this._intentStates.get(lt.cacheKey);at||(at=Object.create(null),this._intentStates.set(lt.cacheKey,at)),at.streamReaderCancelTimeout&&(clearTimeout(at.streamReaderCancelTimeout),at.streamReaderCancelTimeout=null);const Wt=!!(lt.renderingIntent&_util.RenderingIntentFlag.PRINT);at.displayReadyCapability||(at.displayReadyCapability=new _util.PromiseCapability,at.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(g=this._stats)==null||g.time("Page Request"),this._pumpOperatorList(lt));const Mt=O=>{var B,P;at.renderTasks.delete(Nt),(this._maybeCleanupAfterRender||Wt)&&mt(this,s,!0),it(this,d,qt).call(this,!Wt),O?(Nt.capability.reject(O),this._abortOperatorList({intentState:at,reason:O instanceof Error?O:new Error(O)})):Nt.capability.resolve(),(B=this._stats)==null||B.timeEnd("Rendering"),(P=this._stats)==null||P.timeEnd("Overall")},Nt=new InternalRenderTask({callback:Mt,params:{canvasContext:m,viewport:D,transform:v,background:A},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:fl,operatorList:at.operatorList,pageIndex:this._pageIndex,canvasFactory:this._transport.canvasFactory,filterFactory:this._transport.filterFactory,useRequestAnimationFrame:!Wt,pdfBug:this._pdfBug,pageColors:Xl});(at.renderTasks||(at.renderTasks=new Set)).add(Nt);const Vt=Nt.task;return Promise.all([at.displayReadyCapability.promise,Nl]).then(([O,B])=>{var P;if(E(this,s)){Mt();return}(P=this._stats)==null||P.time("Rendering"),Nt.initializeGraphics({transparency:O,optionalContentConfig:B}),Nt.operatorListChanged()}).catch(Mt),Vt}getOperatorList({intent:m="display",annotationMode:D=_util.AnnotationMode.ENABLE,printAnnotationStorage:H=null}={}){var fl;function V(){A.operatorList.lastChunk&&(A.opListReadCapability.resolve(A.operatorList),A.renderTasks.delete(Nl))}const v=this._transport.getRenderingIntent(m,D,H,!0);let A=this._intentStates.get(v.cacheKey);A||(A=Object.create(null),this._intentStates.set(v.cacheKey,A));let Nl;return A.opListReadCapability||(Nl=Object.create(null),Nl.operatorListChanged=V,A.opListReadCapability=new _util.PromiseCapability,(A.renderTasks||(A.renderTasks=new Set)).add(Nl),A.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(fl=this._stats)==null||fl.time("Page Request"),this._pumpOperatorList(v)),A.opListReadCapability.promise}streamTextContent({includeMarkedContent:m=!1,disableNormalization:D=!1}={}){return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,includeMarkedContent:m===!0,disableNormalization:D===!0},{highWaterMark:100,size(V){return V.items.length}})}getTextContent(m={}){if(this._transport._htmlForXfa)return this.getXfa().then(H=>_xfa_text.XfaText.textContent(H));const D=this.streamTextContent(m);return new Promise(function(H,V){function v(){A.read().then(function({value:fl,done:Xl}){if(Xl){H(Nl);return}Object.assign(Nl.styles,fl.styles),Nl.items.push(...fl.items),v()},V)}const A=D.getReader(),Nl={items:[],styles:Object.create(null)};v()})}getStructTree(){return this._transport.getStructTree(this._pageIndex)}_destroy(){this.destroyed=!0;const m=[];for(const D of this._intentStates.values())if(this._abortOperatorList({intentState:D,reason:new Error("Page was destroyed."),force:!0}),!D.opListReadCapability)for(const H of D.renderTasks)m.push(H.completed),H.cancel();return this.objs.clear(),mt(this,s,!1),it(this,i,nc).call(this),Promise.all(m)}cleanup(m=!1){mt(this,s,!0);const D=it(this,d,qt).call(this,!1);return m&&D&&this._stats&&(this._stats=new _display_utils.StatTimer),D}_startRenderPage(m,D){var V,v;const H=this._intentStates.get(D);H&&((V=this._stats)==null||V.timeEnd("Page Request"),(v=H.displayReadyCapability)==null||v.resolve(m))}_renderPageChunk(m,D){for(let H=0,V=m.length;H{v.read().then(({value:fl,done:Xl})=>{if(Xl){A.streamReader=null;return}this._transport.destroyed||(this._renderPageChunk(fl,A),Nl())},fl=>{if(A.streamReader=null,!this._transport.destroyed){if(A.operatorList){A.operatorList.lastChunk=!0;for(const Xl of A.renderTasks)Xl.operatorListChanged();it(this,d,qt).call(this,!0)}if(A.displayReadyCapability)A.displayReadyCapability.reject(fl);else if(A.opListReadCapability)A.opListReadCapability.reject(fl);else throw fl}})};Nl()}_abortOperatorList({intentState:m,reason:D,force:H=!1}){if(m.streamReader){if(m.streamReaderCancelTimeout&&(clearTimeout(m.streamReaderCancelTimeout),m.streamReaderCancelTimeout=null),!H){if(m.renderTasks.size>0)return;if(D instanceof _display_utils.RenderingCancelledException){let V=RENDERING_CANCELLED_TIMEOUT;D.extraDelay>0&&D.extraDelay<1e3&&(V+=D.extraDelay),m.streamReaderCancelTimeout=setTimeout(()=>{m.streamReaderCancelTimeout=null,this._abortOperatorList({intentState:m,reason:D,force:!0})},V);return}}if(m.streamReader.cancel(new _util.AbortException(D.message)).catch(()=>{}),m.streamReader=null,!this._transport.destroyed){for(const[V,v]of this._intentStates)if(v===m){this._intentStates.delete(V);break}this.cleanup()}}}get stats(){return this._stats}}c=new WeakMap,s=new WeakMap,d=new WeakSet,qt=function(m=!1){if(it(this,i,nc).call(this),!E(this,s))return!1;if(m)return mt(this,c,setTimeout(()=>{mt(this,c,null),it(this,d,qt).call(this,!1)},DELAYED_CLEANUP_TIMEOUT)),!1;for(const{renderTasks:D,operatorList:H}of this._intentStates.values())if(D.size>0||!H.lastChunk)return!1;return this._intentStates.clear(),this.objs.clear(),mt(this,s,!1),!0},i=new WeakSet,nc=function(){E(this,c)&&(clearTimeout(E(this,c)),mt(this,c,null))},exports.PDFPageProxy=PDFPageProxy;class LoopbackPort{constructor(){st(this,W,new Set);st(this,G,Promise.resolve())}postMessage(m,D){const H={data:structuredClone(m,D?{transfer:D}:null)};E(this,G).then(()=>{for(const V of E(this,W))V.call(this,H)})}addEventListener(m,D){E(this,W).add(D)}removeEventListener(m,D){E(this,W).delete(D)}terminate(){E(this,W).clear()}}W=new WeakMap,G=new WeakMap,exports.LoopbackPort=LoopbackPort;const PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};exports.PDFWorkerUtil=PDFWorkerUtil;{if(_is_node.isNodeJS&&typeof commonjsRequire=="function")PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if(typeof document=="object"){const Y=(u=document==null?void 0:document.currentScript)==null?void 0:u.src;Y&&(PDFWorkerUtil.fallbackWorkerSrc=Y.replace(/(\.(?:min\.)?js)(\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function(Y,m){let D;try{if(D=new URL(Y),!D.origin||D.origin==="null")return!1}catch{return!1}const H=new URL(m,D);return D.origin===H.origin},PDFWorkerUtil.createCDNWrapper=function(Y){const m=`importScripts("${Y}");`;return URL.createObjectURL(new Blob([m]))}}const _PDFWorker=class{constructor({name:Y=null,port:m=null,verbosity:D=(0,_util.getVerbosityLevel)()}={}){if(m&&E(_PDFWorker,X).has(m))throw new Error("Cannot use more than one PDFWorker per port.");if(this.name=Y,this.destroyed=!1,this.verbosity=D,this._readyCapability=new _util.PromiseCapability,this._port=null,this._webWorker=null,this._messageHandler=null,m){E(_PDFWorker,X).set(m,this),this._initializeFromPort(m);return}this._initialize()}get promise(){return this._readyCapability.promise}get port(){return this._port}get messageHandler(){return this._messageHandler}_initializeFromPort(Y){this._port=Y,this._messageHandler=new _message_handler.MessageHandler("main","worker",Y),this._messageHandler.on("ready",function(){}),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}_initialize(){if(!PDFWorkerUtil.isWorkerDisabled&&!_PDFWorker._mainThreadWorkerMessageHandler){let{workerSrc:Y}=_PDFWorker;try{PDFWorkerUtil.isSameOrigin(window.location.href,Y)||(Y=PDFWorkerUtil.createCDNWrapper(new URL(Y,window.location).href));const m=new Worker(Y),D=new _message_handler.MessageHandler("main","worker",m),H=()=>{m.removeEventListener("error",V),D.destroy(),m.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()},V=()=>{this._webWorker||H()};m.addEventListener("error",V),D.on("test",A=>{if(m.removeEventListener("error",V),this.destroyed){H();return}A?(this._messageHandler=D,this._port=m,this._webWorker=m,this._readyCapability.resolve(),D.send("configure",{verbosity:this.verbosity})):(this._setupFakeWorker(),D.destroy(),m.terminate())}),D.on("ready",A=>{if(m.removeEventListener("error",V),this.destroyed){H();return}try{v()}catch{this._setupFakeWorker()}});const v=()=>{const A=new Uint8Array;D.send("test",A,[A.buffer])};v();return}catch{(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}_setupFakeWorker(){PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),_PDFWorker._setupFakeWorkerGlobal.then(Y=>{if(this.destroyed){this._readyCapability.reject(new Error("Worker was destroyed"));return}const m=new LoopbackPort;this._port=m;const D=`fake${PDFWorkerUtil.fakeWorkerId++}`,H=new _message_handler.MessageHandler(D+"_worker",D,m);Y.setup(H,m);const V=new _message_handler.MessageHandler(D,D+"_worker",m);this._messageHandler=V,this._readyCapability.resolve(),V.send("configure",{verbosity:this.verbosity})}).catch(Y=>{this._readyCapability.reject(new Error(`Setting up fake worker failed: "${Y.message}".`))})}destroy(){this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),E(_PDFWorker,X).delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}static fromPort(Y){if(!(Y!=null&&Y.port))throw new Error("PDFWorker.fromPort - invalid method signature.");return E(this,X).has(Y.port)?E(this,X).get(Y.port):new _PDFWorker(Y)}static get workerSrc(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(PDFWorkerUtil.fallbackWorkerSrc!==null)return _is_node.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}static get _mainThreadWorkerMessageHandler(){var Y;try{return((Y=globalThis.pdfjsWorker)==null?void 0:Y.WorkerMessageHandler)||null}catch{return null}}static get _setupFakeWorkerGlobal(){const loader=async()=>{const mainWorkerMessageHandler=this._mainThreadWorkerMessageHandler;if(mainWorkerMessageHandler)return mainWorkerMessageHandler;if(_is_node.isNodeJS&&typeof commonjsRequire=="function"){const worker=eval("require")(this.workerSrc);return worker.WorkerMessageHandler}return await(0,_display_utils.loadScript)(this.workerSrc),window.pdfjsWorker.WorkerMessageHandler};return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}};let PDFWorker=_PDFWorker;X=new WeakMap,st(PDFWorker,X,new WeakMap),exports.PDFWorker=PDFWorker;class WorkerTransport{constructor(m,D,H,V,v){st(this,k);st(this,z,new Map);st(this,R,new Map);st(this,S,new Map);this.messageHandler=m,this.loadingTask=D,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({ownerDocument:V.ownerDocument,styleElement:V.styleElement}),this._params=V,this.canvasFactory=v.canvasFactory,this.filterFactory=v.filterFactory,this.cMapReaderFactory=v.cMapReaderFactory,this.standardFontDataFactory=v.standardFontDataFactory,this.destroyed=!1,this.destroyCapability=null,this._passwordCapability=null,this._networkStream=H,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=new _util.PromiseCapability,this.setupMessageHandler()}get annotationStorage(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}getRenderingIntent(m,D=_util.AnnotationMode.ENABLE,H=null,V=!1){let v=_util.RenderingIntentFlag.DISPLAY,A=null;switch(m){case"any":v=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":v=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)(`getRenderingIntent - invalid intent: ${m}`)}switch(D){case _util.AnnotationMode.DISABLE:v+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:v+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:v+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE,A=(v&_util.RenderingIntentFlag.PRINT&&H instanceof _annotation_storage.PrintAnnotationStorage?H:this.annotationStorage).serializable;break;default:(0,_util.warn)(`getRenderingIntent - invalid annotationMode: ${D}`)}return V&&(v+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:v,cacheKey:`${v}_${_annotation_storage.AnnotationStorage.getHash(A)}`,annotationStorageMap:A}}destroy(){if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=new _util.PromiseCapability,this._passwordCapability&&this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));const m=[];for(const H of E(this,R).values())m.push(H._destroy());E(this,R).clear(),E(this,S).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();const D=this.messageHandler.sendWithPromise("Terminate",null);return m.push(D),Promise.all(m).then(()=>{this.commonObjs.clear(),this.fontLoader.clear(),E(this,z).clear(),this.filterFactory.destroy(),this._networkStream&&this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")),this.messageHandler&&(this.messageHandler.destroy(),this.messageHandler=null),this.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise}setupMessageHandler(){const{messageHandler:m,loadingTask:D}=this;m.on("GetReader",(H,V)=>{(0,_util.assert)(this._networkStream,"GetReader - no `IPDFStream` instance available."),this._fullReader=this._networkStream.getFullReader(),this._fullReader.onProgress=v=>{this._lastProgress={loaded:v.loaded,total:v.total}},V.onPull=()=>{this._fullReader.read().then(function({value:v,done:A}){if(A){V.close();return}(0,_util.assert)(v instanceof ArrayBuffer,"GetReader - expected an ArrayBuffer."),V.enqueue(new Uint8Array(v),1,[v])}).catch(v=>{V.error(v)})},V.onCancel=v=>{this._fullReader.cancel(v),V.ready.catch(A=>{if(!this.destroyed)throw A})}}),m.on("ReaderHeadersReady",H=>{const V=new _util.PromiseCapability,v=this._fullReader;return v.headersReady.then(()=>{var A;(!v.isStreamingSupported||!v.isRangeSupported)&&(this._lastProgress&&((A=D.onProgress)==null||A.call(D,this._lastProgress)),v.onProgress=Nl=>{var fl;(fl=D.onProgress)==null||fl.call(D,{loaded:Nl.loaded,total:Nl.total})}),V.resolve({isStreamingSupported:v.isStreamingSupported,isRangeSupported:v.isRangeSupported,contentLength:v.contentLength})},V.reject),V.promise}),m.on("GetRangeReader",(H,V)=>{(0,_util.assert)(this._networkStream,"GetRangeReader - no `IPDFStream` instance available.");const v=this._networkStream.getRangeReader(H.begin,H.end);if(!v){V.close();return}V.onPull=()=>{v.read().then(function({value:A,done:Nl}){if(Nl){V.close();return}(0,_util.assert)(A instanceof ArrayBuffer,"GetRangeReader - expected an ArrayBuffer."),V.enqueue(new Uint8Array(A),1,[A])}).catch(A=>{V.error(A)})},V.onCancel=A=>{v.cancel(A),V.ready.catch(Nl=>{if(!this.destroyed)throw Nl})}}),m.on("GetDoc",({pdfInfo:H})=>{this._numPages=H.numPages,this._htmlForXfa=H.htmlForXfa,delete H.htmlForXfa,D._capability.resolve(new PDFDocumentProxy(H,this))}),m.on("DocException",function(H){let V;switch(H.name){case"PasswordException":V=new _util.PasswordException(H.message,H.code);break;case"InvalidPDFException":V=new _util.InvalidPDFException(H.message);break;case"MissingPDFException":V=new _util.MissingPDFException(H.message);break;case"UnexpectedResponseException":V=new _util.UnexpectedResponseException(H.message,H.status);break;case"UnknownErrorException":V=new _util.UnknownErrorException(H.message,H.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}D._capability.reject(V)}),m.on("PasswordRequest",H=>{if(this._passwordCapability=new _util.PromiseCapability,D.onPassword){const V=v=>{v instanceof Error?this._passwordCapability.reject(v):this._passwordCapability.resolve({password:v})};try{D.onPassword(V,H.code)}catch(v){this._passwordCapability.reject(v)}}else this._passwordCapability.reject(new _util.PasswordException(H.message,H.code));return this._passwordCapability.promise}),m.on("DataLoaded",H=>{var V;(V=D.onProgress)==null||V.call(D,{loaded:H.length,total:H.length}),this.downloadInfoCapability.resolve(H)}),m.on("StartRenderPage",H=>{if(this.destroyed)return;E(this,R).get(H.pageIndex)._startRenderPage(H.transparency,H.cacheKey)}),m.on("commonobj",([H,V,v])=>{var A;if(!this.destroyed&&!this.commonObjs.has(H))switch(V){case"Font":const Nl=this._params;if("error"in v){const Zt=v.error;(0,_util.warn)(`Error during font loading: ${Zt}`),this.commonObjs.resolve(H,Zt);break}const fl=Nl.pdfBug&&((A=globalThis.FontInspector)!=null&&A.enabled)?(Zt,lt)=>globalThis.FontInspector.fontAdded(Zt,lt):null,Xl=new _font_loader.FontFaceObject(v,{isEvalSupported:Nl.isEvalSupported,disableFontFace:Nl.disableFontFace,ignoreErrors:Nl.ignoreErrors,inspectFont:fl});this.fontLoader.bind(Xl).catch(Zt=>m.sendWithPromise("FontFallback",{id:H})).finally(()=>{!Nl.fontExtraProperties&&Xl.data&&(Xl.data=null),this.commonObjs.resolve(H,Xl)});break;case"FontPath":case"Image":case"Pattern":this.commonObjs.resolve(H,v);break;default:throw new Error(`Got unknown common object type ${V}`)}}),m.on("obj",([H,V,v,A])=>{var fl;if(this.destroyed)return;const Nl=E(this,R).get(V);if(!Nl.objs.has(H))switch(v){case"Image":if(Nl.objs.resolve(H,A),A){let Xl;if(A.bitmap){const{width:Zt,height:lt}=A;Xl=Zt*lt*4}else Xl=((fl=A.data)==null?void 0:fl.length)||0;Xl>_util.MAX_IMAGE_SIZE_TO_CACHE&&(Nl._maybeCleanupAfterRender=!0)}break;case"Pattern":Nl.objs.resolve(H,A);break;default:throw new Error(`Got unknown object type ${v}`)}}),m.on("DocProgress",H=>{var V;this.destroyed||(V=D.onProgress)==null||V.call(D,{loaded:H.loaded,total:H.total})}),m.on("FetchBuiltInCMap",H=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.cMapReaderFactory?this.cMapReaderFactory.fetch(H):Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."))),m.on("FetchStandardFontData",H=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.standardFontDataFactory?this.standardFontDataFactory.fetch(H):Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")))}getData(){return this.messageHandler.sendWithPromise("GetData",null)}saveDocument(){var m;return this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while `annotationStorage` is empty, please use the getData-method instead."),this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:this.annotationStorage.serializable,filename:((m=this._fullReader)==null?void 0:m.filename)??null}).finally(()=>{this.annotationStorage.resetModified()})}getPage(m){if(!Number.isInteger(m)||m<=0||m>this._numPages)return Promise.reject(new Error("Invalid page request."));const D=m-1,H=E(this,S).get(D);if(H)return H;const V=this.messageHandler.sendWithPromise("GetPage",{pageIndex:D}).then(v=>{if(this.destroyed)throw new Error("Transport destroyed");const A=new PDFPageProxy(D,v,this,this._params.pdfBug);return E(this,R).set(D,A),A});return E(this,S).set(D,V),V}getPageIndex(m){return typeof m!="object"||m===null||!Number.isInteger(m.num)||m.num<0||!Number.isInteger(m.gen)||m.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:m.num,gen:m.gen})}getAnnotations(m,D){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:m,intent:D})}getFieldObjects(){return it(this,k,Nc).call(this,"GetFieldObjects")}hasJSActions(){return it(this,k,Nc).call(this,"HasJSActions")}getCalculationOrderIds(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}getDestinations(){return this.messageHandler.sendWithPromise("GetDestinations",null)}getDestination(m){return typeof m!="string"?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:m})}getPageLabels(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}getPageLayout(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}getPageMode(){return this.messageHandler.sendWithPromise("GetPageMode",null)}getViewerPreferences(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}getOpenAction(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}getAttachments(){return this.messageHandler.sendWithPromise("GetAttachments",null)}getJavaScript(){return this.messageHandler.sendWithPromise("GetJavaScript",null)}getDocJSActions(){return this.messageHandler.sendWithPromise("GetDocJSActions",null)}getPageJSActions(m){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:m})}getStructTree(m){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:m})}getOutline(){return this.messageHandler.sendWithPromise("GetOutline",null)}getOptionalContentConfig(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then(m=>new _optional_content_config.OptionalContentConfig(m))}getPermissions(){return this.messageHandler.sendWithPromise("GetPermissions",null)}getMetadata(){const m="GetMetadata",D=E(this,z).get(m);if(D)return D;const H=this.messageHandler.sendWithPromise(m,null).then(V=>{var v,A;return{info:V[0],metadata:V[1]?new _metadata.Metadata(V[1]):null,contentDispositionFilename:((v=this._fullReader)==null?void 0:v.filename)??null,contentLength:((A=this._fullReader)==null?void 0:A.contentLength)??null}});return E(this,z).set(m,H),H}getMarkInfo(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}async startCleanup(m=!1){if(!this.destroyed){await this.messageHandler.sendWithPromise("Cleanup",null);for(const D of E(this,R).values())if(!D.cleanup())throw new Error(`startCleanup: Page ${D.pageNumber} is currently rendering.`);this.commonObjs.clear(),m||this.fontLoader.clear(),E(this,z).clear(),this.filterFactory.destroy(!0)}}get loadingParams(){const{disableAutoFetch:m,enableXfa:D}=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:m,enableXfa:D})}}z=new WeakMap,R=new WeakMap,S=new WeakMap,k=new WeakSet,Nc=function(m,D=null){const H=E(this,z).get(m);if(H)return H;const V=this.messageHandler.sendWithPromise(m,D);return E(this,z).set(m,V),V};class PDFObjects{constructor(){st(this,j);st(this,x,Object.create(null))}get(m,D=null){if(D){const V=it(this,j,Mc).call(this,m);return V.capability.promise.then(()=>D(V.data)),null}const H=E(this,x)[m];if(!(H!=null&&H.capability.settled))throw new Error(`Requesting object that isn't resolved yet ${m}.`);return H.data}has(m){const D=E(this,x)[m];return(D==null?void 0:D.capability.settled)||!1}resolve(m,D=null){const H=it(this,j,Mc).call(this,m);H.data=D,H.capability.resolve()}clear(){var m;for(const D in E(this,x)){const{data:H}=E(this,x)[D];(m=H==null?void 0:H.bitmap)==null||m.close()}mt(this,x,Object.create(null))}}x=new WeakMap,j=new WeakSet,Mc=function(m){const D=E(this,x)[m];return D||(E(this,x)[m]={capability:new _util.PromiseCapability,data:null})};class RenderTask{constructor(m){st(this,J,null);mt(this,J,m),this.onContinue=null}get promise(){return E(this,J).capability.promise}cancel(m=0){E(this,J).cancel(null,m)}get separateAnnots(){const{separateAnnots:m}=E(this,J).operatorList;if(!m)return!1;const{annotationCanvasMap:D}=E(this,J);return m.form||m.canvas&&(D==null?void 0:D.size)>0}}J=new WeakMap,exports.RenderTask=RenderTask;const y=class{constructor({callback:m,params:D,objs:H,commonObjs:V,annotationCanvasMap:v,operatorList:A,pageIndex:Nl,canvasFactory:fl,filterFactory:Xl,useRequestAnimationFrame:Zt=!1,pdfBug:lt=!1,pageColors:at=null}){this.callback=m,this.params=D,this.objs=H,this.commonObjs=V,this.annotationCanvasMap=v,this.operatorListIdx=null,this.operatorList=A,this._pageIndex=Nl,this.canvasFactory=fl,this.filterFactory=Xl,this._pdfBug=lt,this.pageColors=at,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=Zt===!0&&typeof window<"u",this.cancelled=!1,this.capability=new _util.PromiseCapability,this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=D.canvasContext.canvas}get completed(){return this.capability.promise.catch(function(){})}initializeGraphics({transparency:m=!1,optionalContentConfig:D}){var Nl,fl;if(this.cancelled)return;if(this._canvas){if(E(y,M).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.");E(y,M).add(this._canvas)}this._pdfBug&&((Nl=globalThis.StepperManager)!=null&&Nl.enabled)&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());const{canvasContext:H,viewport:V,transform:v,background:A}=this.params;this.gfx=new _canvas.CanvasGraphics(H,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:D},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:v,viewport:V,transparency:m,background:A}),this.operatorListIdx=0,this.graphicsReady=!0,(fl=this.graphicsReadyCallback)==null||fl.call(this)}cancel(m=null,D=0){var H;this.running=!1,this.cancelled=!0,(H=this.gfx)==null||H.endDrawing(),this._canvas&&E(y,M).delete(this._canvas),this.callback(m||new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex+1}`,"canvas",D))}operatorListChanged(){var m;if(!this.graphicsReady){this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound);return}(m=this.stepper)==null||m.updateOperatorList(this.operatorList),!this.running&&this._continue()}_continue(){this.running=!0,!this.cancelled&&(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}_scheduleNext(){this._useRequestAnimationFrame?window.requestAnimationFrame(()=>{this._nextBound().catch(this._cancelBound)}):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}async _next(){this.cancelled||(this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(this.pageColors),this._canvas&&E(y,M).delete(this._canvas),this.callback())))}};let InternalRenderTask=y;M=new WeakMap,st(InternalRenderTask,M,new WeakSet);const version="3.7.107";exports.version=version;const build="036f855dc";exports.build=build},(l,t,c)=>{var W,G,u,Cc,z;Object.defineProperty(t,"__esModule",{value:!0}),t.PrintAnnotationStorage=t.AnnotationStorage=void 0;var s=c(1),d=c(4),Z=c(8);class i{constructor(){st(this,u);st(this,W,!1);st(this,G,new Map);this.onSetModified=null,this.onResetModified=null,this.onAnnotationEditor=null}getValue(S,k){const L=E(this,G).get(S);return L===void 0?k:Object.assign(k,L)}getRawValue(S){return E(this,G).get(S)}remove(S){if(E(this,G).delete(S),E(this,G).size===0&&this.resetModified(),typeof this.onAnnotationEditor=="function"){for(const k of E(this,G).values())if(k instanceof d.AnnotationEditor)return;this.onAnnotationEditor(null)}}setValue(S,k){const L=E(this,G).get(S);let x=!1;if(L!==void 0)for(const[j,Q]of Object.entries(k))L[j]!==Q&&(x=!0,L[j]=Q);else x=!0,E(this,G).set(S,k);x&&it(this,u,Cc).call(this),k instanceof d.AnnotationEditor&&typeof this.onAnnotationEditor=="function"&&this.onAnnotationEditor(k.constructor._type)}has(S){return E(this,G).has(S)}getAll(){return E(this,G).size>0?(0,s.objectFromMap)(E(this,G)):null}setAll(S){for(const[k,L]of Object.entries(S))this.setValue(k,L)}get size(){return E(this,G).size}resetModified(){E(this,W)&&(mt(this,W,!1),typeof this.onResetModified=="function"&&this.onResetModified())}get print(){return new o(this)}get serializable(){if(E(this,G).size===0)return null;const S=new Map;for(const[k,L]of E(this,G)){const x=L instanceof d.AnnotationEditor?L.serialize():L;x&&S.set(k,x)}return S}static getHash(S){if(!S)return"";const k=new Z.MurmurHash3_64;for(const[L,x]of S)k.update(`${L}:${JSON.stringify(x)}`);return k.hexdigest()}}W=new WeakMap,G=new WeakMap,u=new WeakSet,Cc=function(){E(this,W)||(mt(this,W,!0),typeof this.onSetModified=="function"&&this.onSetModified())},t.AnnotationStorage=i;class o extends i{constructor(k){super();st(this,z,null);mt(this,z,structuredClone(k.serializable))}get print(){(0,s.unreachable)("Should not call PrintAnnotationStorage.print")}get serializable(){return E(this,z)}}z=new WeakMap,t.PrintAnnotationStorage=o},(l,t,c)=>{var i,o,W,G,u,X;Object.defineProperty(t,"__esModule",{value:!0}),t.AnnotationEditor=void 0;var s=c(5),d=c(1);const z=class{constructor(S){st(this,i,this.focusin.bind(this));st(this,o,this.focusout.bind(this));st(this,W,!1);st(this,G,!1);st(this,u,!1);jt(this,"_uiManager",null);st(this,X,z._zIndex++);this.constructor===z&&(0,d.unreachable)("Cannot initialize AnnotationEditor."),this.parent=S.parent,this.id=S.id,this.width=this.height=null,this.pageIndex=S.parent.pageIndex,this.name=S.name,this.div=null,this._uiManager=S.uiManager;const{rotation:k,rawDims:{pageWidth:L,pageHeight:x,pageX:j,pageY:Q}}=this.parent.viewport;this.rotation=k,this.pageRotation=(360+k-this._uiManager.viewParameters.rotation)%360,this.pageDimensions=[L,x],this.pageTranslation=[j,Q];const[J,M]=this.parentDimensions;this.x=S.x/J,this.y=S.y/M,this.isAttachedToDOM=!1}static get _defaultLineColor(){return(0,d.shadow)(this,"_defaultLineColor",this._colorManager.getHexCode("CanvasText"))}addCommands(S){this._uiManager.addCommands(S)}get currentLayer(){return this._uiManager.currentLayer}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=E(this,X)}setParent(S){S!==null&&(this.pageIndex=S.pageIndex,this.pageDimensions=S.pageDimensions),this.parent=S}focusin(S){E(this,W)?mt(this,W,!1):this.parent.setSelected(this)}focusout(S){var L;if(!this.isAttachedToDOM)return;const k=S.relatedTarget;k!=null&&k.closest(`#${this.id}`)||(S.preventDefault(),(L=this.parent)!=null&&L.isMultipleSelection||this.commitOrRemove())}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.addToAnnotationStorage()}addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)}dragstart(S){const k=this.parent.div.getBoundingClientRect();this.startX=S.clientX-k.x,this.startY=S.clientY-k.y,S.dataTransfer.setData("text/plain",this.id),S.dataTransfer.effectAllowed="move"}setAt(S,k,L,x){const[j,Q]=this.parentDimensions;[L,x]=this.screenToPageTranslation(L,x),this.x=(S+L)/j,this.y=(k+x)/Q,this.div.style.left=`${100*this.x}%`,this.div.style.top=`${100*this.y}%`}translate(S,k){const[L,x]=this.parentDimensions;[S,k]=this.screenToPageTranslation(S,k),this.x+=S/L,this.y+=k/x,this.div.style.left=`${100*this.x}%`,this.div.style.top=`${100*this.y}%`}screenToPageTranslation(S,k){switch(this.parentRotation){case 90:return[k,-S];case 180:return[-S,-k];case 270:return[-k,S];default:return[S,k]}}get parentScale(){return this._uiManager.viewParameters.realScale}get parentRotation(){return(this._uiManager.viewParameters.rotation+this.pageRotation)%360}get parentDimensions(){const{realScale:S}=this._uiManager.viewParameters,[k,L]=this.pageDimensions;return[k*S,L*S]}setDims(S,k){const[L,x]=this.parentDimensions;this.div.style.width=`${100*S/L}%`,this.div.style.height=`${100*k/x}%`}fixDims(){const{style:S}=this.div,{height:k,width:L}=S,x=L.endsWith("%"),j=k.endsWith("%");if(x&&j)return;const[Q,J]=this.parentDimensions;x||(S.width=`${100*parseFloat(L)/Q}%`),j||(S.height=`${100*parseFloat(k)/J}%`)}getInitialTranslation(){return[0,0]}render(){this.div=document.createElement("div"),this.div.setAttribute("data-editor-rotation",(360-this.rotation)%360),this.div.className=this.name,this.div.setAttribute("id",this.id),this.div.setAttribute("tabIndex",0),this.setInForeground(),this.div.addEventListener("focusin",E(this,i)),this.div.addEventListener("focusout",E(this,o));const[S,k]=this.getInitialTranslation();return this.translate(S,k),(0,s.bindEvents)(this,this.div,["dragstart","pointerdown"]),this.div}pointerdown(S){const{isMac:k}=d.FeatureTest.platform;if(S.button!==0||S.ctrlKey&&k){S.preventDefault();return}S.ctrlKey&&!k||S.shiftKey||S.metaKey&&k?this.parent.toggleSelected(this):this.parent.setSelected(this),mt(this,W,!0)}getRect(S,k){const L=this.parentScale,[x,j]=this.pageDimensions,[Q,J]=this.pageTranslation,M=S/L,y=k/L,Y=this.x*x,m=this.y*j,D=this.width*x,H=this.height*j;switch(this.rotation){case 0:return[Y+M+Q,j-m-y-H+J,Y+M+D+Q,j-m-y+J];case 90:return[Y+y+Q,j-m+M+J,Y+y+H+Q,j-m+M+D+J];case 180:return[Y-M-D+Q,j-m+y+J,Y-M+Q,j-m+y+H+J];case 270:return[Y-y-H+Q,j-m-M-D+J,Y-y+Q,j-m-M+J];default:throw new Error("Invalid rotation")}}getRectInCurrentCoords(S,k){const[L,x,j,Q]=S,J=j-L,M=Q-x;switch(this.rotation){case 0:return[L,k-Q,J,M];case 90:return[L,k-x,M,J];case 180:return[j,k-x,J,M];case 270:return[j,k-Q,M,J];default:throw new Error("Invalid rotation")}}onceAdded(){}isEmpty(){return!1}enableEditMode(){mt(this,u,!0)}disableEditMode(){mt(this,u,!1)}isInEditMode(){return E(this,u)}shouldGetKeyboardEvents(){return!1}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}rebuild(){var S;(S=this.div)==null||S.addEventListener("focusin",E(this,i))}serialize(){(0,d.unreachable)("An editor must be serializable")}static deserialize(S,k,L){const x=new this.prototype.constructor({parent:k,id:k.getNextId(),uiManager:L});x.rotation=S.rotation;const[j,Q]=x.pageDimensions,[J,M,y,Y]=x.getRectInCurrentCoords(S.rect,Q);return x.x=J/j,x.y=M/Q,x.width=y/j,x.height=Y/Q,x}remove(){this.div.removeEventListener("focusin",E(this,i)),this.div.removeEventListener("focusout",E(this,o)),this.isEmpty()||this.commit(),this.parent.remove(this)}select(){var S;(S=this.div)==null||S.classList.add("selectedEditor")}unselect(){var S;(S=this.div)==null||S.classList.remove("selectedEditor")}updateParams(S,k){}disableEditing(){}enableEditing(){}get propertiesToUpdate(){return{}}get contentDiv(){return this.div}get isEditing(){return E(this,G)}set isEditing(S){mt(this,G,S),S?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null)}};let Z=z;i=new WeakMap,o=new WeakMap,W=new WeakMap,G=new WeakMap,u=new WeakMap,X=new WeakMap,jt(Z,"_colorManager",new s.ColorManager),jt(Z,"_zIndex",1),t.AnnotationEditor=Z},(l,t,c)=>{var z,R,S,k,L,x,gc,J,M,y,Y,m,D,H,V,v,A,Nl,fl,Xl,Zt,lt,at,Wt,Mt,Nt,Vt,Ml,U,g,O,Ec,P,Yc,cl,Kc,w,Qc,N,Qt,C,cc,f,vc,Wl,Hc,Tl,Xc,tt,sc,bt,yc;Object.defineProperty(t,"__esModule",{value:!0}),t.KeyboardManager=t.CommandManager=t.ColorManager=t.AnnotationEditorUIManager=void 0,t.bindEvents=Z,t.opacityToHex=i;var s=c(1),d=c(6);function Z(yt,Ll,Gt){for(const Lt of Gt)Ll.addEventListener(Lt,yt[Lt].bind(yt))}function i(yt){return Math.round(Math.min(255,Math.max(1,255*yt))).toString(16).padStart(2,"0")}class o{constructor(){st(this,z,0)}getId(){return`${s.AnnotationEditorPrefix}${bc(this,z)._++}`}}z=new WeakMap;class W{constructor(Ll=128){st(this,R,[]);st(this,S,!1);st(this,k,void 0);st(this,L,-1);mt(this,k,Ll)}add({cmd:Ll,undo:Gt,mustExec:Lt,type:It=NaN,overwriteIfSameType:et=!1,keepUndo:rl=!1}){if(Lt&&Ll(),E(this,S))return;const _l={cmd:Ll,undo:Gt,type:It};if(E(this,L)===-1){E(this,R).length>0&&(E(this,R).length=0),mt(this,L,0),E(this,R).push(_l);return}if(et&&E(this,R)[E(this,L)].type===It){rl&&(_l.undo=E(this,R)[E(this,L)].undo),E(this,R)[E(this,L)]=_l;return}const ot=E(this,L)+1;ot===E(this,k)?E(this,R).splice(0,1):(mt(this,L,ot),otet===Gt[rl]))return Q._colorsMapping.get(Lt);return Gt}getHexCode(Ll){const Gt=this._colors.get(Ll);return Gt?s.Util.makeHexColor(...Gt):Ll}};let u=Q;jt(u,"_colorsMapping",new Map([["CanvasText",[0,0,0]],["Canvas",[255,255,255]]])),t.ColorManager=u;const ht=class{constructor(Ll,Gt,Lt){st(this,O);st(this,P);st(this,cl);st(this,w);st(this,N);st(this,C);st(this,f);st(this,Wl);st(this,Tl);st(this,tt);st(this,bt);st(this,J,null);st(this,M,new Map);st(this,y,new Map);st(this,Y,null);st(this,m,new W);st(this,D,0);st(this,H,null);st(this,V,new Set);st(this,v,null);st(this,A,new o);st(this,Nl,!1);st(this,fl,s.AnnotationEditorType.NONE);st(this,Xl,new Set);st(this,Zt,this.copy.bind(this));st(this,lt,this.cut.bind(this));st(this,at,this.paste.bind(this));st(this,Wt,this.keydown.bind(this));st(this,Mt,this.onEditingAction.bind(this));st(this,Nt,this.onPageChanging.bind(this));st(this,Vt,this.onScaleChanging.bind(this));st(this,Ml,this.onRotationChanging.bind(this));st(this,U,{isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1});st(this,g,null);mt(this,g,Ll),mt(this,v,Gt),E(this,v)._on("editingaction",E(this,Mt)),E(this,v)._on("pagechanging",E(this,Nt)),E(this,v)._on("scalechanging",E(this,Vt)),E(this,v)._on("rotationchanging",E(this,Ml)),mt(this,Y,Lt),this.viewParameters={realScale:d.PixelsPerInch.PDF_TO_CSS_UNITS,rotation:0}}destroy(){it(this,P,Yc).call(this),E(this,v)._off("editingaction",E(this,Mt)),E(this,v)._off("pagechanging",E(this,Nt)),E(this,v)._off("scalechanging",E(this,Vt)),E(this,v)._off("rotationchanging",E(this,Ml));for(const Ll of E(this,y).values())Ll.destroy();E(this,y).clear(),E(this,M).clear(),E(this,V).clear(),mt(this,J,null),E(this,Xl).clear(),E(this,m).destroy()}onPageChanging({pageNumber:Ll}){mt(this,D,Ll-1)}focusMainContainer(){E(this,g).focus()}addShouldRescale(Ll){E(this,V).add(Ll)}removeShouldRescale(Ll){E(this,V).delete(Ll)}onScaleChanging({scale:Ll}){this.commitOrRemove(),this.viewParameters.realScale=Ll*d.PixelsPerInch.PDF_TO_CSS_UNITS;for(const Gt of E(this,V))Gt.onScaleChanging()}onRotationChanging({pagesRotation:Ll}){this.commitOrRemove(),this.viewParameters.rotation=Ll}addToAnnotationStorage(Ll){!Ll.isEmpty()&&E(this,Y)&&!E(this,Y).has(Ll.id)&&E(this,Y).setValue(Ll.id,Ll)}copy(Ll){if(Ll.preventDefault(),E(this,J)&&E(this,J).commitOrRemove(),!this.hasSelection)return;const Gt=[];for(const Lt of E(this,Xl))Lt.isEmpty()||Gt.push(Lt.serialize());Gt.length!==0&&Ll.clipboardData.setData("application/pdfjs",JSON.stringify(Gt))}cut(Ll){this.copy(Ll),this.delete()}paste(Ll){Ll.preventDefault();let Gt=Ll.clipboardData.getData("application/pdfjs");if(!Gt)return;try{Gt=JSON.parse(Gt)}catch(It){(0,s.warn)(`paste: "${It.message}".`);return}if(!Array.isArray(Gt))return;this.unselectAll();const Lt=E(this,y).get(E(this,D));try{const It=[];for(const _l of Gt){const ot=Lt.deserialize(_l);if(!ot)return;It.push(ot)}const et=()=>{for(const _l of It)it(this,Tl,Xc).call(this,_l);it(this,bt,yc).call(this,It)},rl=()=>{for(const _l of It)_l.remove()};this.addCommands({cmd:et,undo:rl,mustExec:!0})}catch(It){(0,s.warn)(`paste: "${It.message}".`)}}keydown(Ll){var Gt;(Gt=this.getActive())!=null&&Gt.shouldGetKeyboardEvents()||ht._keyboardManager.exec(this,Ll)}onEditingAction(Ll){["undo","redo","delete","selectAll"].includes(Ll.name)&&this[Ll.name]()}setEditingState(Ll){Ll?(it(this,O,Ec).call(this),it(this,cl,Kc).call(this),it(this,N,Qt).call(this,{isEditing:E(this,fl)!==s.AnnotationEditorType.NONE,isEmpty:it(this,tt,sc).call(this),hasSomethingToUndo:E(this,m).hasSomethingToUndo(),hasSomethingToRedo:E(this,m).hasSomethingToRedo(),hasSelectedEditor:!1})):(it(this,P,Yc).call(this),it(this,w,Qc).call(this),it(this,N,Qt).call(this,{isEditing:!1}))}registerEditorTypes(Ll){if(!E(this,H)){mt(this,H,Ll);for(const Gt of E(this,H))it(this,C,cc).call(this,Gt.defaultPropertiesToUpdate)}}getId(){return E(this,A).getId()}get currentLayer(){return E(this,y).get(E(this,D))}get currentPageIndex(){return E(this,D)}addLayer(Ll){E(this,y).set(Ll.pageIndex,Ll),E(this,Nl)?Ll.enable():Ll.disable()}removeLayer(Ll){E(this,y).delete(Ll.pageIndex)}updateMode(Ll){if(mt(this,fl,Ll),Ll===s.AnnotationEditorType.NONE)this.setEditingState(!1),it(this,Wl,Hc).call(this);else{this.setEditingState(!0),it(this,f,vc).call(this);for(const Gt of E(this,y).values())Gt.updateMode(Ll)}}updateToolbar(Ll){Ll!==E(this,fl)&&E(this,v).dispatch("switchannotationeditormode",{source:this,mode:Ll})}updateParams(Ll,Gt){if(E(this,H)){for(const Lt of E(this,Xl))Lt.updateParams(Ll,Gt);for(const Lt of E(this,H))Lt.updateDefaultParams(Ll,Gt)}}getEditors(Ll){const Gt=[];for(const Lt of E(this,M).values())Lt.pageIndex===Ll&&Gt.push(Lt);return Gt}getEditor(Ll){return E(this,M).get(Ll)}addEditor(Ll){E(this,M).set(Ll.id,Ll)}removeEditor(Ll){var Gt;E(this,M).delete(Ll.id),this.unselect(Ll),(Gt=E(this,Y))==null||Gt.remove(Ll.id)}setActiveEditor(Ll){E(this,J)!==Ll&&(mt(this,J,Ll),Ll&&it(this,C,cc).call(this,Ll.propertiesToUpdate))}toggleSelected(Ll){if(E(this,Xl).has(Ll)){E(this,Xl).delete(Ll),Ll.unselect(),it(this,N,Qt).call(this,{hasSelectedEditor:this.hasSelection});return}E(this,Xl).add(Ll),Ll.select(),it(this,C,cc).call(this,Ll.propertiesToUpdate),it(this,N,Qt).call(this,{hasSelectedEditor:!0})}setSelected(Ll){for(const Gt of E(this,Xl))Gt!==Ll&&Gt.unselect();E(this,Xl).clear(),E(this,Xl).add(Ll),Ll.select(),it(this,C,cc).call(this,Ll.propertiesToUpdate),it(this,N,Qt).call(this,{hasSelectedEditor:!0})}isSelected(Ll){return E(this,Xl).has(Ll)}unselect(Ll){Ll.unselect(),E(this,Xl).delete(Ll),it(this,N,Qt).call(this,{hasSelectedEditor:this.hasSelection})}get hasSelection(){return E(this,Xl).size!==0}undo(){E(this,m).undo(),it(this,N,Qt).call(this,{hasSomethingToUndo:E(this,m).hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:it(this,tt,sc).call(this)})}redo(){E(this,m).redo(),it(this,N,Qt).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:E(this,m).hasSomethingToRedo(),isEmpty:it(this,tt,sc).call(this)})}addCommands(Ll){E(this,m).add(Ll),it(this,N,Qt).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:it(this,tt,sc).call(this)})}delete(){if(this.commitOrRemove(),!this.hasSelection)return;const Ll=[...E(this,Xl)],Gt=()=>{for(const It of Ll)It.remove()},Lt=()=>{for(const It of Ll)it(this,Tl,Xc).call(this,It)};this.addCommands({cmd:Gt,undo:Lt,mustExec:!0})}commitOrRemove(){var Ll;(Ll=E(this,J))==null||Ll.commitOrRemove()}selectAll(){for(const Ll of E(this,Xl))Ll.commit();it(this,bt,yc).call(this,E(this,M).values())}unselectAll(){if(E(this,J)){E(this,J).commitOrRemove();return}if(E(this,Xl).size!==0){for(const Ll of E(this,Xl))Ll.unselect();E(this,Xl).clear(),it(this,N,Qt).call(this,{hasSelectedEditor:!1})}}isActive(Ll){return E(this,J)===Ll}getActive(){return E(this,J)}getMode(){return E(this,fl)}};let X=ht;J=new WeakMap,M=new WeakMap,y=new WeakMap,Y=new WeakMap,m=new WeakMap,D=new WeakMap,H=new WeakMap,V=new WeakMap,v=new WeakMap,A=new WeakMap,Nl=new WeakMap,fl=new WeakMap,Xl=new WeakMap,Zt=new WeakMap,lt=new WeakMap,at=new WeakMap,Wt=new WeakMap,Mt=new WeakMap,Nt=new WeakMap,Vt=new WeakMap,Ml=new WeakMap,U=new WeakMap,g=new WeakMap,O=new WeakSet,Ec=function(){E(this,g).addEventListener("keydown",E(this,Wt))},P=new WeakSet,Yc=function(){E(this,g).removeEventListener("keydown",E(this,Wt))},cl=new WeakSet,Kc=function(){document.addEventListener("copy",E(this,Zt)),document.addEventListener("cut",E(this,lt)),document.addEventListener("paste",E(this,at))},w=new WeakSet,Qc=function(){document.removeEventListener("copy",E(this,Zt)),document.removeEventListener("cut",E(this,lt)),document.removeEventListener("paste",E(this,at))},N=new WeakSet,Qt=function(Ll){Object.entries(Ll).some(([Lt,It])=>E(this,U)[Lt]!==It)&&E(this,v).dispatch("annotationeditorstateschanged",{source:this,details:Object.assign(E(this,U),Ll)})},C=new WeakSet,cc=function(Ll){E(this,v).dispatch("annotationeditorparamschanged",{source:this,details:Ll})},f=new WeakSet,vc=function(){if(!E(this,Nl)){mt(this,Nl,!0);for(const Ll of E(this,y).values())Ll.enable()}},Wl=new WeakSet,Hc=function(){if(this.unselectAll(),E(this,Nl)){mt(this,Nl,!1);for(const Ll of E(this,y).values())Ll.disable()}},Tl=new WeakSet,Xc=function(Ll){const Gt=E(this,y).get(Ll.pageIndex);Gt?Gt.addOrRebuild(Ll):this.addEditor(Ll)},tt=new WeakSet,sc=function(){if(E(this,M).size===0)return!0;if(E(this,M).size===1)for(const Ll of E(this,M).values())return Ll.isEmpty();return!1},bt=new WeakSet,yc=function(Ll){E(this,Xl).clear();for(const Gt of Ll)Gt.isEmpty()||(E(this,Xl).add(Gt),Gt.select());it(this,N,Qt).call(this,{hasSelectedEditor:!0})},jt(X,"_keyboardManager",new G([[["ctrl+a","mac+meta+a"],ht.prototype.selectAll],[["ctrl+z","mac+meta+z"],ht.prototype.undo],[["ctrl+y","ctrl+shift+Z","mac+meta+shift+Z"],ht.prototype.redo],[["Backspace","alt+Backspace","ctrl+Backspace","shift+Backspace","mac+Backspace","mac+alt+Backspace","mac+ctrl+Backspace","Delete","ctrl+Delete","shift+Delete"],ht.prototype.delete],[["Escape","mac+Escape"],ht.prototype.unselectAll]])),t.AnnotationEditorUIManager=X},(l,t,c)=>{var Zt,lt,at,Wt,Mt,Nt,Vt,Ml,U,$t,O,ft,P,vt;Object.defineProperty(t,"__esModule",{value:!0}),t.StatTimer=t.RenderingCancelledException=t.PixelsPerInch=t.PageViewport=t.PDFDateString=t.DOMStandardFontDataFactory=t.DOMSVGFactory=t.DOMFilterFactory=t.DOMCanvasFactory=t.DOMCMapReaderFactory=t.AnnotationPrefix=void 0,t.deprecated=Y,t.getColorValues=v,t.getCurrentTransform=A,t.getCurrentTransformInverse=Nl,t.getFilenameFromUrl=j,t.getPdfFilenameFromUrl=Q,t.getRGB=V,t.getXfaPageViewport=H,t.isDataScheme=L,t.isPdfFile=x,t.isValidFetchUrl=M,t.loadScript=y,t.setLayerDimensions=fl;var s=c(7),d=c(1);const Z="http://www.w3.org/2000/svg",i="pdfjs_internal_id_";t.AnnotationPrefix=i;const Xl=class{};let o=Xl;jt(o,"CSS",96),jt(o,"PDF",72),jt(o,"PDF_TO_CSS_UNITS",Xl.CSS/Xl.PDF),t.PixelsPerInch=o;class W extends s.BaseFilterFactory{constructor({docId:w,ownerDocument:b=globalThis.document}={}){super();st(this,U);st(this,O);st(this,P);st(this,Zt,void 0);st(this,lt,void 0);st(this,at,void 0);st(this,Wt,void 0);st(this,Mt,void 0);st(this,Nt,void 0);st(this,Vt,void 0);st(this,Ml,0);mt(this,at,w),mt(this,Wt,b)}addFilter(w){if(!w)return"none";let b=E(this,U,$t).get(w);if(b)return b;let N,I,C,K;if(w.length===1){const Tl=w[0],$l=new Array(256);for(let tt=0;tt<256;tt++)$l[tt]=Tl[tt]/255;K=N=I=C=$l.join(",")}else{const[Tl,$l,tt]=w,dt=new Array(256),bt=new Array(256),ut=new Array(256);for(let ht=0;ht<256;ht++)dt[ht]=Tl[ht]/255,bt[ht]=$l[ht]/255,ut[ht]=tt[ht]/255;N=dt.join(","),I=bt.join(","),C=ut.join(","),K=`${N}${I}${C}`}if(b=E(this,U,$t).get(K),b)return E(this,U,$t).set(w,b),b;const f=`g_${E(this,at)}_transfer_map_${bc(this,Ml)._++}`,Yl=`url(#${f})`;E(this,U,$t).set(w,Yl),E(this,U,$t).set(K,Yl);const Wl=E(this,Wt).createElementNS(Z,"filter",Z);Wl.setAttribute("id",f),Wl.setAttribute("color-interpolation-filters","sRGB");const Vl=E(this,Wt).createElementNS(Z,"feComponentTransfer");return Wl.append(Vl),it(this,P,vt).call(this,Vl,"feFuncR",N),it(this,P,vt).call(this,Vl,"feFuncG",I),it(this,P,vt).call(this,Vl,"feFuncB",C),E(this,O,ft).append(Wl),Yl}addHCMFilter(w,b){var tt;const N=`${w}-${b}`;if(E(this,Nt)===N)return E(this,Vt);if(mt(this,Nt,N),mt(this,Vt,"none"),(tt=E(this,Mt))==null||tt.remove(),!w||!b)return E(this,Vt);E(this,O,ft).style.color=w,w=getComputedStyle(E(this,O,ft)).getPropertyValue("color");const I=V(w);w=d.Util.makeHexColor(...I),E(this,O,ft).style.color=b,b=getComputedStyle(E(this,O,ft)).getPropertyValue("color");const C=V(b);if(b=d.Util.makeHexColor(...C),E(this,O,ft).style.color="",w==="#000000"&&b==="#ffffff"||w===b)return E(this,Vt);const K=new Array(256);for(let dt=0;dt<=255;dt++){const bt=dt/255;K[dt]=bt<=.03928?bt/12.92:((bt+.055)/1.055)**2.4}const f=K.join(","),Yl=`g_${E(this,at)}_hcm_filter`,Wl=mt(this,Mt,E(this,Wt).createElementNS(Z,"filter",Z));Wl.setAttribute("id",Yl),Wl.setAttribute("color-interpolation-filters","sRGB");let Vl=E(this,Wt).createElementNS(Z,"feComponentTransfer");Wl.append(Vl),it(this,P,vt).call(this,Vl,"feFuncR",f),it(this,P,vt).call(this,Vl,"feFuncG",f),it(this,P,vt).call(this,Vl,"feFuncB",f);const Tl=E(this,Wt).createElementNS(Z,"feColorMatrix");Tl.setAttribute("type","matrix"),Tl.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"),Wl.append(Tl),Vl=E(this,Wt).createElementNS(Z,"feComponentTransfer"),Wl.append(Vl);const $l=(dt,bt)=>{const ut=I[dt]/255,ht=C[dt]/255,yt=new Array(bt+1);for(let Ll=0;Ll<=bt;Ll++)yt[Ll]=ut+Ll/bt*(ht-ut);return yt.join(",")};return it(this,P,vt).call(this,Vl,"feFuncR",$l(0,5)),it(this,P,vt).call(this,Vl,"feFuncG",$l(1,5)),it(this,P,vt).call(this,Vl,"feFuncB",$l(2,5)),E(this,O,ft).append(Wl),mt(this,Vt,`url(#${Yl})`),E(this,Vt)}destroy(w=!1){w&&E(this,Vt)||(E(this,lt)&&(E(this,lt).parentNode.parentNode.remove(),mt(this,lt,null)),E(this,Zt)&&(E(this,Zt).clear(),mt(this,Zt,null)),mt(this,Ml,0))}}Zt=new WeakMap,lt=new WeakMap,at=new WeakMap,Wt=new WeakMap,Mt=new WeakMap,Nt=new WeakMap,Vt=new WeakMap,Ml=new WeakMap,U=new WeakSet,$t=function(){return E(this,Zt)||mt(this,Zt,new Map)},O=new WeakSet,ft=function(){if(!E(this,lt)){const w=E(this,Wt).createElement("div"),{style:b}=w;b.visibility="hidden",b.contain="strict",b.width=b.height=0,b.position="absolute",b.top=b.left=0,b.zIndex=-1;const N=E(this,Wt).createElementNS(Z,"svg");N.setAttribute("width",0),N.setAttribute("height",0),mt(this,lt,E(this,Wt).createElementNS(Z,"defs")),w.append(N),N.append(E(this,lt)),E(this,Wt).body.append(w)}return E(this,lt)},P=new WeakSet,vt=function(w,b,N){const I=E(this,Wt).createElementNS(Z,b);I.setAttribute("type","discrete"),I.setAttribute("tableValues",N),w.append(I)},t.DOMFilterFactory=W;class G extends s.BaseCanvasFactory{constructor({ownerDocument:T=globalThis.document}={}){super(),this._document=T}_createCanvas(T,w){const b=this._document.createElement("canvas");return b.width=T,b.height=w,b}}t.DOMCanvasFactory=G;async function u(cl,T=!1){if(M(cl,document.baseURI)){const w=await fetch(cl);if(!w.ok)throw new Error(w.statusText);return T?new Uint8Array(await w.arrayBuffer()):(0,d.stringToBytes)(await w.text())}return new Promise((w,b)=>{const N=new XMLHttpRequest;N.open("GET",cl,!0),T&&(N.responseType="arraybuffer"),N.onreadystatechange=()=>{if(N.readyState===XMLHttpRequest.DONE){if(N.status===200||N.status===0){let I;if(T&&N.response?I=new Uint8Array(N.response):!T&&N.responseText&&(I=(0,d.stringToBytes)(N.responseText)),I){w(I);return}}b(new Error(N.statusText))}},N.send(null)})}class X extends s.BaseCMapReaderFactory{_fetchData(T,w){return u(T,this.isCompressed).then(b=>({cMapData:b,compressionType:w}))}}t.DOMCMapReaderFactory=X;class z extends s.BaseStandardFontDataFactory{_fetchData(T){return u(T,!0)}}t.DOMStandardFontDataFactory=z;class R extends s.BaseSVGFactory{_createSVG(T){return document.createElementNS(Z,T)}}t.DOMSVGFactory=R;class S{constructor({viewBox:T,scale:w,rotation:b,offsetX:N=0,offsetY:I=0,dontFlip:C=!1}){this.viewBox=T,this.scale=w,this.rotation=b,this.offsetX=N,this.offsetY=I;const K=(T[2]+T[0])/2,f=(T[3]+T[1])/2;let Yl,Wl,Vl,Tl;switch(b%=360,b<0&&(b+=360),b){case 180:Yl=-1,Wl=0,Vl=0,Tl=1;break;case 90:Yl=0,Wl=1,Vl=1,Tl=0;break;case 270:Yl=0,Wl=-1,Vl=-1,Tl=0;break;case 0:Yl=1,Wl=0,Vl=0,Tl=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}C&&(Vl=-Vl,Tl=-Tl);let $l,tt,dt,bt;Yl===0?($l=Math.abs(f-T[1])*w+N,tt=Math.abs(K-T[0])*w+I,dt=(T[3]-T[1])*w,bt=(T[2]-T[0])*w):($l=Math.abs(K-T[0])*w+N,tt=Math.abs(f-T[1])*w+I,dt=(T[2]-T[0])*w,bt=(T[3]-T[1])*w),this.transform=[Yl*w,Wl*w,Vl*w,Tl*w,$l-Yl*w*K-Vl*w*f,tt-Wl*w*K-Tl*w*f],this.width=dt,this.height=bt}get rawDims(){const{viewBox:T}=this;return(0,d.shadow)(this,"rawDims",{pageWidth:T[2]-T[0],pageHeight:T[3]-T[1],pageX:T[0],pageY:T[1]})}clone({scale:T=this.scale,rotation:w=this.rotation,offsetX:b=this.offsetX,offsetY:N=this.offsetY,dontFlip:I=!1}={}){return new S({viewBox:this.viewBox.slice(),scale:T,rotation:w,offsetX:b,offsetY:N,dontFlip:I})}convertToViewportPoint(T,w){return d.Util.applyTransform([T,w],this.transform)}convertToViewportRectangle(T){const w=d.Util.applyTransform([T[0],T[1]],this.transform),b=d.Util.applyTransform([T[2],T[3]],this.transform);return[w[0],w[1],b[0],b[1]]}convertToPdfPoint(T,w){return d.Util.applyInverseTransform([T,w],this.transform)}}t.PageViewport=S;class k extends d.BaseException{constructor(T,w,b=0){super(T,"RenderingCancelledException"),this.type=w,this.extraDelay=b}}t.RenderingCancelledException=k;function L(cl){const T=cl.length;let w=0;for(;w{const N=document.createElement("script");N.src=cl,N.onload=function(I){T&&N.remove(),w(I)},N.onerror=function(){b(new Error(`Cannot load script at: ${N.src}`))},(document.head||document.documentElement).append(N)})}function Y(cl){console.log("Deprecated API usage: "+cl)}let m;class D{static toDateObject(T){if(!T||typeof T!="string")return null;m||(m=new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));const w=m.exec(T);if(!w)return null;const b=parseInt(w[1],10);let N=parseInt(w[2],10);N=N>=1&&N<=12?N-1:0;let I=parseInt(w[3],10);I=I>=1&&I<=31?I:1;let C=parseInt(w[4],10);C=C>=0&&C<=23?C:0;let K=parseInt(w[5],10);K=K>=0&&K<=59?K:0;let f=parseInt(w[6],10);f=f>=0&&f<=59?f:0;const Yl=w[7]||"Z";let Wl=parseInt(w[8],10);Wl=Wl>=0&&Wl<=23?Wl:0;let Vl=parseInt(w[9],10)||0;return Vl=Vl>=0&&Vl<=59?Vl:0,Yl==="-"?(C+=Wl,K+=Vl):Yl==="+"&&(C-=Wl,K-=Vl),new Date(Date.UTC(b,N,I,C,K,f))}}t.PDFDateString=D;function H(cl,{scale:T=1,rotation:w=0}){const{width:b,height:N}=cl.attributes.style,I=[0,0,parseInt(b),parseInt(N)];return new S({viewBox:I,scale:T,rotation:w})}function V(cl){if(cl.startsWith("#")){const T=parseInt(cl.slice(1),16);return[(T&16711680)>>16,(T&65280)>>8,T&255]}return cl.startsWith("rgb(")?cl.slice(4,-1).split(",").map(T=>parseInt(T)):cl.startsWith("rgba(")?cl.slice(5,-1).split(",").map(T=>parseInt(T)).slice(0,3):((0,d.warn)(`Not a valid color format: "${cl}"`),[0,0,0])}function v(cl){const T=document.createElement("span");T.style.visibility="hidden",document.body.append(T);for(const w of cl.keys()){T.style.color=w;const b=window.getComputedStyle(T).color;cl.set(w,V(b))}T.remove()}function A(cl){const{a:T,b:w,c:b,d:N,e:I,f:C}=cl.getTransform();return[T,w,b,N,I,C]}function Nl(cl){const{a:T,b:w,c:b,d:N,e:I,f:C}=cl.getTransform().invertSelf();return[T,w,b,N,I,C]}function fl(cl,T,w=!1,b=!0){if(T instanceof S){const{pageWidth:N,pageHeight:I}=T.rawDims,{style:C}=cl,K=`calc(var(--scale-factor) * ${N}px)`,f=`calc(var(--scale-factor) * ${I}px)`;!w||T.rotation%180===0?(C.width=K,C.height=f):(C.width=f,C.height=K)}b&&cl.setAttribute("data-main-rotation",T.rotation)}},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseStandardFontDataFactory=t.BaseSVGFactory=t.BaseFilterFactory=t.BaseCanvasFactory=t.BaseCMapReaderFactory=void 0;var s=c(1);class d{constructor(){this.constructor===d&&(0,s.unreachable)("Cannot initialize BaseFilterFactory.")}addFilter(u){return"none"}addHCMFilter(u,X){return"none"}destroy(u=!1){}}t.BaseFilterFactory=d;class Z{constructor(){this.constructor===Z&&(0,s.unreachable)("Cannot initialize BaseCanvasFactory.")}create(u,X){if(u<=0||X<=0)throw new Error("Invalid canvas size");const z=this._createCanvas(u,X);return{canvas:z,context:z.getContext("2d")}}reset(u,X,z){if(!u.canvas)throw new Error("Canvas is not specified");if(X<=0||z<=0)throw new Error("Invalid canvas size");u.canvas.width=X,u.canvas.height=z}destroy(u){if(!u.canvas)throw new Error("Canvas is not specified");u.canvas.width=0,u.canvas.height=0,u.canvas=null,u.context=null}_createCanvas(u,X){(0,s.unreachable)("Abstract method `_createCanvas` called.")}}t.BaseCanvasFactory=Z;class i{constructor({baseUrl:u=null,isCompressed:X=!0}){this.constructor===i&&(0,s.unreachable)("Cannot initialize BaseCMapReaderFactory."),this.baseUrl=u,this.isCompressed=X}async fetch({name:u}){if(!this.baseUrl)throw new Error('The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.');if(!u)throw new Error("CMap name must be specified.");const X=this.baseUrl+u+(this.isCompressed?".bcmap":""),z=this.isCompressed?s.CMapCompressionType.BINARY:s.CMapCompressionType.NONE;return this._fetchData(X,z).catch(R=>{throw new Error(`Unable to load ${this.isCompressed?"binary ":""}CMap at: ${X}`)})}_fetchData(u,X){(0,s.unreachable)("Abstract method `_fetchData` called.")}}t.BaseCMapReaderFactory=i;class o{constructor({baseUrl:u=null}){this.constructor===o&&(0,s.unreachable)("Cannot initialize BaseStandardFontDataFactory."),this.baseUrl=u}async fetch({filename:u}){if(!this.baseUrl)throw new Error('The standard font "baseUrl" parameter must be specified, ensure that the "standardFontDataUrl" API parameter is provided.');if(!u)throw new Error("Font filename must be specified.");const X=`${this.baseUrl}${u}`;return this._fetchData(X).catch(z=>{throw new Error(`Unable to load font data at: ${X}`)})}_fetchData(u){(0,s.unreachable)("Abstract method `_fetchData` called.")}}t.BaseStandardFontDataFactory=o;class W{constructor(){this.constructor===W&&(0,s.unreachable)("Cannot initialize BaseSVGFactory.")}create(u,X,z=!1){if(u<=0||X<=0)throw new Error("Invalid SVG dimensions");const R=this._createSVG("svg:svg");return R.setAttribute("version","1.1"),z||(R.setAttribute("width",`${u}px`),R.setAttribute("height",`${X}px`)),R.setAttribute("preserveAspectRatio","none"),R.setAttribute("viewBox",`0 0 ${u} ${X}`),R}createElement(u){if(typeof u!="string")throw new Error("Invalid SVG element type");return this._createSVG(u)}_createSVG(u){(0,s.unreachable)("Abstract method `_createSVG` called.")}}t.BaseSVGFactory=W},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MurmurHash3_64=void 0;var s=c(1);const d=3285377520,Z=4294901760,i=65535;class o{constructor(G){this.h1=G?G&4294967295:d,this.h2=G?G&4294967295:d}update(G){let u,X;if(typeof G=="string"){u=new Uint8Array(G.length*2),X=0;for(let Y=0,m=G.length;Y>>8,u[X++]=D&255)}}else if((0,s.isArrayBuffer)(G))u=G.slice(),X=u.byteLength;else throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");const z=X>>2,R=X-z*4,S=new Uint32Array(u.buffer,0,z);let k=0,L=0,x=this.h1,j=this.h2;const Q=3432918353,J=461845907,M=Q&i,y=J&i;for(let Y=0;Y>>17,k=k*J&Z|k*y&i,x^=k,x=x<<13|x>>>19,x=x*5+3864292196):(L=S[Y],L=L*Q&Z|L*M&i,L=L<<15|L>>>17,L=L*J&Z|L*y&i,j^=L,j=j<<13|j>>>19,j=j*5+3864292196);switch(k=0,R){case 3:k^=u[z*4+2]<<16;case 2:k^=u[z*4+1]<<8;case 1:k^=u[z*4],k=k*Q&Z|k*M&i,k=k<<15|k>>>17,k=k*J&Z|k*y&i,z&1?x^=k:j^=k}this.h1=x,this.h2=j}hexdigest(){let G=this.h1,u=this.h2;return G^=u>>>1,G=G*3981806797&Z|G*36045&i,u=u*4283543511&Z|((u<<16|G>>>16)*2950163797&Z)>>>16,G^=u>>>1,G=G*444984403&Z|G*60499&i,u=u*3301882366&Z|((u<<16|G>>>16)*3120437893&Z)>>>16,G^=u>>>1,(G>>>0).toString(16).padStart(8,"0")+(u>>>0).toString(16).padStart(8,"0")}}t.MurmurHash3_64=o},(l,t,c)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.FontLoader=t.FontFaceObject=void 0;var s=c(1),d=c(10);class Z{constructor({ownerDocument:G=globalThis.document,styleElement:u=null}){st(this,o,new Set);this._document=G,this.nativeFontFaces=new Set,this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(G){this.nativeFontFaces.add(G),this._document.fonts.add(G)}removeNativeFontFace(G){this.nativeFontFaces.delete(G),this._document.fonts.delete(G)}insertRule(G){this.styleElement||(this.styleElement=this._document.createElement("style"),this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));const u=this.styleElement.sheet;u.insertRule(G,u.cssRules.length)}clear(){for(const G of this.nativeFontFaces)this._document.fonts.delete(G);this.nativeFontFaces.clear(),E(this,o).clear(),this.styleElement&&(this.styleElement.remove(),this.styleElement=null)}async loadSystemFont(G){if(!(!G||E(this,o).has(G.loadedName))){if((0,s.assert)(!this.disableFontFace,"loadSystemFont shouldn't be called when `disableFontFace` is set."),this.isFontLoadingAPISupported){const{loadedName:u,src:X,style:z}=G,R=new FontFace(u,X,z);this.addNativeFontFace(R);try{await R.load(),E(this,o).add(u)}catch{(0,s.warn)(`Cannot load system font: ${G.baseFontName}, installing it could help to improve PDF rendering.`),this.removeNativeFontFace(R)}return}(0,s.unreachable)("Not implemented: loadSystemFont without the Font Loading API.")}}async bind(G){if(G.attached||G.missingFile&&!G.systemFontInfo)return;if(G.attached=!0,G.systemFontInfo){await this.loadSystemFont(G.systemFontInfo);return}if(this.isFontLoadingAPISupported){const X=G.createNativeFontFace();if(X){this.addNativeFontFace(X);try{await X.loaded}catch(z){throw(0,s.warn)(`Failed to load font '${X.family}': '${z}'.`),G.disableFontFace=!0,z}}return}const u=G.createFontFaceRule();if(u){if(this.insertRule(u),this.isSyncFontLoadingSupported)return;await new Promise(X=>{const z=this._queueLoadingCallback(X);this._prepareFontLoadEvent(G,z)})}}get isFontLoadingAPISupported(){var u;const G=!!((u=this._document)!=null&&u.fonts);return(0,s.shadow)(this,"isFontLoadingAPISupported",G)}get isSyncFontLoadingSupported(){let G=!1;return(d.isNodeJS||typeof navigator<"u"&&/Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent))&&(G=!0),(0,s.shadow)(this,"isSyncFontLoadingSupported",G)}_queueLoadingCallback(G){function u(){for((0,s.assert)(!z.done,"completeRequest() cannot be called twice."),z.done=!0;X.length>0&&X[0].done;){const R=X.shift();setTimeout(R.callback,0)}}const{loadingRequests:X}=this,z={done:!1,complete:u,callback:G};return X.push(z),z}get _loadTestFont(){const G=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,s.shadow)(this,"_loadTestFont",G)}_prepareFontLoadEvent(G,u){function X(v,A){return v.charCodeAt(A)<<24|v.charCodeAt(A+1)<<16|v.charCodeAt(A+2)<<8|v.charCodeAt(A+3)&255}function z(v,A,Nl,fl){const Xl=v.substring(0,A),Zt=v.substring(A+Nl);return Xl+fl+Zt}let R,S;const k=this._document.createElement("canvas");k.width=1,k.height=1;const L=k.getContext("2d");let x=0;function j(v,A){if(++x>30){(0,s.warn)("Load test font never loaded."),A();return}if(L.font="30px "+v,L.fillText(".",0,20),L.getImageData(0,0,1,1).data[3]>0){A();return}setTimeout(j.bind(null,v,A))}const Q=`lt${Date.now()}${this.loadTestFontId++}`;let J=this._loadTestFont;J=z(J,976,Q.length,Q);const y=16,Y=1482184792;let m=X(J,y);for(R=0,S=Q.length-3;R{V.remove(),u.complete()})}}o=new WeakMap,t.FontLoader=Z;class i{constructor(G,{isEvalSupported:u=!0,disableFontFace:X=!1,ignoreErrors:z=!1,inspectFont:R=null}){this.compiledGlyphs=Object.create(null);for(const S in G)this[S]=G[S];this.isEvalSupported=u!==!1,this.disableFontFace=X===!0,this.ignoreErrors=z===!0,this._inspectFont=R}createNativeFontFace(){var u;if(!this.data||this.disableFontFace)return null;let G;if(!this.cssFontInfo)G=new FontFace(this.loadedName,this.data,{});else{const X={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(X.style=`oblique ${this.cssFontInfo.italicAngle}deg`),G=new FontFace(this.cssFontInfo.fontFamily,this.data,X)}return(u=this._inspectFont)==null||u.call(this,this),G}createFontFaceRule(){var z;if(!this.data||this.disableFontFace)return null;const G=(0,s.bytesToString)(this.data),u=`url(data:${this.mimetype};base64,${btoa(G)});`;let X;if(!this.cssFontInfo)X=`@font-face {font-family:"${this.loadedName}";src:${u}}`;else{let R=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(R+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),X=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${R}src:${u}}`}return(z=this._inspectFont)==null||z.call(this,this,u),X}getPathGenerator(G,u){if(this.compiledGlyphs[u]!==void 0)return this.compiledGlyphs[u];let X;try{X=G.get(this.loadedName+"_path_"+u)}catch(z){if(!this.ignoreErrors)throw z;return(0,s.warn)(`getPathGenerator - ignoring character: "${z}".`),this.compiledGlyphs[u]=function(R,S){}}if(this.isEvalSupported&&s.FeatureTest.isEvalSupported){const z=[];for(const R of X){const S=R.args!==void 0?R.args.join(","):"";z.push("c.",R.cmd,"(",S,`); +`)}return this.compiledGlyphs[u]=new Function("c","size",z.join(""))}return this.compiledGlyphs[u]=function(z,R){for(const S of X)S.cmd==="scale"&&(S.args=[R,-R]),z[S.cmd].apply(z,S.args)}}}t.FontFaceObject=i},(l,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isNodeJS=void 0;const c=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser");t.isNodeJS=c},(l,t,c)=>{var at,Tc,Mt,Vc;Object.defineProperty(t,"__esModule",{value:!0}),t.CanvasGraphics=void 0;var s=c(1),d=c(6),Z=c(12),i=c(13),o=c(10);const W=16,G=100,u=4096,X=15,z=10,R=1e3,S=16;function k(Ml,U){if(Ml._removeMirroring)throw new Error("Context is already forwarding operations.");Ml.__originalSave=Ml.save,Ml.__originalRestore=Ml.restore,Ml.__originalRotate=Ml.rotate,Ml.__originalScale=Ml.scale,Ml.__originalTranslate=Ml.translate,Ml.__originalTransform=Ml.transform,Ml.__originalSetTransform=Ml.setTransform,Ml.__originalResetTransform=Ml.resetTransform,Ml.__originalClip=Ml.clip,Ml.__originalMoveTo=Ml.moveTo,Ml.__originalLineTo=Ml.lineTo,Ml.__originalBezierCurveTo=Ml.bezierCurveTo,Ml.__originalRect=Ml.rect,Ml.__originalClosePath=Ml.closePath,Ml.__originalBeginPath=Ml.beginPath,Ml._removeMirroring=()=>{Ml.save=Ml.__originalSave,Ml.restore=Ml.__originalRestore,Ml.rotate=Ml.__originalRotate,Ml.scale=Ml.__originalScale,Ml.translate=Ml.__originalTranslate,Ml.transform=Ml.__originalTransform,Ml.setTransform=Ml.__originalSetTransform,Ml.resetTransform=Ml.__originalResetTransform,Ml.clip=Ml.__originalClip,Ml.moveTo=Ml.__originalMoveTo,Ml.lineTo=Ml.__originalLineTo,Ml.bezierCurveTo=Ml.__originalBezierCurveTo,Ml.rect=Ml.__originalRect,Ml.closePath=Ml.__originalClosePath,Ml.beginPath=Ml.__originalBeginPath,delete Ml._removeMirroring},Ml.save=function(){U.save(),this.__originalSave()},Ml.restore=function(){U.restore(),this.__originalRestore()},Ml.translate=function(O,B){U.translate(O,B),this.__originalTranslate(O,B)},Ml.scale=function(O,B){U.scale(O,B),this.__originalScale(O,B)},Ml.transform=function(O,B,P,Zl,cl,T){U.transform(O,B,P,Zl,cl,T),this.__originalTransform(O,B,P,Zl,cl,T)},Ml.setTransform=function(O,B,P,Zl,cl,T){U.setTransform(O,B,P,Zl,cl,T),this.__originalSetTransform(O,B,P,Zl,cl,T)},Ml.resetTransform=function(){U.resetTransform(),this.__originalResetTransform()},Ml.rotate=function(O){U.rotate(O),this.__originalRotate(O)},Ml.clip=function(O){U.clip(O),this.__originalClip(O)},Ml.moveTo=function(g,O){U.moveTo(g,O),this.__originalMoveTo(g,O)},Ml.lineTo=function(g,O){U.lineTo(g,O),this.__originalLineTo(g,O)},Ml.bezierCurveTo=function(g,O,B,P,Zl,cl){U.bezierCurveTo(g,O,B,P,Zl,cl),this.__originalBezierCurveTo(g,O,B,P,Zl,cl)},Ml.rect=function(g,O,B,P){U.rect(g,O,B,P),this.__originalRect(g,O,B,P)},Ml.closePath=function(){U.closePath(),this.__originalClosePath()},Ml.beginPath=function(){U.beginPath(),this.__originalBeginPath()}}class L{constructor(U){this.canvasFactory=U,this.cache=Object.create(null)}getCanvas(U,g,O){let B;return this.cache[U]!==void 0?(B=this.cache[U],this.canvasFactory.reset(B,g,O)):(B=this.canvasFactory.create(g,O),this.cache[U]=B),B}delete(U){delete this.cache[U]}clear(){for(const U in this.cache){const g=this.cache[U];this.canvasFactory.destroy(g),delete this.cache[U]}}}function x(Ml,U,g,O,B,P,Zl,cl,T,w){const[b,N,I,C,K,f]=(0,d.getCurrentTransform)(Ml);if(N===0&&I===0){const Vl=Zl*b+K,Tl=Math.round(Vl),$l=cl*C+f,tt=Math.round($l),dt=(Zl+T)*b+K,bt=Math.abs(Math.round(dt)-Tl)||1,ut=(cl+w)*C+f,ht=Math.abs(Math.round(ut)-tt)||1;return Ml.setTransform(Math.sign(b),0,0,Math.sign(C),Tl,tt),Ml.drawImage(U,g,O,B,P,0,0,bt,ht),Ml.setTransform(b,N,I,C,K,f),[bt,ht]}if(b===0&&C===0){const Vl=cl*I+K,Tl=Math.round(Vl),$l=Zl*N+f,tt=Math.round($l),dt=(cl+w)*I+K,bt=Math.abs(Math.round(dt)-Tl)||1,ut=(Zl+T)*N+f,ht=Math.abs(Math.round(ut)-tt)||1;return Ml.setTransform(0,Math.sign(N),Math.sign(I),0,Tl,tt),Ml.drawImage(U,g,O,B,P,0,0,ht,bt),Ml.setTransform(b,N,I,C,K,f),[ht,bt]}Ml.drawImage(U,g,O,B,P,Zl,cl,T,w);const Yl=Math.hypot(b,N),Wl=Math.hypot(I,C);return[Yl*T,Wl*w]}function j(Ml){const{width:U,height:g}=Ml;if(U>R||g>R)return null;const O=1e3,B=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),P=U+1;let Zl=new Uint8Array(P*(g+1)),cl,T,w;const b=U+7&-8;let N=new Uint8Array(b*g),I=0;for(const Wl of Ml.data){let Vl=128;for(;Vl>0;)N[I++]=Wl&Vl?0:255,Vl>>=1}let C=0;for(I=0,N[I]!==0&&(Zl[0]=1,++C),T=1;T>2)+(N[I+1]?4:0)+(N[I-b+1]?8:0),B[Wl]&&(Zl[w+T]=B[Wl],++C),I++;if(N[I-b]!==N[I]&&(Zl[w+T]=N[I]?2:4,++C),C>O)return null}for(I=b*(g-1),w=cl*P,N[I]!==0&&(Zl[w]=8,++C),T=1;TO)return null;const K=new Int32Array([0,P,-1,0,-P,0,0,0,1]),f=new Path2D;for(cl=0;C&&cl<=g;cl++){let Wl=cl*P;const Vl=Wl+U;for(;Wl>4,Zl[Wl]&=$l>>2|$l<<2),f.lineTo(Wl%P,Wl/P|0),Zl[Wl]||--C}while(Tl!==Wl);--cl}return N=null,Zl=null,function(Wl){Wl.save(),Wl.scale(1/U,-1/g),Wl.translate(0,-g),Wl.fill(f),Wl.beginPath(),Wl.restore()}}class Q{constructor(U,g){this.alphaIsShape=!1,this.fontSize=0,this.fontSizeScale=1,this.textMatrix=s.IDENTITY_MATRIX,this.textMatrixScale=1,this.fontMatrix=s.FONT_IDENTITY_MATRIX,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRenderingMode=s.TextRenderingMode.FILL,this.textRise=0,this.fillColor="#000000",this.strokeColor="#000000",this.patternFill=!1,this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.activeSMask=null,this.transferMaps="none",this.startNewPathAndClipBox([0,0,U,g])}clone(){const U=Object.create(this);return U.clipBox=this.clipBox.slice(),U}setCurrentPoint(U,g){this.x=U,this.y=g}updatePathMinMax(U,g,O){[g,O]=s.Util.applyTransform([g,O],U),this.minX=Math.min(this.minX,g),this.minY=Math.min(this.minY,O),this.maxX=Math.max(this.maxX,g),this.maxY=Math.max(this.maxY,O)}updateRectMinMax(U,g){const O=s.Util.applyTransform(g,U),B=s.Util.applyTransform(g.slice(2),U);this.minX=Math.min(this.minX,O[0],B[0]),this.minY=Math.min(this.minY,O[1],B[1]),this.maxX=Math.max(this.maxX,O[0],B[0]),this.maxY=Math.max(this.maxY,O[1],B[1])}updateScalingPathMinMax(U,g){s.Util.scaleMinMax(U,g),this.minX=Math.min(this.minX,g[0]),this.maxX=Math.max(this.maxX,g[1]),this.minY=Math.min(this.minY,g[2]),this.maxY=Math.max(this.maxY,g[3])}updateCurvePathMinMax(U,g,O,B,P,Zl,cl,T,w,b){const N=s.Util.bezierBoundingBox(g,O,B,P,Zl,cl,T,w);if(b){b[0]=Math.min(b[0],N[0],N[2]),b[1]=Math.max(b[1],N[0],N[2]),b[2]=Math.min(b[2],N[1],N[3]),b[3]=Math.max(b[3],N[1],N[3]);return}this.updateRectMinMax(U,N)}getPathBoundingBox(U=Z.PathType.FILL,g=null){const O=[this.minX,this.minY,this.maxX,this.maxY];if(U===Z.PathType.STROKE){g||(0,s.unreachable)("Stroke bounding box must include transform.");const B=s.Util.singularValueDecompose2dScale(g),P=B[0]*this.lineWidth/2,Zl=B[1]*this.lineWidth/2;O[0]-=P,O[1]-=Zl,O[2]+=P,O[3]+=Zl}return O}updateClipFromPath(){const U=s.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(U||[0,0,0,0])}isEmptyClip(){return this.minX===1/0}startNewPathAndClipBox(U){this.clipBox=U,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}getClippedPathBoundingBox(U=Z.PathType.FILL,g=null){return s.Util.intersect(this.clipBox,this.getPathBoundingBox(U,g))}}function J(Ml,U){if(typeof ImageData<"u"&&U instanceof ImageData){Ml.putImageData(U,0,0);return}const g=U.height,O=U.width,B=g%S,P=(g-B)/S,Zl=B===0?P:P+1,cl=Ml.createImageData(O,S);let T=0,w;const b=U.data,N=cl.data;let I,C,K,f;if(U.kind===s.ImageKind.GRAYSCALE_1BPP){const Yl=b.byteLength,Wl=new Uint32Array(N.buffer,0,N.byteLength>>2),Vl=Wl.length,Tl=O+7>>3,$l=4294967295,tt=s.FeatureTest.isLittleEndian?4278190080:255;for(I=0;ITl?O:dt*8-7,ht=ut&-8;let yt=0,Ll=0;for(;bt>=1}for(;w=P&&(K=B,f=O*K),w=0,C=f;C--;)N[w++]=b[T++],N[w++]=b[T++],N[w++]=b[T++],N[w++]=255;Ml.putImageData(cl,0,I*S)}else throw new Error(`bad image kind: ${U.kind}`)}function M(Ml,U){if(U.bitmap){Ml.drawImage(U.bitmap,0,0);return}const g=U.height,O=U.width,B=g%S,P=(g-B)/S,Zl=B===0?P:P+1,cl=Ml.createImageData(O,S);let T=0;const w=U.data,b=cl.data;for(let N=0;N>8,Ml[P-2]=Ml[P-2]*Zl+g*cl>>8,Ml[P-1]=Ml[P-1]*Zl+O*cl>>8}}}function D(Ml,U,g){const O=Ml.length,B=1/255;for(let P=3;P>8]>>8:U[B]*P>>16}}function V(Ml,U,g,O,B,P,Zl,cl,T,w,b){const N=!!P,I=N?P[0]:0,C=N?P[1]:0,K=N?P[2]:0;let f;B==="Luminosity"?f=H:f=D;const Wl=Math.min(O,Math.ceil(1048576/g));for(let Vl=0;Vlz&&typeof O=="function",b=w?Date.now()+X:0;let N=0;const I=this.commonObjs,C=this.objs;let K;for(;;){if(B!==void 0&&cl===B.nextBreakPoint)return B.breakIt(cl,O),cl;if(K=Zl[cl],K!==s.OPS.dependency)this[K].apply(this,P[cl]);else for(const f of P[cl]){const Yl=f.startsWith("g_")?I:C;if(!Yl.has(f))return Yl.get(f,O),cl}if(cl++,cl===T)return cl;if(w&&++N>z){if(Date.now()>b)return O(),cl;N=0}}}endDrawing(){it(this,at,Tc).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();for(const U of this._cachedBitmapsMap.values()){for(const g of U.values())typeof HTMLCanvasElement<"u"&&g instanceof HTMLCanvasElement&&(g.width=g.height=0);U.clear()}this._cachedBitmapsMap.clear(),it(this,Mt,Vc).call(this)}_scaleImage(U,g){const O=U.width,B=U.height;let P=Math.max(Math.hypot(g[0],g[1]),1),Zl=Math.max(Math.hypot(g[2],g[3]),1),cl=O,T=B,w="prescale1",b,N;for(;P>2&&cl>1||Zl>2&&T>1;){let I=cl,C=T;P>2&&cl>1&&(I=cl>=16384?Math.floor(cl/2)-1||1:Math.ceil(cl/2),P/=cl/I),Zl>2&&T>1&&(C=T>=16384?Math.floor(T/2)-1||1:Math.ceil(T)/2,Zl/=T/C),b=this.cachedCanvases.getCanvas(w,I,C),N=b.context,N.clearRect(0,0,I,C),N.drawImage(U,0,0,cl,T,0,0,I,C),U=b.canvas,cl=I,T=C,w=w==="prescale1"?"prescale2":"prescale1"}return{img:U,paintWidth:cl,paintHeight:T}}_createMaskCanvas(U){const g=this.ctx,{width:O,height:B}=U,P=this.current.fillColor,Zl=this.current.patternFill,cl=(0,d.getCurrentTransform)(g);let T,w,b,N;if((U.bitmap||U.data)&&U.count>1){const bt=U.bitmap||U.data.buffer;w=JSON.stringify(Zl?cl:[cl.slice(0,4),P]),T=this._cachedBitmapsMap.get(bt),T||(T=new Map,this._cachedBitmapsMap.set(bt,T));const ut=T.get(w);if(ut&&!Zl){const ht=Math.round(Math.min(cl[0],cl[2])+cl[4]),yt=Math.round(Math.min(cl[1],cl[3])+cl[5]);return{canvas:ut,offsetX:ht,offsetY:yt}}b=ut}b||(N=this.cachedCanvases.getCanvas("maskCanvas",O,B),M(N.context,U));let I=s.Util.transform(cl,[1/O,0,0,-1/B,0,0]);I=s.Util.transform(I,[1,0,0,1,0,-B]);const C=s.Util.applyTransform([0,0],I),K=s.Util.applyTransform([O,B],I),f=s.Util.normalizeRect([C[0],C[1],K[0],K[1]]),Yl=Math.round(f[2]-f[0])||1,Wl=Math.round(f[3]-f[1])||1,Vl=this.cachedCanvases.getCanvas("fillCanvas",Yl,Wl),Tl=Vl.context,$l=Math.min(C[0],K[0]),tt=Math.min(C[1],K[1]);Tl.translate(-$l,-tt),Tl.transform(...I),b||(b=this._scaleImage(N.canvas,(0,d.getCurrentTransformInverse)(Tl)),b=b.img,T&&Zl&&T.set(w,b)),Tl.imageSmoothingEnabled=A((0,d.getCurrentTransform)(Tl),U.interpolate),x(Tl,b,0,0,b.width,b.height,0,0,O,B),Tl.globalCompositeOperation="source-in";const dt=s.Util.transform((0,d.getCurrentTransformInverse)(Tl),[1,0,0,1,-$l,-tt]);return Tl.fillStyle=Zl?P.getPattern(g,this,dt,Z.PathType.FILL):P,Tl.fillRect(0,0,O,B),T&&!Zl&&(this.cachedCanvases.delete("fillCanvas"),T.set(w,Vl.canvas)),{canvas:Vl.canvas,offsetX:Math.round($l),offsetY:Math.round(tt)}}setLineWidth(U){U!==this.current.lineWidth&&(this._cachedScaleForStroking[0]=-1),this.current.lineWidth=U,this.ctx.lineWidth=U}setLineCap(U){this.ctx.lineCap=Nl[U]}setLineJoin(U){this.ctx.lineJoin=fl[U]}setMiterLimit(U){this.ctx.miterLimit=U}setDash(U,g){const O=this.ctx;O.setLineDash!==void 0&&(O.setLineDash(U),O.lineDashOffset=g)}setRenderingIntent(U){}setFlatness(U){}setGState(U){for(const[g,O]of U)switch(g){case"LW":this.setLineWidth(O);break;case"LC":this.setLineCap(O);break;case"LJ":this.setLineJoin(O);break;case"ML":this.setMiterLimit(O);break;case"D":this.setDash(O[0],O[1]);break;case"RI":this.setRenderingIntent(O);break;case"FL":this.setFlatness(O);break;case"Font":this.setFont(O[0],O[1]);break;case"CA":this.current.strokeAlpha=O;break;case"ca":this.current.fillAlpha=O,this.ctx.globalAlpha=O;break;case"BM":this.ctx.globalCompositeOperation=O;break;case"SMask":this.current.activeSMask=O?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.ctx.filter=this.current.transferMaps=this.filterFactory.addFilter(O);break}}get inSMaskMode(){return!!this.suspendedCtx}checkSMaskState(){const U=this.inSMaskMode;this.current.activeSMask&&!U?this.beginSMaskMode():!this.current.activeSMask&&U&&this.endSMaskMode()}beginSMaskMode(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");const U=this.ctx.canvas.width,g=this.ctx.canvas.height,O="smaskGroupAt"+this.groupLevel,B=this.cachedCanvases.getCanvas(O,U,g);this.suspendedCtx=this.ctx,this.ctx=B.context;const P=this.ctx;P.setTransform(...(0,d.getCurrentTransform)(this.suspendedCtx)),y(this.suspendedCtx,P),k(P,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}endSMaskMode(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),y(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}compose(U){if(!this.current.activeSMask)return;U?(U[0]=Math.floor(U[0]),U[1]=Math.floor(U[1]),U[2]=Math.ceil(U[2]),U[3]=Math.ceil(U[3])):U=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];const g=this.current.activeSMask,O=this.suspendedCtx;v(O,g,this.ctx,U),this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.restore()}save(){this.inSMaskMode?(y(this.ctx,this.suspendedCtx),this.suspendedCtx.save()):this.ctx.save();const U=this.current;this.stateStack.push(U),this.current=U.clone()}restore(){this.stateStack.length===0&&this.inSMaskMode&&this.endSMaskMode(),this.stateStack.length!==0&&(this.current=this.stateStack.pop(),this.inSMaskMode?(this.suspendedCtx.restore(),y(this.suspendedCtx,this.ctx)):this.ctx.restore(),this.checkSMaskState(),this.pendingClip=null,this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null)}transform(U,g,O,B,P,Zl){this.ctx.transform(U,g,O,B,P,Zl),this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null}constructPath(U,g,O){const B=this.ctx,P=this.current;let Zl=P.x,cl=P.y,T,w;const b=(0,d.getCurrentTransform)(B),N=b[0]===0&&b[3]===0||b[1]===0&&b[2]===0,I=N?O.slice(0):null;for(let C=0,K=0,f=U.length;CG&&(w=G),this.current.fontSizeScale=g/w,this.ctx.font=`${T} ${cl} ${w}px ${Zl}`}setTextRenderingMode(U){this.current.textRenderingMode=U}setTextRise(U){this.current.textRise=U}moveText(U,g){this.current.x=this.current.lineX+=U,this.current.y=this.current.lineY+=g}setLeadingMoveText(U,g){this.setLeading(-g),this.moveText(U,g)}setTextMatrix(U,g,O,B,P,Zl){this.current.textMatrix=[U,g,O,B,P,Zl],this.current.textMatrixScale=Math.hypot(U,g),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}nextLine(){this.moveText(0,this.current.leading)}paintChar(U,g,O,B){const P=this.ctx,Zl=this.current,cl=Zl.font,T=Zl.textRenderingMode,w=Zl.fontSize/Zl.fontSizeScale,b=T&s.TextRenderingMode.FILL_STROKE_MASK,N=!!(T&s.TextRenderingMode.ADD_TO_PATH_FLAG),I=Zl.patternFill&&!cl.missingFile;let C;(cl.disableFontFace||N||I)&&(C=cl.getPathGenerator(this.commonObjs,U)),cl.disableFontFace||I?(P.save(),P.translate(g,O),P.beginPath(),C(P,w),B&&P.setTransform(...B),(b===s.TextRenderingMode.FILL||b===s.TextRenderingMode.FILL_STROKE)&&P.fill(),(b===s.TextRenderingMode.STROKE||b===s.TextRenderingMode.FILL_STROKE)&&P.stroke(),P.restore()):((b===s.TextRenderingMode.FILL||b===s.TextRenderingMode.FILL_STROKE)&&P.fillText(U,g,O),(b===s.TextRenderingMode.STROKE||b===s.TextRenderingMode.FILL_STROKE)&&P.strokeText(U,g,O)),N&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:(0,d.getCurrentTransform)(P),x:g,y:O,fontSize:w,addToPath:C})}get isFontSubpixelAAEnabled(){const{context:U}=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10);U.scale(1.5,1),U.fillText("I",0,10);const g=U.getImageData(0,0,10,10).data;let O=!1;for(let B=3;B0&&g[B]<255){O=!0;break}return(0,s.shadow)(this,"isFontSubpixelAAEnabled",O)}showText(U){const g=this.current,O=g.font;if(O.isType3Font)return this.showType3Text(U);const B=g.fontSize;if(B===0)return;const P=this.ctx,Zl=g.fontSizeScale,cl=g.charSpacing,T=g.wordSpacing,w=g.fontDirection,b=g.textHScale*w,N=U.length,I=O.vertical,C=I?1:-1,K=O.defaultVMetrics,f=B*g.fontMatrix[0],Yl=g.textRenderingMode===s.TextRenderingMode.FILL&&!O.disableFontFace&&!g.patternFill;P.save(),P.transform(...g.textMatrix),P.translate(g.x,g.y+g.textRise),w>0?P.scale(b,-1):P.scale(b,1);let Wl;if(g.patternFill){P.save();const dt=g.fillColor.getPattern(P,this,(0,d.getCurrentTransformInverse)(P),Z.PathType.FILL);Wl=(0,d.getCurrentTransform)(P),P.restore(),P.fillStyle=dt}let Vl=g.lineWidth;const Tl=g.textMatrixScale;if(Tl===0||Vl===0){const dt=g.textRenderingMode&s.TextRenderingMode.FILL_STROKE_MASK;(dt===s.TextRenderingMode.STROKE||dt===s.TextRenderingMode.FILL_STROKE)&&(Vl=this.getSinglePixelWidth())}else Vl/=Tl;if(Zl!==1&&(P.scale(Zl,Zl),Vl/=Zl),P.lineWidth=Vl,O.isInvalidPDFjsFont){const dt=[];let bt=0;for(const ut of U)dt.push(ut.unicode),bt+=ut.width;P.fillText(dt.join(""),0,0),g.x+=bt*f*b,P.restore(),this.compose();return}let $l=0,tt;for(tt=0;tt0){const et=P.measureText(ht).width*1e3/B*Zl;if(Ltnew Vt(Zl,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:this.optionalContentConfig,markedContentStack:this.markedContentStack})};g=new Z.TilingPattern(U,O,this.ctx,P,B)}else g=this._getPattern(U[1],U[2]);return g}setStrokeColorN(){this.current.strokeColor=this.getColorN_Pattern(arguments)}setFillColorN(){this.current.fillColor=this.getColorN_Pattern(arguments),this.current.patternFill=!0}setStrokeRGBColor(U,g,O){const B=s.Util.makeHexColor(U,g,O);this.ctx.strokeStyle=B,this.current.strokeColor=B}setFillRGBColor(U,g,O){const B=s.Util.makeHexColor(U,g,O);this.ctx.fillStyle=B,this.current.fillColor=B,this.current.patternFill=!1}_getPattern(U,g=null){let O;return this.cachedPatterns.has(U)?O=this.cachedPatterns.get(U):(O=(0,Z.getShadingPattern)(this.getObject(U)),this.cachedPatterns.set(U,O)),g&&(O.matrix=g),O}shadingFill(U){if(!this.contentVisible)return;const g=this.ctx;this.save();const O=this._getPattern(U);g.fillStyle=O.getPattern(g,this,(0,d.getCurrentTransformInverse)(g),Z.PathType.SHADING);const B=(0,d.getCurrentTransformInverse)(g);if(B){const P=g.canvas,Zl=P.width,cl=P.height,T=s.Util.applyTransform([0,0],B),w=s.Util.applyTransform([0,cl],B),b=s.Util.applyTransform([Zl,0],B),N=s.Util.applyTransform([Zl,cl],B),I=Math.min(T[0],w[0],b[0],N[0]),C=Math.min(T[1],w[1],b[1],N[1]),K=Math.max(T[0],w[0],b[0],N[0]),f=Math.max(T[1],w[1],b[1],N[1]);this.ctx.fillRect(I,C,K-I,f-C)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}beginInlineImage(){(0,s.unreachable)("Should not call beginInlineImage")}beginImageData(){(0,s.unreachable)("Should not call beginImageData")}paintFormXObjectBegin(U,g){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(U)&&U.length===6&&this.transform(...U),this.baseTransform=(0,d.getCurrentTransform)(this.ctx),g)){const O=g[2]-g[0],B=g[3]-g[1];this.ctx.rect(g[0],g[1],O,B),this.current.updateRectMinMax((0,d.getCurrentTransform)(this.ctx),g),this.clip(),this.endPath()}}paintFormXObjectEnd(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}beginGroup(U){if(!this.contentVisible)return;this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);const g=this.ctx;U.isolated||(0,s.info)("TODO: Support non-isolated groups."),U.knockout&&(0,s.warn)("Knockout groups not supported.");const O=(0,d.getCurrentTransform)(g);if(U.matrix&&g.transform(...U.matrix),!U.bbox)throw new Error("Bounding box is required.");let B=s.Util.getAxialAlignedBoundingBox(U.bbox,(0,d.getCurrentTransform)(g));const P=[0,0,g.canvas.width,g.canvas.height];B=s.Util.intersect(B,P)||[0,0,0,0];const Zl=Math.floor(B[0]),cl=Math.floor(B[1]);let T=Math.max(Math.ceil(B[2])-Zl,1),w=Math.max(Math.ceil(B[3])-cl,1),b=1,N=1;T>u&&(b=T/u,T=u),w>u&&(N=w/u,w=u),this.current.startNewPathAndClipBox([0,0,T,w]);let I="groupAt"+this.groupLevel;U.smask&&(I+="_smask_"+this.smaskCounter++%2);const C=this.cachedCanvases.getCanvas(I,T,w),K=C.context;K.scale(1/b,1/N),K.translate(-Zl,-cl),K.transform(...O),U.smask?this.smaskStack.push({canvas:C.canvas,context:K,offsetX:Zl,offsetY:cl,scaleX:b,scaleY:N,subtype:U.smask.subtype,backdrop:U.smask.backdrop,transferMap:U.smask.transferMap||null,startTransformInverse:null}):(g.setTransform(1,0,0,1,0,0),g.translate(Zl,cl),g.scale(b,N),g.save()),y(g,K),this.ctx=K,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(g),this.groupLevel++}endGroup(U){if(!this.contentVisible)return;this.groupLevel--;const g=this.ctx,O=this.groupStack.pop();if(this.ctx=O,this.ctx.imageSmoothingEnabled=!1,U.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{this.ctx.restore();const B=(0,d.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),this.ctx.setTransform(...B);const P=s.Util.getAxialAlignedBoundingBox([0,0,g.canvas.width,g.canvas.height],B);this.ctx.drawImage(g.canvas,0,0),this.ctx.restore(),this.compose(P)}}beginAnnotation(U,g,O,B,P){if(it(this,at,Tc).call(this),Y(this.ctx),this.ctx.save(),this.save(),this.baseTransform&&this.ctx.setTransform(...this.baseTransform),Array.isArray(g)&&g.length===4){const Zl=g[2]-g[0],cl=g[3]-g[1];if(P&&this.annotationCanvasMap){O=O.slice(),O[4]-=g[0],O[5]-=g[1],g=g.slice(),g[0]=g[1]=0,g[2]=Zl,g[3]=cl;const[T,w]=s.Util.singularValueDecompose2dScale((0,d.getCurrentTransform)(this.ctx)),{viewportScale:b}=this,N=Math.ceil(Zl*this.outputScaleX*b),I=Math.ceil(cl*this.outputScaleY*b);this.annotationCanvas=this.canvasFactory.create(N,I);const{canvas:C,context:K}=this.annotationCanvas;this.annotationCanvasMap.set(U,C),this.annotationCanvas.savedCtx=this.ctx,this.ctx=K,this.ctx.save(),this.ctx.setTransform(T,0,0,-w,0,cl*w),Y(this.ctx)}else Y(this.ctx),this.ctx.rect(g[0],g[1],Zl,cl),this.ctx.clip(),this.endPath()}this.current=new Q(this.ctx.canvas.width,this.ctx.canvas.height),this.transform(...O),this.transform(...B)}endAnnotation(){this.annotationCanvas&&(this.ctx.restore(),it(this,Mt,Vc).call(this),this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}paintImageMaskXObject(U){if(!this.contentVisible)return;const g=U.count;U=this.getObject(U.data,U),U.count=g;const O=this.ctx,B=this.processingType3;if(B&&(B.compiled===void 0&&(B.compiled=j(U)),B.compiled)){B.compiled(O);return}const P=this._createMaskCanvas(U),Zl=P.canvas;O.save(),O.setTransform(1,0,0,1,0,0),O.drawImage(Zl,P.offsetX,P.offsetY),O.restore(),this.compose()}paintImageMaskXObjectRepeat(U,g,O=0,B=0,P,Zl){if(!this.contentVisible)return;U=this.getObject(U.data,U);const cl=this.ctx;cl.save();const T=(0,d.getCurrentTransform)(cl);cl.transform(g,O,B,P,0,0);const w=this._createMaskCanvas(U);cl.setTransform(1,0,0,1,w.offsetX-T[4],w.offsetY-T[5]);for(let b=0,N=Zl.length;bN?b/N:1,cl=w>N?w/N:1}}this._cachedScaleForStroking[0]=Zl,this._cachedScaleForStroking[1]=cl}return this._cachedScaleForStroking}rescaleAndStroke(U){const{ctx:g}=this,{lineWidth:O}=this.current,[B,P]=this.getScaleForStroking();if(g.lineWidth=O||1,B===1&&P===1){g.stroke();return}const Zl=g.getLineDash();if(U&&g.save(),g.scale(B,P),Zl.length>0){const cl=Math.max(B,P);g.setLineDash(Zl.map(T=>T/cl)),g.lineDashOffset/=cl}g.stroke(),U&&g.restore()}isContentVisible(){for(let U=this.markedContentStack.length-1;U>=0;U--)if(!this.markedContentStack[U].visible)return!1;return!0}};let lt=Vt;at=new WeakSet,Tc=function(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)},Mt=new WeakSet,Vc=function(){if(this.pageColors){const U=this.filterFactory.addHCMFilter(this.pageColors.foreground,this.pageColors.background);if(U!=="none"){const g=this.ctx.filter;this.ctx.filter=U,this.ctx.drawImage(this.ctx.canvas,0,0),this.ctx.filter=g}}},t.CanvasGraphics=lt;for(const Ml in s.OPS)lt.prototype[Ml]!==void 0&&(lt.prototype[s.OPS[Ml]]=lt.prototype[Ml])},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TilingPattern=t.PathType=void 0,t.getShadingPattern=R;var s=c(1),d=c(6);const Z={FILL:"Fill",STROKE:"Stroke",SHADING:"Shading"};t.PathType=Z;function i(x,j){if(!j)return;const Q=j[2]-j[0],J=j[3]-j[1],M=new Path2D;M.rect(j[0],j[1],Q,J),x.clip(M)}class o{constructor(){this.constructor===o&&(0,s.unreachable)("Cannot initialize BaseShadingPattern.")}getPattern(){(0,s.unreachable)("Abstract method `getPattern` called.")}}class W extends o{constructor(j){super(),this._type=j[1],this._bbox=j[2],this._colorStops=j[3],this._p0=j[4],this._p1=j[5],this._r0=j[6],this._r1=j[7],this.matrix=null}_createGradient(j){let Q;this._type==="axial"?Q=j.createLinearGradient(this._p0[0],this._p0[1],this._p1[0],this._p1[1]):this._type==="radial"&&(Q=j.createRadialGradient(this._p0[0],this._p0[1],this._r0,this._p1[0],this._p1[1],this._r1));for(const J of this._colorStops)Q.addColorStop(J[0],J[1]);return Q}getPattern(j,Q,J,M){let y;if(M===Z.STROKE||M===Z.FILL){const Y=Q.current.getClippedPathBoundingBox(M,(0,d.getCurrentTransform)(j))||[0,0,0,0],m=Math.ceil(Y[2]-Y[0])||1,D=Math.ceil(Y[3]-Y[1])||1,H=Q.cachedCanvases.getCanvas("pattern",m,D,!0),V=H.context;V.clearRect(0,0,V.canvas.width,V.canvas.height),V.beginPath(),V.rect(0,0,V.canvas.width,V.canvas.height),V.translate(-Y[0],-Y[1]),J=s.Util.transform(J,[1,0,0,1,Y[0],Y[1]]),V.transform(...Q.baseTransform),this.matrix&&V.transform(...this.matrix),i(V,this._bbox),V.fillStyle=this._createGradient(V),V.fill(),y=j.createPattern(H.canvas,"no-repeat");const v=new DOMMatrix(J);y.setTransform(v)}else i(j,this._bbox),y=this._createGradient(j);return y}}function G(x,j,Q,J,M,y,Y,m){const D=j.coords,H=j.colors,V=x.data,v=x.width*4;let A;D[Q+1]>D[J+1]&&(A=Q,Q=J,J=A,A=y,y=Y,Y=A),D[J+1]>D[M+1]&&(A=J,J=M,M=A,A=Y,Y=m,m=A),D[Q+1]>D[J+1]&&(A=Q,Q=J,J=A,A=y,y=Y,Y=A);const Nl=(D[Q]+j.offsetX)*j.scaleX,fl=(D[Q+1]+j.offsetY)*j.scaleY,Xl=(D[J]+j.offsetX)*j.scaleX,Zt=(D[J+1]+j.offsetY)*j.scaleY,lt=(D[M]+j.offsetX)*j.scaleX,at=(D[M+1]+j.offsetY)*j.scaleY;if(fl>=at)return;const Wt=H[y],Mt=H[y+1],Nt=H[y+2],Vt=H[Y],Ml=H[Y+1],U=H[Y+2],g=H[m],O=H[m+1],B=H[m+2],P=Math.round(fl),Zl=Math.round(at);let cl,T,w,b,N,I,C,K;for(let f=P;f<=Zl;f++){if(fat?$l=1:Zt===at?$l=0:$l=(Zt-f)/(Zt-at),cl=Xl-(Xl-lt)*$l,T=Vt-(Vt-g)*$l,w=Ml-(Ml-O)*$l,b=U-(U-B)*$l}let Yl;fat?Yl=1:Yl=(fl-f)/(fl-at),N=Nl-(Nl-lt)*Yl,I=Wt-(Wt-g)*Yl,C=Mt-(Mt-O)*Yl,K=Nt-(Nt-B)*Yl;const Wl=Math.round(Math.min(cl,N)),Vl=Math.round(Math.max(cl,N));let Tl=v*f+Wl*4;for(let $l=Wl;$l<=Vl;$l++)Yl=(cl-$l)/(cl-N),Yl<0?Yl=0:Yl>1&&(Yl=1),V[Tl++]=T-(T-I)*Yl|0,V[Tl++]=w-(w-C)*Yl|0,V[Tl++]=b-(b-K)*Yl|0,V[Tl++]=255}}function u(x,j,Q){const J=j.coords,M=j.colors;let y,Y;switch(j.type){case"lattice":const m=j.verticesPerRow,D=Math.floor(J.length/m)-1,H=m-1;for(y=0;y=M?y=M:J=y/j,{scale:J,size:y}}clipBbox(j,Q,J,M,y){const Y=M-Q,m=y-J;j.ctx.rect(Q,J,Y,m),j.current.updateRectMinMax((0,d.getCurrentTransform)(j.ctx),[Q,J,M,y]),j.clip(),j.endPath()}setFillAndStrokeStyleToContext(j,Q,J){const M=j.ctx,y=j.current;switch(Q){case S.COLORED:const Y=this.ctx;M.fillStyle=Y.fillStyle,M.strokeStyle=Y.strokeStyle,y.fillColor=Y.fillStyle,y.strokeColor=Y.strokeStyle;break;case S.UNCOLORED:const m=s.Util.makeHexColor(J[0],J[1],J[2]);M.fillStyle=m,M.strokeStyle=m,y.fillColor=m,y.strokeColor=m;break;default:throw new s.FormatError(`Unsupported paint type: ${Q}`)}}getPattern(j,Q,J,M){let y=J;M!==Z.SHADING&&(y=s.Util.transform(y,Q.baseTransform),this.matrix&&(y=s.Util.transform(y,this.matrix)));const Y=this.createPatternCanvas(Q);let m=new DOMMatrix(y);m=m.translate(Y.offsetX,Y.offsetY),m=m.scale(1/Y.scaleX,1/Y.scaleY);const D=j.createPattern(Y.canvas,"repeat");return D.setTransform(m),D}};let k=L;jt(k,"MAX_PATTERN_SIZE",3e3),t.TilingPattern=k},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.convertBlackAndWhiteToRGBA=Z,t.convertToRGBA=d,t.grayToRGBA=o;var s=c(1);function d(W){switch(W.kind){case s.ImageKind.GRAYSCALE_1BPP:return Z(W);case s.ImageKind.RGB_24BPP:return i(W)}return null}function Z({src:W,srcPos:G=0,dest:u,width:X,height:z,nonBlackColor:R=4294967295,inverseDecode:S=!1}){const k=s.FeatureTest.isLittleEndian?4278190080:255,[L,x]=S?[R,k]:[k,R],j=X>>3,Q=X&7,J=W.length;u=new Uint32Array(u.buffer);let M=0;for(let y=0;y>2,L=new Uint32Array(W.buffer,G,k);if(s.FeatureTest.isLittleEndian){for(;S>>24|j<<8|4278190080,u[X+2]=j>>>16|Q<<16|4278190080,u[X+3]=Q>>>8|4278190080}for(let x=S*4,j=W.length;x>>8|255,u[X+2]=j<<16|Q>>>16|255,u[X+3]=Q<<8|255}for(let x=S*4,j=W.length;x{Object.defineProperty(t,"__esModule",{value:!0}),t.GlobalWorkerOptions=void 0;const c=Object.create(null);t.GlobalWorkerOptions=c,c.workerPort=null,c.workerSrc=""},(l,t,c)=>{var W,Pc,u,Bc,z,mc;Object.defineProperty(t,"__esModule",{value:!0}),t.MessageHandler=void 0;var s=c(1);const d={UNKNOWN:0,DATA:1,ERROR:2},Z={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function i(S){switch(S instanceof Error||typeof S=="object"&&S!==null||(0,s.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'),S.name){case"AbortException":return new s.AbortException(S.message);case"MissingPDFException":return new s.MissingPDFException(S.message);case"PasswordException":return new s.PasswordException(S.message,S.code);case"UnexpectedResponseException":return new s.UnexpectedResponseException(S.message,S.status);case"UnknownErrorException":return new s.UnknownErrorException(S.message,S.details);default:return new s.UnknownErrorException(S.message,S.toString())}}class o{constructor(k,L,x){st(this,W);st(this,u);st(this,z);this.sourceName=k,this.targetName=L,this.comObj=x,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=j=>{const Q=j.data;if(Q.targetName!==this.sourceName)return;if(Q.stream){it(this,u,Bc).call(this,Q);return}if(Q.callback){const M=Q.callbackId,y=this.callbackCapabilities[M];if(!y)throw new Error(`Cannot resolve callback ${M}`);if(delete this.callbackCapabilities[M],Q.callback===d.DATA)y.resolve(Q.data);else if(Q.callback===d.ERROR)y.reject(i(Q.reason));else throw new Error("Unexpected callback case");return}const J=this.actionHandler[Q.action];if(!J)throw new Error(`Unknown action from worker: ${Q.action}`);if(Q.callbackId){const M=this.sourceName,y=Q.sourceName;new Promise(function(Y){Y(J(Q.data))}).then(function(Y){x.postMessage({sourceName:M,targetName:y,callback:d.DATA,callbackId:Q.callbackId,data:Y})},function(Y){x.postMessage({sourceName:M,targetName:y,callback:d.ERROR,callbackId:Q.callbackId,reason:i(Y)})});return}if(Q.streamId){it(this,W,Pc).call(this,Q);return}J(Q.data)},x.addEventListener("message",this._onComObjOnMessage)}on(k,L){const x=this.actionHandler;if(x[k])throw new Error(`There is already an actionName called "${k}"`);x[k]=L}send(k,L,x){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:k,data:L},x)}sendWithPromise(k,L,x){const j=this.callbackId++,Q=new s.PromiseCapability;this.callbackCapabilities[j]=Q;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:k,callbackId:j,data:L},x)}catch(J){Q.reject(J)}return Q.promise}sendWithStream(k,L,x,j){const Q=this.streamId++,J=this.sourceName,M=this.targetName,y=this.comObj;return new ReadableStream({start:Y=>{const m=new s.PromiseCapability;return this.streamControllers[Q]={controller:Y,startCall:m,pullCall:null,cancelCall:null,isClosed:!1},y.postMessage({sourceName:J,targetName:M,action:k,streamId:Q,data:L,desiredSize:Y.desiredSize},j),m.promise},pull:Y=>{const m=new s.PromiseCapability;return this.streamControllers[Q].pullCall=m,y.postMessage({sourceName:J,targetName:M,stream:Z.PULL,streamId:Q,desiredSize:Y.desiredSize}),m.promise},cancel:Y=>{(0,s.assert)(Y instanceof Error,"cancel must have a valid reason");const m=new s.PromiseCapability;return this.streamControllers[Q].cancelCall=m,this.streamControllers[Q].isClosed=!0,y.postMessage({sourceName:J,targetName:M,stream:Z.CANCEL,streamId:Q,reason:i(Y)}),m.promise}},x)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}W=new WeakSet,Pc=function(k){const L=k.streamId,x=this.sourceName,j=k.sourceName,Q=this.comObj,J=this,M=this.actionHandler[k.action],y={enqueue(Y,m=1,D){if(this.isCancelled)return;const H=this.desiredSize;this.desiredSize-=m,H>0&&this.desiredSize<=0&&(this.sinkCapability=new s.PromiseCapability,this.ready=this.sinkCapability.promise),Q.postMessage({sourceName:x,targetName:j,stream:Z.ENQUEUE,streamId:L,chunk:Y},D)},close(){this.isCancelled||(this.isCancelled=!0,Q.postMessage({sourceName:x,targetName:j,stream:Z.CLOSE,streamId:L}),delete J.streamSinks[L])},error(Y){(0,s.assert)(Y instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,Q.postMessage({sourceName:x,targetName:j,stream:Z.ERROR,streamId:L,reason:i(Y)}))},sinkCapability:new s.PromiseCapability,onPull:null,onCancel:null,isCancelled:!1,desiredSize:k.desiredSize,ready:null};y.sinkCapability.resolve(),y.ready=y.sinkCapability.promise,this.streamSinks[L]=y,new Promise(function(Y){Y(M(k.data,y))}).then(function(){Q.postMessage({sourceName:x,targetName:j,stream:Z.START_COMPLETE,streamId:L,success:!0})},function(Y){Q.postMessage({sourceName:x,targetName:j,stream:Z.START_COMPLETE,streamId:L,reason:i(Y)})})},u=new WeakSet,Bc=function(k){const L=k.streamId,x=this.sourceName,j=k.sourceName,Q=this.comObj,J=this.streamControllers[L],M=this.streamSinks[L];switch(k.stream){case Z.START_COMPLETE:k.success?J.startCall.resolve():J.startCall.reject(i(k.reason));break;case Z.PULL_COMPLETE:k.success?J.pullCall.resolve():J.pullCall.reject(i(k.reason));break;case Z.PULL:if(!M){Q.postMessage({sourceName:x,targetName:j,stream:Z.PULL_COMPLETE,streamId:L,success:!0});break}M.desiredSize<=0&&k.desiredSize>0&&M.sinkCapability.resolve(),M.desiredSize=k.desiredSize,new Promise(function(y){var Y;y((Y=M.onPull)==null?void 0:Y.call(M))}).then(function(){Q.postMessage({sourceName:x,targetName:j,stream:Z.PULL_COMPLETE,streamId:L,success:!0})},function(y){Q.postMessage({sourceName:x,targetName:j,stream:Z.PULL_COMPLETE,streamId:L,reason:i(y)})});break;case Z.ENQUEUE:if((0,s.assert)(J,"enqueue should have stream controller"),J.isClosed)break;J.controller.enqueue(k.chunk);break;case Z.CLOSE:if((0,s.assert)(J,"close should have stream controller"),J.isClosed)break;J.isClosed=!0,J.controller.close(),it(this,z,mc).call(this,J,L);break;case Z.ERROR:(0,s.assert)(J,"error should have stream controller"),J.controller.error(i(k.reason)),it(this,z,mc).call(this,J,L);break;case Z.CANCEL_COMPLETE:k.success?J.cancelCall.resolve():J.cancelCall.reject(i(k.reason)),it(this,z,mc).call(this,J,L);break;case Z.CANCEL:if(!M)break;new Promise(function(y){var Y;y((Y=M.onCancel)==null?void 0:Y.call(M,i(k.reason)))}).then(function(){Q.postMessage({sourceName:x,targetName:j,stream:Z.CANCEL_COMPLETE,streamId:L,success:!0})},function(y){Q.postMessage({sourceName:x,targetName:j,stream:Z.CANCEL_COMPLETE,streamId:L,reason:i(y)})}),M.sinkCapability.reject(i(k.reason)),M.isCancelled=!0,delete this.streamSinks[L];break;default:throw new Error("Unexpected stream case")}},z=new WeakSet,mc=async function(k,L){var x,j,Q;await Promise.allSettled([(x=k.startCall)==null?void 0:x.promise,(j=k.pullCall)==null?void 0:j.promise,(Q=k.cancelCall)==null?void 0:Q.promise]),delete this.streamControllers[L]},t.MessageHandler=o},(l,t,c)=>{var Z,i;Object.defineProperty(t,"__esModule",{value:!0}),t.Metadata=void 0;var s=c(1);class d{constructor({parsedData:W,rawData:G}){st(this,Z,void 0);st(this,i,void 0);mt(this,Z,W),mt(this,i,G)}getRaw(){return E(this,i)}get(W){return E(this,Z).get(W)??null}getAll(){return(0,s.objectFromMap)(E(this,Z))}has(W){return E(this,Z).has(W)}}Z=new WeakMap,i=new WeakMap,t.Metadata=d},(l,t,c)=>{var W,G,u,X,z,R,Lc;Object.defineProperty(t,"__esModule",{value:!0}),t.OptionalContentConfig=void 0;var s=c(1),d=c(8);const Z=Symbol("INTERNAL");class i{constructor(L,x){st(this,W,!0);this.name=L,this.intent=x}get visible(){return E(this,W)}_setVisible(L,x){L!==Z&&(0,s.unreachable)("Internal method `_setVisible` called."),mt(this,W,x)}}W=new WeakMap;class o{constructor(L){st(this,R);st(this,G,null);st(this,u,new Map);st(this,X,null);st(this,z,null);if(this.name=null,this.creator=null,L!==null){this.name=L.name,this.creator=L.creator,mt(this,z,L.order);for(const x of L.groups)E(this,u).set(x.id,new i(x.name,x.intent));if(L.baseState==="OFF")for(const x of E(this,u).values())x._setVisible(Z,!1);for(const x of L.on)E(this,u).get(x)._setVisible(Z,!0);for(const x of L.off)E(this,u).get(x)._setVisible(Z,!1);mt(this,X,this.getHash())}}isVisible(L){if(E(this,u).size===0)return!0;if(!L)return(0,s.warn)("Optional content group not defined."),!0;if(L.type==="OCG")return E(this,u).has(L.id)?E(this,u).get(L.id).visible:((0,s.warn)(`Optional content group not found: ${L.id}`),!0);if(L.type==="OCMD"){if(L.expression)return it(this,R,Lc).call(this,L.expression);if(!L.policy||L.policy==="AnyOn"){for(const x of L.ids){if(!E(this,u).has(x))return(0,s.warn)(`Optional content group not found: ${x}`),!0;if(E(this,u).get(x).visible)return!0}return!1}else if(L.policy==="AllOn"){for(const x of L.ids){if(!E(this,u).has(x))return(0,s.warn)(`Optional content group not found: ${x}`),!0;if(!E(this,u).get(x).visible)return!1}return!0}else if(L.policy==="AnyOff"){for(const x of L.ids){if(!E(this,u).has(x))return(0,s.warn)(`Optional content group not found: ${x}`),!0;if(!E(this,u).get(x).visible)return!0}return!1}else if(L.policy==="AllOff"){for(const x of L.ids){if(!E(this,u).has(x))return(0,s.warn)(`Optional content group not found: ${x}`),!0;if(E(this,u).get(x).visible)return!1}return!0}return(0,s.warn)(`Unknown optional content policy ${L.policy}.`),!0}return(0,s.warn)(`Unknown group type ${L.type}.`),!0}setVisibility(L,x=!0){if(!E(this,u).has(L)){(0,s.warn)(`Optional content group not found: ${L}`);return}E(this,u).get(L)._setVisible(Z,!!x),mt(this,G,null)}get hasInitialVisibility(){return this.getHash()===E(this,X)}getOrder(){return E(this,u).size?E(this,z)?E(this,z).slice():[...E(this,u).keys()]:null}getGroups(){return E(this,u).size>0?(0,s.objectFromMap)(E(this,u)):null}getGroup(L){return E(this,u).get(L)||null}getHash(){if(E(this,G)!==null)return E(this,G);const L=new d.MurmurHash3_64;for(const[x,j]of E(this,u))L.update(`${x}:${j.visible}`);return mt(this,G,L.hexdigest())}}G=new WeakMap,u=new WeakMap,X=new WeakMap,z=new WeakMap,R=new WeakSet,Lc=function(L){const x=L.length;if(x<2)return!0;const j=L[0];for(let Q=1;Q{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFDataTransportStream=void 0;var s=c(1),d=c(6);class Z{constructor({length:G,initialData:u,progressiveDone:X=!1,contentDispositionFilename:z=null,disableRange:R=!1,disableStream:S=!1},k){if((0,s.assert)(k,'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'),this._queuedChunks=[],this._progressiveDone=X,this._contentDispositionFilename=z,(u==null?void 0:u.length)>0){const L=u instanceof Uint8Array&&u.byteLength===u.buffer.byteLength?u.buffer:new Uint8Array(u).buffer;this._queuedChunks.push(L)}this._pdfDataRangeTransport=k,this._isStreamingSupported=!S,this._isRangeSupported=!R,this._contentLength=G,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener((L,x)=>{this._onReceiveData({begin:L,chunk:x})}),this._pdfDataRangeTransport.addProgressListener((L,x)=>{this._onProgress({loaded:L,total:x})}),this._pdfDataRangeTransport.addProgressiveReadListener(L=>{this._onReceiveData({chunk:L})}),this._pdfDataRangeTransport.addProgressiveDoneListener(()=>{this._onProgressiveDone()}),this._pdfDataRangeTransport.transportReady()}_onReceiveData({begin:G,chunk:u}){const X=u instanceof Uint8Array&&u.byteLength===u.buffer.byteLength?u.buffer:new Uint8Array(u).buffer;if(G===void 0)this._fullRequestReader?this._fullRequestReader._enqueue(X):this._queuedChunks.push(X);else{const z=this._rangeReaders.some(function(R){return R._begin!==G?!1:(R._enqueue(X),!0)});(0,s.assert)(z,"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.")}}get _progressiveDataLength(){var G;return((G=this._fullRequestReader)==null?void 0:G._loaded)??0}_onProgress(G){var u,X,z,R;G.total===void 0?(X=(u=this._rangeReaders[0])==null?void 0:u.onProgress)==null||X.call(u,{loaded:G.loaded}):(R=(z=this._fullRequestReader)==null?void 0:z.onProgress)==null||R.call(z,{loaded:G.loaded,total:G.total})}_onProgressiveDone(){var G;(G=this._fullRequestReader)==null||G.progressiveDone(),this._progressiveDone=!0}_removeRangeReader(G){const u=this._rangeReaders.indexOf(G);u>=0&&this._rangeReaders.splice(u,1)}getFullReader(){(0,s.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");const G=this._queuedChunks;return this._queuedChunks=null,new i(this,G,this._progressiveDone,this._contentDispositionFilename)}getRangeReader(G,u){if(u<=this._progressiveDataLength)return null;const X=new o(this,G,u);return this._pdfDataRangeTransport.requestDataRange(G,u),this._rangeReaders.push(X),X}cancelAllRequests(G){var u;(u=this._fullRequestReader)==null||u.cancel(G);for(const X of this._rangeReaders.slice(0))X.cancel(G);this._pdfDataRangeTransport.abort()}}t.PDFDataTransportStream=Z;class i{constructor(G,u,X=!1,z=null){this._stream=G,this._done=X||!1,this._filename=(0,d.isPdfFile)(z)?z:null,this._queuedChunks=u||[],this._loaded=0;for(const R of this._queuedChunks)this._loaded+=R.byteLength;this._requests=[],this._headersReady=Promise.resolve(),G._fullRequestReader=this,this.onProgress=null}_enqueue(G){this._done||(this._requests.length>0?this._requests.shift().resolve({value:G,done:!1}):this._queuedChunks.push(G),this._loaded+=G.byteLength)}get headersReady(){return this._headersReady}get filename(){return this._filename}get isRangeSupported(){return this._stream._isRangeSupported}get isStreamingSupported(){return this._stream._isStreamingSupported}get contentLength(){return this._stream._contentLength}async read(){if(this._queuedChunks.length>0)return{value:this._queuedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const G=new s.PromiseCapability;return this._requests.push(G),G.promise}cancel(G){this._done=!0;for(const u of this._requests)u.resolve({value:void 0,done:!0});this._requests.length=0}progressiveDone(){this._done||(this._done=!0)}}class o{constructor(G,u,X){this._stream=G,this._begin=u,this._end=X,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}_enqueue(G){if(!this._done){if(this._requests.length===0)this._queuedChunk=G;else{this._requests.shift().resolve({value:G,done:!1});for(const X of this._requests)X.resolve({value:void 0,done:!0});this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}get isStreamingSupported(){return!1}async read(){if(this._queuedChunk){const u=this._queuedChunk;return this._queuedChunk=null,{value:u,done:!1}}if(this._done)return{value:void 0,done:!0};const G=new s.PromiseCapability;return this._requests.push(G),G.promise}cancel(G){this._done=!0;for(const u of this._requests)u.resolve({value:void 0,done:!0});this._requests.length=0,this._stream._removeRangeReader(this)}}},(l,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XfaText=void 0;class c{static textContent(d){const Z=[],i={items:Z,styles:Object.create(null)};function o(W){var X;if(!W)return;let G=null;const u=W.name;if(u==="#text")G=W.value;else if(c.shouldBuildText(u))(X=W==null?void 0:W.attributes)!=null&&X.textContent?G=W.attributes.textContent:W.value&&(G=W.value);else return;if(G!==null&&Z.push({str:G}),!!W.children)for(const z of W.children)o(z)}return o(d),i}static shouldBuildText(d){return!(d==="textarea"||d==="input"||d==="option"||d==="select")}}t.XfaText=c},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NodeStandardFontDataFactory=t.NodeFilterFactory=t.NodeCanvasFactory=t.NodeCMapReaderFactory=void 0;var s=c(7);const d=function(G){return new Promise((u,X)=>{require$$5.readFile(G,(R,S)=>{if(R||!S){X(new Error(R));return}u(new Uint8Array(S))})})};class Z extends s.BaseFilterFactory{}t.NodeFilterFactory=Z;class i extends s.BaseCanvasFactory{_createCanvas(u,X){return require$$5.createCanvas(u,X)}}t.NodeCanvasFactory=i;class o extends s.BaseCMapReaderFactory{_fetchData(u,X){return d(u).then(z=>({cMapData:z,compressionType:X}))}}t.NodeCMapReaderFactory=o;class W extends s.BaseStandardFontDataFactory{_fetchData(u){return d(u)}}t.NodeStandardFontDataFactory=W},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFNodeStream=void 0;var s=c(1),d=c(22);const Z=require$$5,i=require$$5,o=require$$5,W=require$$5,G=/^file:\/\/\/[a-zA-Z]:\//;function u(Q){const J=W.parse(Q);return J.protocol==="file:"||J.host?J:/^[a-z]:[/\\]/i.test(Q)?W.parse(`file:///${Q}`):(J.host||(J.protocol="file:"),J)}class X{constructor(J){this.source=J,this.url=u(J.url),this.isHttp=this.url.protocol==="http:"||this.url.protocol==="https:",this.isFsUrl=this.url.protocol==="file:",this.httpHeaders=this.isHttp&&J.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var J;return((J=this._fullRequestReader)==null?void 0:J._loaded)??0}getFullReader(){return(0,s.assert)(!this._fullRequestReader,"PDFNodeStream.getFullReader can only be called once."),this._fullRequestReader=this.isFsUrl?new x(this):new k(this),this._fullRequestReader}getRangeReader(J,M){if(M<=this._progressiveDataLength)return null;const y=this.isFsUrl?new j(this,J,M):new L(this,J,M);return this._rangeRequestReaders.push(y),y}cancelAllRequests(J){var M;(M=this._fullRequestReader)==null||M.cancel(J);for(const y of this._rangeRequestReaders.slice(0))y.cancel(J)}}t.PDFNodeStream=X;class z{constructor(J){this._url=J.url,this._done=!1,this._storedError=null,this.onProgress=null;const M=J.source;this._contentLength=M.length,this._loaded=0,this._filename=null,this._disableRange=M.disableRange||!1,this._rangeChunkSize=M.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!M.disableStream,this._isRangeSupported=!M.disableRange,this._readableStream=null,this._readCapability=new s.PromiseCapability,this._headersCapability=new s.PromiseCapability}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){var y;if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const J=this._readableStream.read();return J===null?(this._readCapability=new s.PromiseCapability,this.read()):(this._loaded+=J.length,(y=this.onProgress)==null||y.call(this,{loaded:this._loaded,total:this._contentLength}),{value:new Uint8Array(J).buffer,done:!1})}cancel(J){if(!this._readableStream){this._error(J);return}this._readableStream.destroy(J)}_error(J){this._storedError=J,this._readCapability.resolve()}_setReadableStream(J){this._readableStream=J,J.on("readable",()=>{this._readCapability.resolve()}),J.on("end",()=>{J.destroy(),this._done=!0,this._readCapability.resolve()}),J.on("error",M=>{this._error(M)}),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new s.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}class R{constructor(J){this._url=J.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=new s.PromiseCapability;const M=J.source;this._isStreamingSupported=!M.disableStream}get isStreamingSupported(){return this._isStreamingSupported}async read(){var y;if(await this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const J=this._readableStream.read();return J===null?(this._readCapability=new s.PromiseCapability,this.read()):(this._loaded+=J.length,(y=this.onProgress)==null||y.call(this,{loaded:this._loaded}),{value:new Uint8Array(J).buffer,done:!1})}cancel(J){if(!this._readableStream){this._error(J);return}this._readableStream.destroy(J)}_error(J){this._storedError=J,this._readCapability.resolve()}_setReadableStream(J){this._readableStream=J,J.on("readable",()=>{this._readCapability.resolve()}),J.on("end",()=>{J.destroy(),this._done=!0,this._readCapability.resolve()}),J.on("error",M=>{this._error(M)}),this._storedError&&this._readableStream.destroy(this._storedError)}}function S(Q,J){return{protocol:Q.protocol,auth:Q.auth,host:Q.hostname,port:Q.port,path:Q.path,method:"GET",headers:J}}class k extends z{constructor(J){super(J);const M=y=>{if(y.statusCode===404){const H=new s.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=H,this._headersCapability.reject(H);return}this._headersCapability.resolve(),this._setReadableStream(y);const Y=H=>this._readableStream.headers[H.toLowerCase()],{allowRangeRequests:m,suggestedLength:D}=(0,d.validateRangeRequestCapabilities)({getResponseHeader:Y,isHttp:J.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=m,this._contentLength=D||this._contentLength,this._filename=(0,d.extractFilenameFromHeader)(Y)};this._request=null,this._url.protocol==="http:"?this._request=i.request(S(this._url,J.httpHeaders),M):this._request=o.request(S(this._url,J.httpHeaders),M),this._request.on("error",y=>{this._storedError=y,this._headersCapability.reject(y)}),this._request.end()}}class L extends R{constructor(J,M,y){super(J),this._httpHeaders={};for(const m in J.httpHeaders){const D=J.httpHeaders[m];D!==void 0&&(this._httpHeaders[m]=D)}this._httpHeaders.Range=`bytes=${M}-${y-1}`;const Y=m=>{if(m.statusCode===404){const D=new s.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=D;return}this._setReadableStream(m)};this._request=null,this._url.protocol==="http:"?this._request=i.request(S(this._url,this._httpHeaders),Y):this._request=o.request(S(this._url,this._httpHeaders),Y),this._request.on("error",m=>{this._storedError=m}),this._request.end()}}class x extends z{constructor(J){super(J);let M=decodeURIComponent(this._url.path);G.test(this._url.href)&&(M=M.replace(/^\//,"")),Z.lstat(M,(y,Y)=>{if(y){y.code==="ENOENT"&&(y=new s.MissingPDFException(`Missing PDF "${M}".`)),this._storedError=y,this._headersCapability.reject(y);return}this._contentLength=Y.size,this._setReadableStream(Z.createReadStream(M)),this._headersCapability.resolve()})}}class j extends R{constructor(J,M,y){super(J);let Y=decodeURIComponent(this._url.path);G.test(this._url.href)&&(Y=Y.replace(/^\//,"")),this._setReadableStream(Z.createReadStream(Y,{start:M,end:y-1}))}}},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createResponseStatusError=W,t.extractFilenameFromHeader=o,t.validateRangeRequestCapabilities=i,t.validateResponseStatus=G;var s=c(1),d=c(23),Z=c(6);function i({getResponseHeader:u,isHttp:X,rangeChunkSize:z,disableRange:R}){const S={allowRangeRequests:!1,suggestedLength:void 0},k=parseInt(u("Content-Length"),10);return!Number.isInteger(k)||(S.suggestedLength=k,k<=2*z)||R||!X||u("Accept-Ranges")!=="bytes"||(u("Content-Encoding")||"identity")!=="identity"||(S.allowRangeRequests=!0),S}function o(u){const X=u("Content-Disposition");if(X){let z=(0,d.getFilenameFromContentDispositionHeader)(X);if(z.includes("%"))try{z=decodeURIComponent(z)}catch{}if((0,Z.isPdfFile)(z))return z}return null}function W(u,X){return u===404||u===0&&X.startsWith("file:")?new s.MissingPDFException('Missing PDF "'+X+'".'):new s.UnexpectedResponseException(`Unexpected server response (${u}) while retrieving PDF "${X}".`,u)}function G(u){return u===200||u===206}},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFilenameFromContentDispositionHeader=d;var s=c(1);function d(Z){let i=!0,o=W("filename\\*","i").exec(Z);if(o){o=o[1];let k=z(o);return k=unescape(k),k=R(k),k=S(k),u(k)}if(o=X(Z),o){const k=S(o);return u(k)}if(o=W("filename","i").exec(Z),o){o=o[1];let k=z(o);return k=S(k),u(k)}function W(k,L){return new RegExp("(?:^|;)\\s*"+k+'\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)',L)}function G(k,L){if(k){if(!/^[\x00-\xFF]+$/.test(L))return L;try{const x=new TextDecoder(k,{fatal:!0}),j=(0,s.stringToBytes)(L);L=x.decode(j),i=!1}catch{}}return L}function u(k){return i&&/[\x80-\xff]/.test(k)&&(k=G("utf-8",k),i&&(k=G("iso-8859-1",k))),k}function X(k){const L=[];let x;const j=W("filename\\*((?!0\\d)\\d+)(\\*?)","ig");for(;(x=j.exec(k))!==null;){let[,J,M,y]=x;if(J=parseInt(J,10),J in L){if(J===0)break;continue}L[J]=[M,y]}const Q=[];for(let J=0;J{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFNetworkStream=void 0;var s=c(1),d=c(22);const Z=200,i=206;function o(z){const R=z.response;return typeof R!="string"?R:(0,s.stringToBytes)(R).buffer}class W{constructor(R,S={}){this.url=R,this.isHttp=/^https?:/i.test(R),this.httpHeaders=this.isHttp&&S.httpHeaders||Object.create(null),this.withCredentials=S.withCredentials||!1,this.currXhrId=0,this.pendingRequests=Object.create(null)}requestRange(R,S,k){const L={begin:R,end:S};for(const x in k)L[x]=k[x];return this.request(L)}requestFull(R){return this.request(R)}request(R){const S=new XMLHttpRequest,k=this.currXhrId++,L=this.pendingRequests[k]={xhr:S};S.open("GET",this.url),S.withCredentials=this.withCredentials;for(const x in this.httpHeaders){const j=this.httpHeaders[x];j!==void 0&&S.setRequestHeader(x,j)}return this.isHttp&&"begin"in R&&"end"in R?(S.setRequestHeader("Range",`bytes=${R.begin}-${R.end-1}`),L.expectedStatus=i):L.expectedStatus=Z,S.responseType="arraybuffer",R.onError&&(S.onerror=function(x){R.onError(S.status)}),S.onreadystatechange=this.onStateChange.bind(this,k),S.onprogress=this.onProgress.bind(this,k),L.onHeadersReceived=R.onHeadersReceived,L.onDone=R.onDone,L.onError=R.onError,L.onProgress=R.onProgress,S.send(null),k}onProgress(R,S){var L;const k=this.pendingRequests[R];k&&((L=k.onProgress)==null||L.call(k,S))}onStateChange(R,S){var J,M,y;const k=this.pendingRequests[R];if(!k)return;const L=k.xhr;if(L.readyState>=2&&k.onHeadersReceived&&(k.onHeadersReceived(),delete k.onHeadersReceived),L.readyState!==4||!(R in this.pendingRequests))return;if(delete this.pendingRequests[R],L.status===0&&this.isHttp){(J=k.onError)==null||J.call(k,L.status);return}const x=L.status||Z;if(!(x===Z&&k.expectedStatus===i)&&x!==k.expectedStatus){(M=k.onError)==null||M.call(k,L.status);return}const Q=o(L);if(x===i){const Y=L.getResponseHeader("Content-Range"),m=/bytes (\d+)-(\d+)\/(\d+)/.exec(Y);k.onDone({begin:parseInt(m[1],10),chunk:Q})}else Q?k.onDone({begin:0,chunk:Q}):(y=k.onError)==null||y.call(k,L.status)}getRequestXhr(R){return this.pendingRequests[R].xhr}isPendingRequest(R){return R in this.pendingRequests}abortRequest(R){const S=this.pendingRequests[R].xhr;delete this.pendingRequests[R],S.abort()}}class G{constructor(R){this._source=R,this._manager=new W(R.url,{httpHeaders:R.httpHeaders,withCredentials:R.withCredentials}),this._rangeChunkSize=R.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}_onRangeRequestReaderClosed(R){const S=this._rangeRequestReaders.indexOf(R);S>=0&&this._rangeRequestReaders.splice(S,1)}getFullReader(){return(0,s.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new u(this._manager,this._source),this._fullRequestReader}getRangeReader(R,S){const k=new X(this._manager,R,S);return k.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(k),k}cancelAllRequests(R){var S;(S=this._fullRequestReader)==null||S.cancel(R);for(const k of this._rangeRequestReaders.slice(0))k.cancel(R)}}t.PDFNetworkStream=G;class u{constructor(R,S){this._manager=R;const k={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=S.url,this._fullRequestId=R.requestFull(k),this._headersReceivedCapability=new s.PromiseCapability,this._disableRange=S.disableRange||!1,this._contentLength=S.length,this._rangeChunkSize=S.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}_onHeadersReceived(){const R=this._fullRequestId,S=this._manager.getRequestXhr(R),k=j=>S.getResponseHeader(j),{allowRangeRequests:L,suggestedLength:x}=(0,d.validateRangeRequestCapabilities)({getResponseHeader:k,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});L&&(this._isRangeSupported=!0),this._contentLength=x||this._contentLength,this._filename=(0,d.extractFilenameFromHeader)(k),this._isRangeSupported&&this._manager.abortRequest(R),this._headersReceivedCapability.resolve()}_onDone(R){if(R&&(this._requests.length>0?this._requests.shift().resolve({value:R.chunk,done:!1}):this._cachedChunks.push(R.chunk)),this._done=!0,!(this._cachedChunks.length>0)){for(const S of this._requests)S.resolve({value:void 0,done:!0});this._requests.length=0}}_onError(R){this._storedError=(0,d.createResponseStatusError)(R,this._url),this._headersReceivedCapability.reject(this._storedError);for(const S of this._requests)S.reject(this._storedError);this._requests.length=0,this._cachedChunks.length=0}_onProgress(R){var S;(S=this.onProgress)==null||S.call(this,{loaded:R.loaded,total:R.lengthComputable?R.total:this._contentLength})}get filename(){return this._filename}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}get contentLength(){return this._contentLength}get headersReady(){return this._headersReceivedCapability.promise}async read(){if(this._storedError)throw this._storedError;if(this._cachedChunks.length>0)return{value:this._cachedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const R=new s.PromiseCapability;return this._requests.push(R),R.promise}cancel(R){this._done=!0,this._headersReceivedCapability.reject(R);for(const S of this._requests)S.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}class X{constructor(R,S,k){this._manager=R;const L={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=R.url,this._requestId=R.requestRange(S,k,L),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}_close(){var R;(R=this.onClosed)==null||R.call(this,this)}_onDone(R){const S=R.chunk;this._requests.length>0?this._requests.shift().resolve({value:S,done:!1}):this._queuedChunk=S,this._done=!0;for(const k of this._requests)k.resolve({value:void 0,done:!0});this._requests.length=0,this._close()}_onError(R){this._storedError=(0,d.createResponseStatusError)(R,this._url);for(const S of this._requests)S.reject(this._storedError);this._requests.length=0,this._queuedChunk=null}_onProgress(R){var S;this.isStreamingSupported||(S=this.onProgress)==null||S.call(this,{loaded:R.loaded})}get isStreamingSupported(){return!1}async read(){if(this._storedError)throw this._storedError;if(this._queuedChunk!==null){const S=this._queuedChunk;return this._queuedChunk=null,{value:S,done:!1}}if(this._done)return{value:void 0,done:!0};const R=new s.PromiseCapability;return this._requests.push(R),R.promise}cancel(R){this._done=!0;for(const S of this._requests)S.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFFetchStream=void 0;var s=c(1),d=c(22);function Z(X,z,R){return{method:"GET",headers:X,signal:R.signal,mode:"cors",credentials:z?"include":"same-origin",redirect:"follow"}}function i(X){const z=new Headers;for(const R in X){const S=X[R];S!==void 0&&z.append(R,S)}return z}function o(X){return X instanceof Uint8Array?X.buffer:X instanceof ArrayBuffer?X:((0,s.warn)(`getArrayBuffer - unexpected data format: ${X}`),new Uint8Array(X).buffer)}class W{constructor(z){this.source=z,this.isHttp=/^https?:/i.test(z.url),this.httpHeaders=this.isHttp&&z.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var z;return((z=this._fullRequestReader)==null?void 0:z._loaded)??0}getFullReader(){return(0,s.assert)(!this._fullRequestReader,"PDFFetchStream.getFullReader can only be called once."),this._fullRequestReader=new G(this),this._fullRequestReader}getRangeReader(z,R){if(R<=this._progressiveDataLength)return null;const S=new u(this,z,R);return this._rangeRequestReaders.push(S),S}cancelAllRequests(z){var R;(R=this._fullRequestReader)==null||R.cancel(z);for(const S of this._rangeRequestReaders.slice(0))S.cancel(z)}}t.PDFFetchStream=W;class G{constructor(z){this._stream=z,this._reader=null,this._loaded=0,this._filename=null;const R=z.source;this._withCredentials=R.withCredentials||!1,this._contentLength=R.length,this._headersCapability=new s.PromiseCapability,this._disableRange=R.disableRange||!1,this._rangeChunkSize=R.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!R.disableStream,this._isRangeSupported=!R.disableRange,this._headers=i(this._stream.httpHeaders);const S=R.url;fetch(S,Z(this._headers,this._withCredentials,this._abortController)).then(k=>{if(!(0,d.validateResponseStatus)(k.status))throw(0,d.createResponseStatusError)(k.status,S);this._reader=k.body.getReader(),this._headersCapability.resolve();const L=Q=>k.headers.get(Q),{allowRangeRequests:x,suggestedLength:j}=(0,d.validateRangeRequestCapabilities)({getResponseHeader:L,isHttp:this._stream.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=x,this._contentLength=j||this._contentLength,this._filename=(0,d.extractFilenameFromHeader)(L),!this._isStreamingSupported&&this._isRangeSupported&&this.cancel(new s.AbortException("Streaming is disabled."))}).catch(this._headersCapability.reject),this.onProgress=null}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){var S;await this._headersCapability.promise;const{value:z,done:R}=await this._reader.read();return R?{value:z,done:R}:(this._loaded+=z.byteLength,(S=this.onProgress)==null||S.call(this,{loaded:this._loaded,total:this._contentLength}),{value:o(z),done:!1})}cancel(z){var R;(R=this._reader)==null||R.cancel(z),this._abortController.abort()}}class u{constructor(z,R,S){this._stream=z,this._reader=null,this._loaded=0;const k=z.source;this._withCredentials=k.withCredentials||!1,this._readCapability=new s.PromiseCapability,this._isStreamingSupported=!k.disableStream,this._abortController=new AbortController,this._headers=i(this._stream.httpHeaders),this._headers.append("Range",`bytes=${R}-${S-1}`);const L=k.url;fetch(L,Z(this._headers,this._withCredentials,this._abortController)).then(x=>{if(!(0,d.validateResponseStatus)(x.status))throw(0,d.createResponseStatusError)(x.status,L);this._readCapability.resolve(),this._reader=x.body.getReader()}).catch(this._readCapability.reject),this.onProgress=null}get isStreamingSupported(){return this._isStreamingSupported}async read(){var S;await this._readCapability.promise;const{value:z,done:R}=await this._reader.read();return R?{value:z,done:R}:(this._loaded+=z.byteLength,(S=this.onProgress)==null||S.call(this,{loaded:this._loaded}),{value:o(z),done:!1})}cancel(z){var R;(R=this._reader)==null||R.cancel(z),this._abortController.abort()}}},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TextLayerRenderTask=void 0,t.renderTextLayer=k,t.updateTextLayer=L;var s=c(1),d=c(6);const Z=1e5,i=30,o=.8,W=new Map;function G(x,j){let Q;if(j&&s.FeatureTest.isOffscreenCanvasSupported)Q=new OffscreenCanvas(x,x).getContext("2d",{alpha:!1});else{const J=document.createElement("canvas");J.width=J.height=x,Q=J.getContext("2d",{alpha:!1})}return Q}function u(x,j){const Q=W.get(x);if(Q)return Q;const J=G(i,j);J.font=`${i}px ${x}`;const M=J.measureText("");let y=M.fontBoundingBoxAscent,Y=Math.abs(M.fontBoundingBoxDescent);if(y){const D=y/(y+Y);return W.set(x,D),J.canvas.width=J.canvas.height=0,D}J.strokeStyle="red",J.clearRect(0,0,i,i),J.strokeText("g",0,0);let m=J.getImageData(0,0,i,i).data;Y=0;for(let D=m.length-1-3;D>=0;D-=4)if(m[D]>0){Y=Math.ceil(D/4/i);break}J.clearRect(0,0,i,i),J.strokeText("A",0,i),m=J.getImageData(0,0,i,i).data,y=0;for(let D=0,H=m.length;D0){y=i-Math.floor(D/4/i);break}if(J.canvas.width=J.canvas.height=0,y){const D=y/(y+Y);return W.set(x,D),D}return W.set(x,o),o}function X(x,j,Q){const J=document.createElement("span"),M={angle:0,canvasWidth:0,hasText:j.str!=="",hasEOL:j.hasEOL,fontSize:0};x._textDivs.push(J);const y=s.Util.transform(x._transform,j.transform);let Y=Math.atan2(y[1],y[0]);const m=Q[j.fontName];m.vertical&&(Y+=Math.PI/2);const D=Math.hypot(y[2],y[3]),H=D*u(m.fontFamily,x._isOffscreenCanvasSupported);let V,v;Y===0?(V=y[4],v=y[5]-H):(V=y[4]+H*Math.sin(Y),v=y[5]-H*Math.cos(Y));const A="calc(var(--scale-factor)*",Nl=J.style;x._container===x._rootContainer?(Nl.left=`${(100*V/x._pageWidth).toFixed(2)}%`,Nl.top=`${(100*v/x._pageHeight).toFixed(2)}%`):(Nl.left=`${A}${V.toFixed(2)}px)`,Nl.top=`${A}${v.toFixed(2)}px)`),Nl.fontSize=`${A}${D.toFixed(2)}px)`,Nl.fontFamily=m.fontFamily,M.fontSize=D,J.setAttribute("role","presentation"),J.textContent=j.str,J.dir=j.dir,x._fontInspectorEnabled&&(J.dataset.fontName=j.fontName),Y!==0&&(M.angle=Y*(180/Math.PI));let fl=!1;if(j.str.length>1)fl=!0;else if(j.str!==" "&&j.transform[0]!==j.transform[3]){const Xl=Math.abs(j.transform[0]),Zt=Math.abs(j.transform[3]);Xl!==Zt&&Math.max(Xl,Zt)/Math.min(Xl,Zt)>1.5&&(fl=!0)}fl&&(M.canvasWidth=m.vertical?j.height:j.width),x._textDivProperties.set(J,M),x._isReadableStream&&x._layoutText(J)}function z(x){const{div:j,scale:Q,properties:J,ctx:M,prevFontSize:y,prevFontFamily:Y}=x,{style:m}=j;let D="";if(J.canvasWidth!==0&&J.hasText){const{fontFamily:H}=m,{canvasWidth:V,fontSize:v}=J;(y!==v||Y!==H)&&(M.font=`${v*Q}px ${H}`,x.prevFontSize=v,x.prevFontFamily=H);const{width:A}=M.measureText(j.textContent);A>0&&(D=`scaleX(${V*Q/A})`)}J.angle!==0&&(D=`rotate(${J.angle}deg) ${D}`),D.length>0&&(m.transform=D)}function R(x){if(x._canceled)return;const j=x._textDivs,Q=x._capability;if(j.length>Z){Q.resolve();return}if(!x._isReadableStream)for(const M of j)x._layoutText(M);Q.resolve()}class S{constructor({textContentSource:j,container:Q,viewport:J,textDivs:M,textDivProperties:y,textContentItemsStr:Y,isOffscreenCanvasSupported:m}){var A;this._textContentSource=j,this._isReadableStream=j instanceof ReadableStream,this._container=this._rootContainer=Q,this._textDivs=M||[],this._textContentItemsStr=Y||[],this._isOffscreenCanvasSupported=m,this._fontInspectorEnabled=!!((A=globalThis.FontInspector)!=null&&A.enabled),this._reader=null,this._textDivProperties=y||new WeakMap,this._canceled=!1,this._capability=new s.PromiseCapability,this._layoutTextParams={prevFontSize:null,prevFontFamily:null,div:null,scale:J.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:G(0,m)};const{pageWidth:D,pageHeight:H,pageX:V,pageY:v}=J.rawDims;this._transform=[1,0,0,-1,-V,v+H],this._pageWidth=D,this._pageHeight=H,(0,d.setLayerDimensions)(Q,J),this._capability.promise.finally(()=>{this._layoutTextParams=null}).catch(()=>{})}get promise(){return this._capability.promise}cancel(){this._canceled=!0,this._reader&&(this._reader.cancel(new s.AbortException("TextLayer task cancelled.")).catch(()=>{}),this._reader=null),this._capability.reject(new s.AbortException("TextLayer task cancelled."))}_processItems(j,Q){for(const J of j){if(J.str===void 0){if(J.type==="beginMarkedContentProps"||J.type==="beginMarkedContent"){const M=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),J.id!==null&&this._container.setAttribute("id",`${J.id}`),M.append(this._container)}else J.type==="endMarkedContent"&&(this._container=this._container.parentNode);continue}this._textContentItemsStr.push(J.str),X(this,J,Q)}}_layoutText(j){const Q=this._layoutTextParams.properties=this._textDivProperties.get(j);if(this._layoutTextParams.div=j,z(this._layoutTextParams),Q.hasText&&this._container.append(j),Q.hasEOL){const J=document.createElement("br");J.setAttribute("role","presentation"),this._container.append(J)}}_render(){const j=new s.PromiseCapability;let Q=Object.create(null);if(this._isReadableStream){const J=()=>{this._reader.read().then(({value:M,done:y})=>{if(y){j.resolve();return}Object.assign(Q,M.styles),this._processItems(M.items,Q),J()},j.reject)};this._reader=this._textContentSource.getReader(),J()}else if(this._textContentSource){const{items:J,styles:M}=this._textContentSource;this._processItems(J,M),j.resolve()}else throw new Error('No "textContentSource" parameter specified.');j.promise.then(()=>{Q=null,R(this)},this._capability.reject)}}t.TextLayerRenderTask=S;function k(x){!x.textContentSource&&(x.textContent||x.textContentStream)&&((0,d.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters will be removed in the future, please use `textContentSource` instead."),x.textContentSource=x.textContent||x.textContentStream);const{container:j,viewport:Q}=x,J=getComputedStyle(j),M=J.getPropertyValue("visibility"),y=parseFloat(J.getPropertyValue("--scale-factor"));M==="visible"&&(!y||Math.abs(y-Q.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.");const Y=new S(x);return Y._render(),Y}function L({container:x,viewport:j,textDivs:Q,textDivProperties:J,isOffscreenCanvasSupported:M,mustRotate:y=!0,mustRescale:Y=!0}){if(y&&(0,d.setLayerDimensions)(x,{rotation:j.rotation}),Y){const m=G(0,M),H={prevFontSize:null,prevFontFamily:null,div:null,scale:j.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:m};for(const V of Q)H.properties=J.get(V),H.div=V,z(H)}}},(l,t,c)=>{var G,u,X,z,R,S,k,L,x,pc,Q,fc,M,zc,Y,Ic;Object.defineProperty(t,"__esModule",{value:!0}),t.AnnotationEditorLayer=void 0;var s=c(1),d=c(5),Z=c(28),i=c(29),o=c(6);const D=class{constructor(V){st(this,x);st(this,Q);st(this,M);st(this,Y);st(this,G,void 0);st(this,u,!1);st(this,X,this.pointerup.bind(this));st(this,z,this.pointerdown.bind(this));st(this,R,new Map);st(this,S,!1);st(this,k,!1);st(this,L,void 0);D._initialized||(D._initialized=!0,Z.FreeTextEditor.initialize(V.l10n),i.InkEditor.initialize(V.l10n)),V.uiManager.registerEditorTypes([Z.FreeTextEditor,i.InkEditor]),mt(this,L,V.uiManager),this.pageIndex=V.pageIndex,this.div=V.div,mt(this,G,V.accessibilityManager),E(this,L).addLayer(this)}get isEmpty(){return E(this,R).size===0}updateToolbar(V){E(this,L).updateToolbar(V)}updateMode(V=E(this,L).getMode()){it(this,Y,Ic).call(this),V===s.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),E(this,L).unselectAll(),V!==s.AnnotationEditorType.NONE&&(this.div.classList.toggle("freeTextEditing",V===s.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",V===s.AnnotationEditorType.INK),this.div.hidden=!1)}addInkEditorIfNeeded(V){if(!V&&E(this,L).getMode()!==s.AnnotationEditorType.INK)return;if(!V){for(const A of E(this,R).values())if(A.isEmpty()){A.setInBackground();return}}it(this,M,zc).call(this,{offsetX:0,offsetY:0}).setInBackground()}setEditingState(V){E(this,L).setEditingState(V)}addCommands(V){E(this,L).addCommands(V)}enable(){this.div.style.pointerEvents="auto";for(const V of E(this,R).values())V.enableEditing()}disable(){this.div.style.pointerEvents="none";for(const V of E(this,R).values())V.disableEditing();it(this,Y,Ic).call(this),this.isEmpty&&(this.div.hidden=!0)}setActiveEditor(V){E(this,L).getActive()!==V&&E(this,L).setActiveEditor(V)}enableClick(){this.div.addEventListener("pointerdown",E(this,z)),this.div.addEventListener("pointerup",E(this,X))}disableClick(){this.div.removeEventListener("pointerdown",E(this,z)),this.div.removeEventListener("pointerup",E(this,X))}attach(V){E(this,R).set(V.id,V)}detach(V){var v;E(this,R).delete(V.id),(v=E(this,G))==null||v.removePointerInTextLayer(V.contentDiv)}remove(V){E(this,L).removeEditor(V),this.detach(V),V.div.style.display="none",setTimeout(()=>{V.div.style.display="",V.div.remove(),V.isAttachedToDOM=!1,document.activeElement===document.body&&E(this,L).focusMainContainer()},0),E(this,k)||this.addInkEditorIfNeeded(!1)}add(V){if(it(this,x,pc).call(this,V),E(this,L).addEditor(V),this.attach(V),!V.isAttachedToDOM){const v=V.render();this.div.append(v),V.isAttachedToDOM=!0}this.moveEditorInDOM(V),V.onceAdded(),E(this,L).addToAnnotationStorage(V)}moveEditorInDOM(V){var v;(v=E(this,G))==null||v.moveElementInDOM(this.div,V.div,V.contentDiv,!0)}addOrRebuild(V){V.needsToBeRebuilt()?V.rebuild():this.add(V)}addANewEditor(V){const v=()=>{this.addOrRebuild(V)},A=()=>{V.remove()};this.addCommands({cmd:v,undo:A,mustExec:!0})}addUndoableEditor(V){const v=()=>{this.addOrRebuild(V)},A=()=>{V.remove()};this.addCommands({cmd:v,undo:A,mustExec:!1})}getNextId(){return E(this,L).getId()}deserialize(V){switch(V.annotationType){case s.AnnotationEditorType.FREETEXT:return Z.FreeTextEditor.deserialize(V,this,E(this,L));case s.AnnotationEditorType.INK:return i.InkEditor.deserialize(V,this,E(this,L))}return null}setSelected(V){E(this,L).setSelected(V)}toggleSelected(V){E(this,L).toggleSelected(V)}isSelected(V){return E(this,L).isSelected(V)}unselect(V){E(this,L).unselect(V)}pointerup(V){const{isMac:v}=s.FeatureTest.platform;if(!(V.button!==0||V.ctrlKey&&v)&&V.target===this.div&&E(this,S)){if(mt(this,S,!1),!E(this,u)){mt(this,u,!0);return}it(this,M,zc).call(this,V)}}pointerdown(V){const{isMac:v}=s.FeatureTest.platform;if(V.button!==0||V.ctrlKey&&v||V.target!==this.div)return;mt(this,S,!0);const A=E(this,L).getActive();mt(this,u,!A||A.isEmpty())}drop(V){const v=V.dataTransfer.getData("text/plain"),A=E(this,L).getEditor(v);if(!A)return;V.preventDefault(),V.dataTransfer.dropEffect="move",it(this,x,pc).call(this,A);const Nl=this.div.getBoundingClientRect(),fl=V.clientX-Nl.x,Xl=V.clientY-Nl.y;A.translate(fl-A.startX,Xl-A.startY),this.moveEditorInDOM(A),A.div.focus()}dragover(V){V.preventDefault()}destroy(){var V,v;((V=E(this,L).getActive())==null?void 0:V.parent)===this&&E(this,L).setActiveEditor(null);for(const A of E(this,R).values())(v=E(this,G))==null||v.removePointerInTextLayer(A.contentDiv),A.setParent(null),A.isAttachedToDOM=!1,A.div.remove();this.div=null,E(this,R).clear(),E(this,L).removeLayer(this)}render({viewport:V}){this.viewport=V,(0,o.setLayerDimensions)(this.div,V),(0,d.bindEvents)(this,this.div,["dragover","drop"]);for(const v of E(this,L).getEditors(this.pageIndex))this.add(v);this.updateMode()}update({viewport:V}){E(this,L).commitOrRemove(),this.viewport=V,(0,o.setLayerDimensions)(this.div,{rotation:V.rotation}),this.updateMode()}get pageDimensions(){const{pageWidth:V,pageHeight:v}=this.viewport.rawDims;return[V,v]}};let W=D;G=new WeakMap,u=new WeakMap,X=new WeakMap,z=new WeakMap,R=new WeakMap,S=new WeakMap,k=new WeakMap,L=new WeakMap,x=new WeakSet,pc=function(V){var v;V.parent!==this&&(this.attach(V),(v=V.parent)==null||v.detach(V),V.setParent(this),V.div&&V.isAttachedToDOM&&(V.div.remove(),this.div.append(V.div)))},Q=new WeakSet,fc=function(V){switch(E(this,L).getMode()){case s.AnnotationEditorType.FREETEXT:return new Z.FreeTextEditor(V);case s.AnnotationEditorType.INK:return new i.InkEditor(V)}return null},M=new WeakSet,zc=function(V){const v=this.getNextId(),A=it(this,Q,fc).call(this,{parent:this,id:v,x:V.offsetX,y:V.offsetY,uiManager:E(this,L)});return A&&this.add(A),A},Y=new WeakSet,Ic=function(){mt(this,k,!0);for(const V of E(this,R).values())V.isEmpty()&&V.remove();mt(this,k,!1)},jt(W,"_initialized",!1),t.AnnotationEditorLayer=W},(l,t,c)=>{var o,W,G,u,X,z,R,S,k,L,Ac,j,_c,J,qc,y,Rc;Object.defineProperty(t,"__esModule",{value:!0}),t.FreeTextEditor=void 0;var s=c(1),d=c(5),Z=c(4);const m=class extends Z.AnnotationEditor{constructor(V){super({...V,name:"freeTextEditor"});st(this,L);st(this,j);st(this,J);st(this,y);st(this,o,this.editorDivBlur.bind(this));st(this,W,this.editorDivFocus.bind(this));st(this,G,this.editorDivInput.bind(this));st(this,u,this.editorDivKeydown.bind(this));st(this,X,void 0);st(this,z,"");st(this,R,`${this.id}-editor`);st(this,S,!1);st(this,k,void 0);mt(this,X,V.color||m._defaultColor||Z.AnnotationEditor._defaultLineColor),mt(this,k,V.fontSize||m._defaultFontSize)}static initialize(V){this._l10nPromise=new Map(["free_text2_default_content","editor_free_text2_aria_label"].map(A=>[A,V.get(A)]));const v=getComputedStyle(document.documentElement);this._internalPadding=parseFloat(v.getPropertyValue("--freetext-padding"))}static updateDefaultParams(V,v){switch(V){case s.AnnotationEditorParamsType.FREETEXT_SIZE:m._defaultFontSize=v;break;case s.AnnotationEditorParamsType.FREETEXT_COLOR:m._defaultColor=v;break}}updateParams(V,v){switch(V){case s.AnnotationEditorParamsType.FREETEXT_SIZE:it(this,L,Ac).call(this,v);break;case s.AnnotationEditorParamsType.FREETEXT_COLOR:it(this,j,_c).call(this,v);break}}static get defaultPropertiesToUpdate(){return[[s.AnnotationEditorParamsType.FREETEXT_SIZE,m._defaultFontSize],[s.AnnotationEditorParamsType.FREETEXT_COLOR,m._defaultColor||Z.AnnotationEditor._defaultLineColor]]}get propertiesToUpdate(){return[[s.AnnotationEditorParamsType.FREETEXT_SIZE,E(this,k)],[s.AnnotationEditorParamsType.FREETEXT_COLOR,E(this,X)]]}getInitialTranslation(){const V=this.parentScale;return[-m._internalPadding*V,-(m._internalPadding+E(this,k))*V]}rebuild(){super.rebuild(),this.div!==null&&(this.isAttachedToDOM||this.parent.add(this))}enableEditMode(){this.isInEditMode()||(this.parent.setEditingState(!1),this.parent.updateToolbar(s.AnnotationEditorType.FREETEXT),super.enableEditMode(),this.overlayDiv.classList.remove("enabled"),this.editorDiv.contentEditable=!0,this.div.draggable=!1,this.div.removeAttribute("aria-activedescendant"),this.editorDiv.addEventListener("keydown",E(this,u)),this.editorDiv.addEventListener("focus",E(this,W)),this.editorDiv.addEventListener("blur",E(this,o)),this.editorDiv.addEventListener("input",E(this,G)))}disableEditMode(){this.isInEditMode()&&(this.parent.setEditingState(!0),super.disableEditMode(),this.overlayDiv.classList.add("enabled"),this.editorDiv.contentEditable=!1,this.div.setAttribute("aria-activedescendant",E(this,R)),this.div.draggable=!0,this.editorDiv.removeEventListener("keydown",E(this,u)),this.editorDiv.removeEventListener("focus",E(this,W)),this.editorDiv.removeEventListener("blur",E(this,o)),this.editorDiv.removeEventListener("input",E(this,G)),this.div.focus({preventScroll:!0}),this.isEditing=!1,this.parent.div.classList.add("freeTextEditing"))}focusin(V){super.focusin(V),V.target!==this.editorDiv&&this.editorDiv.focus()}onceAdded(){this.width||(this.enableEditMode(),this.editorDiv.focus())}isEmpty(){return!this.editorDiv||this.editorDiv.innerText.trim()===""}remove(){this.isEditing=!1,this.parent.setEditingState(!0),this.parent.div.classList.add("freeTextEditing"),super.remove()}commit(){this.isInEditMode()&&(super.commit(),E(this,S)||(mt(this,S,!0),this.parent.addUndoableEditor(this)),this.disableEditMode(),mt(this,z,it(this,J,qc).call(this).trimEnd()),it(this,y,Rc).call(this))}shouldGetKeyboardEvents(){return this.isInEditMode()}dblclick(V){this.enableEditMode(),this.editorDiv.focus()}keydown(V){V.target===this.div&&V.key==="Enter"&&(this.enableEditMode(),this.editorDiv.focus())}editorDivKeydown(V){m._keyboardManager.exec(this,V)}editorDivFocus(V){this.isEditing=!0}editorDivBlur(V){this.isEditing=!1}editorDivInput(V){this.parent.div.classList.toggle("freeTextEditing",this.isEmpty())}disableEditing(){this.editorDiv.setAttribute("role","comment"),this.editorDiv.removeAttribute("aria-multiline")}enableEditing(){this.editorDiv.setAttribute("role","textbox"),this.editorDiv.setAttribute("aria-multiline",!0)}render(){if(this.div)return this.div;let V,v;this.width&&(V=this.x,v=this.y),super.render(),this.editorDiv=document.createElement("div"),this.editorDiv.className="internal",this.editorDiv.setAttribute("id",E(this,R)),this.enableEditing(),m._l10nPromise.get("editor_free_text2_aria_label").then(Nl=>{var fl;return(fl=this.editorDiv)==null?void 0:fl.setAttribute("aria-label",Nl)}),m._l10nPromise.get("free_text2_default_content").then(Nl=>{var fl;return(fl=this.editorDiv)==null?void 0:fl.setAttribute("default-content",Nl)}),this.editorDiv.contentEditable=!0;const{style:A}=this.editorDiv;if(A.fontSize=`calc(${E(this,k)}px * var(--scale-factor))`,A.color=E(this,X),this.div.append(this.editorDiv),this.overlayDiv=document.createElement("div"),this.overlayDiv.classList.add("overlay","enabled"),this.div.append(this.overlayDiv),(0,d.bindEvents)(this,this.div,["dblclick","keydown"]),this.width){const[Nl,fl]=this.parentDimensions;this.setAt(V*Nl,v*fl,this.width*Nl,this.height*fl);for(const Xl of E(this,z).split(` +`)){const Zt=document.createElement("div");Zt.append(Xl?document.createTextNode(Xl):document.createElement("br")),this.editorDiv.append(Zt)}this.div.draggable=!0,this.editorDiv.contentEditable=!1}else this.div.draggable=!1,this.editorDiv.contentEditable=!0;return this.div}get contentDiv(){return this.editorDiv}static deserialize(V,v,A){const Nl=super.deserialize(V,v,A);return mt(Nl,k,V.fontSize),mt(Nl,X,s.Util.makeHexColor(...V.color)),mt(Nl,z,V.value),Nl}serialize(){if(this.isEmpty())return null;const V=m._internalPadding*this.parentScale,v=this.getRect(V,V),A=Z.AnnotationEditor._colorManager.convert(this.isAttachedToDOM?getComputedStyle(this.editorDiv).color:E(this,X));return{annotationType:s.AnnotationEditorType.FREETEXT,color:A,fontSize:E(this,k),value:E(this,z),pageIndex:this.pageIndex,rect:v,rotation:this.rotation}}};let i=m;o=new WeakMap,W=new WeakMap,G=new WeakMap,u=new WeakMap,X=new WeakMap,z=new WeakMap,R=new WeakMap,S=new WeakMap,k=new WeakMap,L=new WeakSet,Ac=function(V){const v=Nl=>{this.editorDiv.style.fontSize=`calc(${Nl}px * var(--scale-factor))`,this.translate(0,-(Nl-E(this,k))*this.parentScale),mt(this,k,Nl),it(this,y,Rc).call(this)},A=E(this,k);this.addCommands({cmd:()=>{v(V)},undo:()=>{v(A)},mustExec:!0,type:s.AnnotationEditorParamsType.FREETEXT_SIZE,overwriteIfSameType:!0,keepUndo:!0})},j=new WeakSet,_c=function(V){const v=E(this,X);this.addCommands({cmd:()=>{mt(this,X,this.editorDiv.style.color=V)},undo:()=>{mt(this,X,this.editorDiv.style.color=v)},mustExec:!0,type:s.AnnotationEditorParamsType.FREETEXT_COLOR,overwriteIfSameType:!0,keepUndo:!0})},J=new WeakSet,qc=function(){const V=this.editorDiv.getElementsByTagName("div");if(V.length===0)return this.editorDiv.innerText;const v=[];for(const A of V)v.push(A.innerText.replace(/\r\n?|\n/,""));return v.join(` +`)},y=new WeakSet,Rc=function(){const[V,v]=this.parentDimensions;let A;if(this.isAttachedToDOM)A=this.div.getBoundingClientRect();else{const{currentLayer:Nl,div:fl}=this,Xl=fl.style.display;fl.style.display="hidden",Nl.div.append(this.div),A=fl.getBoundingClientRect(),fl.remove(),fl.style.display=Xl}this.width=A.width/V,this.height=A.height/v},jt(i,"_freeTextDefaultContent",""),jt(i,"_l10nPromise"),jt(i,"_internalPadding",0),jt(i,"_defaultColor",null),jt(i,"_defaultFontSize",10),jt(i,"_keyboardManager",new d.KeyboardManager([[["ctrl+Enter","mac+meta+Enter","Escape","mac+Escape"],m.prototype.commitOrRemove]])),jt(i,"_type","freetext"),t.FreeTextEditor=i},(l,t,c)=>{var W,G,u,X,z,R,S,k,L,x,j,Q,J,M,y,Y,m,$c,H,ls,v,ts,Nl,cs,Xl,rc,lt,ss,Wt,Sc,Nt,ds,Ml,Zs,g,is,B,es,Zl,as,T,Pt,b,wc,I,uc,K,Wc,Yl,lc,Vl,xc,$l,hc,dt,bs,ut,ns,yt,ms,Gt,us,It,Dc,rl,Gc,ot,tc,Jt,kc;Object.defineProperty(t,"__esModule",{value:!0}),t.InkEditor=void 0;var s=c(1),d=c(4),Z=c(5);const i=16,Ft=class extends d.AnnotationEditor{constructor(ct){super({...ct,name:"inkEditor"});st(this,m);st(this,H);st(this,v);st(this,Nl);st(this,Xl);st(this,lt);st(this,Wt);st(this,Nt);st(this,Ml);st(this,g);st(this,B);st(this,Zl);st(this,T);st(this,b);st(this,I);st(this,K);st(this,Yl);st(this,Vl);st(this,$l);st(this,ut);st(this,yt);st(this,Gt);st(this,It);st(this,rl);st(this,ot);st(this,Jt);st(this,W,0);st(this,G,0);st(this,u,0);st(this,X,this.canvasContextMenu.bind(this));st(this,z,this.canvasPointermove.bind(this));st(this,R,this.canvasPointerleave.bind(this));st(this,S,this.canvasPointerup.bind(this));st(this,k,this.canvasPointerdown.bind(this));st(this,L,new Path2D);st(this,x,!1);st(this,j,!1);st(this,Q,!1);st(this,J,null);st(this,M,0);st(this,y,0);st(this,Y,null);this.color=ct.color||null,this.thickness=ct.thickness||null,this.opacity=ct.opacity||null,this.paths=[],this.bezierPath2D=[],this.allRawPaths=[],this.currentPath=[],this.scaleFactor=1,this.translationX=this.translationY=0,this.x=0,this.y=0}static initialize(ct){this._l10nPromise=new Map(["editor_ink_canvas_aria_label","editor_ink2_aria_label"].map(nt=>[nt,ct.get(nt)]))}static updateDefaultParams(ct,nt){switch(ct){case s.AnnotationEditorParamsType.INK_THICKNESS:Ft._defaultThickness=nt;break;case s.AnnotationEditorParamsType.INK_COLOR:Ft._defaultColor=nt;break;case s.AnnotationEditorParamsType.INK_OPACITY:Ft._defaultOpacity=nt/100;break}}updateParams(ct,nt){switch(ct){case s.AnnotationEditorParamsType.INK_THICKNESS:it(this,m,$c).call(this,nt);break;case s.AnnotationEditorParamsType.INK_COLOR:it(this,H,ls).call(this,nt);break;case s.AnnotationEditorParamsType.INK_OPACITY:it(this,v,ts).call(this,nt);break}}static get defaultPropertiesToUpdate(){return[[s.AnnotationEditorParamsType.INK_THICKNESS,Ft._defaultThickness],[s.AnnotationEditorParamsType.INK_COLOR,Ft._defaultColor||d.AnnotationEditor._defaultLineColor],[s.AnnotationEditorParamsType.INK_OPACITY,Math.round(Ft._defaultOpacity*100)]]}get propertiesToUpdate(){return[[s.AnnotationEditorParamsType.INK_THICKNESS,this.thickness||Ft._defaultThickness],[s.AnnotationEditorParamsType.INK_COLOR,this.color||Ft._defaultColor||d.AnnotationEditor._defaultLineColor],[s.AnnotationEditorParamsType.INK_OPACITY,Math.round(100*(this.opacity??Ft._defaultOpacity))]]}rebuild(){super.rebuild(),this.div!==null&&(this.canvas||(it(this,I,uc).call(this),it(this,K,Wc).call(this)),this.isAttachedToDOM||(this.parent.add(this),it(this,Yl,lc).call(this)),it(this,ot,tc).call(this))}remove(){this.canvas!==null&&(this.isEmpty()||this.commit(),this.canvas.width=this.canvas.height=0,this.canvas.remove(),this.canvas=null,E(this,J).disconnect(),mt(this,J,null),super.remove())}setParent(ct){!this.parent&&ct?this._uiManager.removeShouldRescale(this):this.parent&&ct===null&&this._uiManager.addShouldRescale(this),super.setParent(ct)}onScaleChanging(){const[ct,nt]=this.parentDimensions,Yt=this.width*ct,Xt=this.height*nt;this.setDimensions(Yt,Xt)}enableEditMode(){E(this,x)||this.canvas===null||(super.enableEditMode(),this.div.draggable=!1,this.canvas.addEventListener("pointerdown",E(this,k)))}disableEditMode(){!this.isInEditMode()||this.canvas===null||(super.disableEditMode(),this.div.draggable=!this.isEmpty(),this.div.classList.remove("editing"),this.canvas.removeEventListener("pointerdown",E(this,k)))}onceAdded(){this.div.draggable=!this.isEmpty()}isEmpty(){return this.paths.length===0||this.paths.length===1&&this.paths[0].length===0}commit(){E(this,x)||(super.commit(),this.isEditing=!1,this.disableEditMode(),this.setInForeground(),mt(this,x,!0),this.div.classList.add("disabled"),it(this,ot,tc).call(this,!0),this.parent.addInkEditorIfNeeded(!0),this.parent.moveEditorInDOM(this),this.div.focus({preventScroll:!0}))}focusin(ct){super.focusin(ct),this.enableEditMode()}canvasPointerdown(ct){ct.button!==0||!this.isInEditMode()||E(this,x)||(this.setInForeground(),ct.preventDefault(),ct.type!=="mouse"&&this.div.focus(),it(this,lt,ss).call(this,ct.offsetX,ct.offsetY))}canvasContextMenu(ct){ct.preventDefault()}canvasPointermove(ct){ct.preventDefault(),it(this,Wt,Sc).call(this,ct.offsetX,ct.offsetY)}canvasPointerup(ct){ct.preventDefault(),it(this,b,wc).call(this,ct)}canvasPointerleave(ct){it(this,b,wc).call(this,ct)}render(){if(this.div)return this.div;let ct,nt;this.width&&(ct=this.x,nt=this.y),super.render(),Ft._l10nPromise.get("editor_ink2_aria_label").then(Rt=>{var pt;return(pt=this.div)==null?void 0:pt.setAttribute("aria-label",Rt)});const[Yt,Xt,Tt,zt]=it(this,Nl,cs).call(this);if(this.setAt(Yt,Xt,0,0),this.setDims(Tt,zt),it(this,I,uc).call(this),this.width){const[Rt,pt]=this.parentDimensions;this.setAt(ct*Rt,nt*pt,this.width*Rt,this.height*pt),mt(this,Q,!0),it(this,Yl,lc).call(this),this.setDims(this.width*Rt,this.height*pt),it(this,T,Pt).call(this),it(this,Jt,kc).call(this),this.div.classList.add("disabled")}else this.div.classList.add("editing"),this.enableEditMode();return it(this,K,Wc).call(this),this.div}setDimensions(ct,nt){const Yt=Math.round(ct),Xt=Math.round(nt);if(E(this,M)===Yt&&E(this,y)===Xt)return;mt(this,M,Yt),mt(this,y,Xt),this.canvas.style.visibility="hidden",E(this,W)&&Math.abs(E(this,W)-ct/nt)>.01&&(nt=Math.ceil(ct/E(this,W)),this.setDims(ct,nt));const[Tt,zt]=this.parentDimensions;this.width=ct/Tt,this.height=nt/zt,E(this,x)&&it(this,Vl,xc).call(this,ct,nt),it(this,Yl,lc).call(this),it(this,T,Pt).call(this),this.canvas.style.visibility="visible",this.fixDims()}static deserialize(ct,nt,Yt){var Dt,kt;const Xt=super.deserialize(ct,nt,Yt);Xt.thickness=ct.thickness,Xt.color=s.Util.makeHexColor(...ct.color),Xt.opacity=ct.opacity;const[Tt,zt]=Xt.pageDimensions,Rt=Xt.width*Tt,pt=Xt.height*zt,xt=Xt.parentScale,rt=ct.thickness/2;mt(Xt,W,Rt/pt),mt(Xt,x,!0),mt(Xt,M,Math.round(Rt)),mt(Xt,y,Math.round(pt));for(const{bezier:Ot}of ct.paths){const Kt=[];Xt.paths.push(Kt);let gt=xt*(Ot[0]-rt),Ct=xt*(pt-Ot[1]-rt);for(let Et=2,dc=Ot.length;Et{this.thickness=ct,it(this,ot,tc).call(this)},undo:()=>{this.thickness=nt,it(this,ot,tc).call(this)},mustExec:!0,type:s.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})},H=new WeakSet,ls=function(ct){const nt=this.color;this.addCommands({cmd:()=>{this.color=ct,it(this,T,Pt).call(this)},undo:()=>{this.color=nt,it(this,T,Pt).call(this)},mustExec:!0,type:s.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})},v=new WeakSet,ts=function(ct){ct/=100;const nt=this.opacity;this.addCommands({cmd:()=>{this.opacity=ct,it(this,T,Pt).call(this)},undo:()=>{this.opacity=nt,it(this,T,Pt).call(this)},mustExec:!0,type:s.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})},Nl=new WeakSet,cs=function(){const{parentRotation:ct,parentDimensions:[nt,Yt]}=this;switch(ct){case 90:return[0,Yt,Yt,nt];case 180:return[nt,Yt,nt,Yt];case 270:return[nt,0,Yt,nt];default:return[0,0,nt,Yt]}},Xl=new WeakSet,rc=function(){const{ctx:ct,color:nt,opacity:Yt,thickness:Xt,parentScale:Tt,scaleFactor:zt}=this;ct.lineWidth=Xt*Tt/zt,ct.lineCap="round",ct.lineJoin="round",ct.miterLimit=10,ct.strokeStyle=`${nt}${(0,Z.opacityToHex)(Yt)}`},lt=new WeakSet,ss=function(ct,nt){this.canvas.addEventListener("contextmenu",E(this,X)),this.canvas.addEventListener("pointerleave",E(this,R)),this.canvas.addEventListener("pointermove",E(this,z)),this.canvas.addEventListener("pointerup",E(this,S)),this.canvas.removeEventListener("pointerdown",E(this,k)),this.isEditing=!0,E(this,Q)||(mt(this,Q,!0),it(this,Yl,lc).call(this),this.thickness||(this.thickness=Ft._defaultThickness),this.color||(this.color=Ft._defaultColor||d.AnnotationEditor._defaultLineColor),this.opacity??(this.opacity=Ft._defaultOpacity)),this.currentPath.push([ct,nt]),mt(this,j,!1),it(this,Xl,rc).call(this),mt(this,Y,()=>{it(this,g,is).call(this),E(this,Y)&&window.requestAnimationFrame(E(this,Y))}),window.requestAnimationFrame(E(this,Y))},Wt=new WeakSet,Sc=function(ct,nt){const[Yt,Xt]=this.currentPath.at(-1);if(this.currentPath.length>1&&ct===Yt&&nt===Xt)return;const Tt=this.currentPath;let zt=E(this,L);if(Tt.push([ct,nt]),mt(this,j,!0),Tt.length<=2){zt.moveTo(...Tt[0]),zt.lineTo(ct,nt);return}Tt.length===3&&(mt(this,L,zt=new Path2D),zt.moveTo(...Tt[0])),it(this,B,es).call(this,zt,...Tt.at(-3),...Tt.at(-2),ct,nt)},Nt=new WeakSet,ds=function(){if(this.currentPath.length===0)return;const ct=this.currentPath.at(-1);E(this,L).lineTo(...ct)},Ml=new WeakSet,Zs=function(ct,nt){mt(this,Y,null),ct=Math.min(Math.max(ct,0),this.canvas.width),nt=Math.min(Math.max(nt,0),this.canvas.height),it(this,Wt,Sc).call(this,ct,nt),it(this,Nt,ds).call(this);let Yt;if(this.currentPath.length!==1)Yt=it(this,Zl,as).call(this);else{const pt=[ct,nt];Yt=[[pt,pt.slice(),pt.slice(),pt]]}const Xt=E(this,L),Tt=this.currentPath;this.currentPath=[],mt(this,L,new Path2D);const zt=()=>{this.allRawPaths.push(Tt),this.paths.push(Yt),this.bezierPath2D.push(Xt),this.rebuild()},Rt=()=>{this.allRawPaths.pop(),this.paths.pop(),this.bezierPath2D.pop(),this.paths.length===0?this.remove():(this.canvas||(it(this,I,uc).call(this),it(this,K,Wc).call(this)),it(this,ot,tc).call(this))};this.addCommands({cmd:zt,undo:Rt,mustExec:!0})},g=new WeakSet,is=function(){if(!E(this,j))return;mt(this,j,!1);const ct=Math.ceil(this.thickness*this.parentScale),nt=this.currentPath.slice(-3),Yt=nt.map(zt=>zt[0]),Xt=nt.map(zt=>zt[1]);Math.min(...Yt)-ct,Math.max(...Yt)+ct,Math.min(...Xt)-ct,Math.max(...Xt)+ct;const{ctx:Tt}=this;Tt.save(),Tt.clearRect(0,0,this.canvas.width,this.canvas.height);for(const zt of this.bezierPath2D)Tt.stroke(zt);Tt.stroke(E(this,L)),Tt.restore()},B=new WeakSet,es=function(ct,nt,Yt,Xt,Tt,zt,Rt){const pt=(nt+Xt)/2,xt=(Yt+Tt)/2,rt=(Xt+zt)/2,St=(Tt+Rt)/2;ct.bezierCurveTo(pt+2*(Xt-pt)/3,xt+2*(Tt-xt)/3,rt+2*(Xt-rt)/3,St+2*(Tt-St)/3,rt,St)},Zl=new WeakSet,as=function(){const ct=this.currentPath;if(ct.length<=2)return[[ct[0],ct[0],ct.at(-1),ct.at(-1)]];const nt=[];let Yt,[Xt,Tt]=ct[0];for(Yt=1;Yt{this.canvas.removeEventListener("contextmenu",E(this,X))},10),it(this,Ml,Zs).call(this,ct.offsetX,ct.offsetY),this.addToAnnotationStorage(),this.setInBackground()},I=new WeakSet,uc=function(){this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",Ft._l10nPromise.get("editor_ink_canvas_aria_label").then(ct=>{var nt;return(nt=this.canvas)==null?void 0:nt.setAttribute("aria-label",ct)}),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")},K=new WeakSet,Wc=function(){mt(this,J,new ResizeObserver(ct=>{const nt=ct[0].contentRect;nt.width&&nt.height&&this.setDimensions(nt.width,nt.height)})),E(this,J).observe(this.div)},Yl=new WeakSet,lc=function(){if(!E(this,Q))return;const[ct,nt]=this.parentDimensions;this.canvas.width=Math.ceil(this.width*ct),this.canvas.height=Math.ceil(this.height*nt),it(this,$l,hc).call(this)},Vl=new WeakSet,xc=function(ct,nt){const Yt=it(this,rl,Gc).call(this),Xt=(ct-Yt)/E(this,u),Tt=(nt-Yt)/E(this,G);this.scaleFactor=Math.min(Xt,Tt)},$l=new WeakSet,hc=function(){const ct=it(this,rl,Gc).call(this)/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+ct,this.translationY*this.scaleFactor+ct)},dt=new WeakSet,bs=function(ct){const nt=new Path2D;for(let Yt=0,Xt=ct.length;Yt=1?(ct.minHeight=`${i}px`,ct.minWidth=`${Math.round(E(this,W)*i)}px`):(ct.minWidth=`${i}px`,ct.minHeight=`${Math.round(i/E(this,W))}px`)},st(o,dt),jt(o,"_defaultColor",null),jt(o,"_defaultOpacity",1),jt(o,"_defaultThickness",1),jt(o,"_l10nPromise"),jt(o,"_type","ink"),t.InkEditor=o},(l,t,c)=>{var Vt,At,U,Ws,B,jc,Zl,Jc;Object.defineProperty(t,"__esModule",{value:!0}),t.AnnotationLayer=void 0;var s=c(1),d=c(6),Z=c(3),i=c(31),o=c(32);const W=1e3,G=9,u=new WeakSet;function X(w){return{width:w[2]-w[0],height:w[3]-w[1]}}class z{static create(b){switch(b.data.annotationType){case s.AnnotationType.LINK:return new S(b);case s.AnnotationType.TEXT:return new k(b);case s.AnnotationType.WIDGET:switch(b.data.fieldType){case"Tx":return new x(b);case"Btn":return b.data.radioButton?new Q(b):b.data.checkBox?new j(b):new J(b);case"Ch":return new M(b)}return new L(b);case s.AnnotationType.POPUP:return new y(b);case s.AnnotationType.FREETEXT:return new m(b);case s.AnnotationType.LINE:return new D(b);case s.AnnotationType.SQUARE:return new H(b);case s.AnnotationType.CIRCLE:return new V(b);case s.AnnotationType.POLYLINE:return new v(b);case s.AnnotationType.CARET:return new Nl(b);case s.AnnotationType.INK:return new fl(b);case s.AnnotationType.POLYGON:return new A(b);case s.AnnotationType.HIGHLIGHT:return new Xl(b);case s.AnnotationType.UNDERLINE:return new Zt(b);case s.AnnotationType.SQUIGGLY:return new lt(b);case s.AnnotationType.STRIKEOUT:return new at(b);case s.AnnotationType.STAMP:return new Wt(b);case s.AnnotationType.FILEATTACHMENT:return new Mt(b);default:return new R(b)}}}class R{constructor(b,{isRenderable:N=!1,ignoreBorder:I=!1,createQuadrilaterals:C=!1}={}){this.isRenderable=N,this.data=b.data,this.layer=b.layer,this.page=b.page,this.viewport=b.viewport,this.linkService=b.linkService,this.downloadManager=b.downloadManager,this.imageResourcesPath=b.imageResourcesPath,this.renderForms=b.renderForms,this.svgFactory=b.svgFactory,this.annotationStorage=b.annotationStorage,this.enableScripting=b.enableScripting,this.hasJSActions=b.hasJSActions,this._fieldObjects=b.fieldObjects,N&&(this.container=this._createContainer(I)),C&&(this.quadrilaterals=this._createQuadrilaterals(I))}_createContainer(b=!1){const{data:N,page:I,viewport:C}=this,K=document.createElement("section");K.setAttribute("data-annotation-id",N.id),N.noRotate&&K.classList.add("norotate");const{pageWidth:f,pageHeight:Yl,pageX:Wl,pageY:Vl}=C.rawDims,{width:Tl,height:$l}=X(N.rect),tt=s.Util.normalizeRect([N.rect[0],I.view[3]-N.rect[1]+I.view[1],N.rect[2],I.view[3]-N.rect[3]+I.view[1]]);if(!b&&N.borderStyle.width>0){K.style.borderWidth=`${N.borderStyle.width}px`;const bt=N.borderStyle.horizontalCornerRadius,ut=N.borderStyle.verticalCornerRadius;if(bt>0||ut>0){const yt=`calc(${bt}px * var(--scale-factor)) / calc(${ut}px * var(--scale-factor))`;K.style.borderRadius=yt}else if(this instanceof Q){const yt=`calc(${Tl}px * var(--scale-factor)) / calc(${$l}px * var(--scale-factor))`;K.style.borderRadius=yt}switch(N.borderStyle.style){case s.AnnotationBorderStyleType.SOLID:K.style.borderStyle="solid";break;case s.AnnotationBorderStyleType.DASHED:K.style.borderStyle="dashed";break;case s.AnnotationBorderStyleType.BEVELED:(0,s.warn)("Unimplemented border style: beveled");break;case s.AnnotationBorderStyleType.INSET:(0,s.warn)("Unimplemented border style: inset");break;case s.AnnotationBorderStyleType.UNDERLINE:K.style.borderBottomStyle="solid";break}const ht=N.borderColor||null;ht?K.style.borderColor=s.Util.makeHexColor(ht[0]|0,ht[1]|0,ht[2]|0):K.style.borderWidth=0}K.style.left=`${100*(tt[0]-Wl)/f}%`,K.style.top=`${100*(tt[1]-Vl)/Yl}%`;const{rotation:dt}=N;return N.hasOwnCanvas||dt===0?(K.style.width=`${100*Tl/f}%`,K.style.height=`${100*$l/Yl}%`):this.setRotation(dt,K),K}setRotation(b,N=this.container){const{pageWidth:I,pageHeight:C}=this.viewport.rawDims,{width:K,height:f}=X(this.data.rect);let Yl,Wl;b%180===0?(Yl=100*K/I,Wl=100*f/C):(Yl=100*f/I,Wl=100*K/C),N.style.width=`${Yl}%`,N.style.height=`${Wl}%`,N.setAttribute("data-main-rotation",(360-b)%360)}get _commonActions(){const b=(N,I,C)=>{const K=C.detail[N];C.target.style[I]=i.ColorConverters[`${K[0]}_HTML`](K.slice(1))};return(0,s.shadow)(this,"_commonActions",{display:N=>{const I=N.detail.display%2===1;this.container.style.visibility=I?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{hidden:I,print:N.detail.display===0||N.detail.display===3})},print:N=>{this.annotationStorage.setValue(this.data.id,{print:N.detail.print})},hidden:N=>{this.container.style.visibility=N.detail.hidden?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{hidden:N.detail.hidden})},focus:N=>{setTimeout(()=>N.target.focus({preventScroll:!1}),0)},userName:N=>{N.target.title=N.detail.userName},readonly:N=>{N.detail.readonly?N.target.setAttribute("readonly",""):N.target.removeAttribute("readonly")},required:N=>{this._setRequired(N.target,N.detail.required)},bgColor:N=>{b("bgColor","backgroundColor",N)},fillColor:N=>{b("fillColor","backgroundColor",N)},fgColor:N=>{b("fgColor","color",N)},textColor:N=>{b("textColor","color",N)},borderColor:N=>{b("borderColor","borderColor",N)},strokeColor:N=>{b("strokeColor","borderColor",N)},rotation:N=>{const I=N.detail.rotation;this.setRotation(I),this.annotationStorage.setValue(this.data.id,{rotation:I})}})}_dispatchEventFromSandbox(b,N){const I=this._commonActions;for(const C of Object.keys(N.detail)){const K=b[C]||I[C];K==null||K(N)}}_setDefaultPropertiesFromJS(b){if(!this.enableScripting)return;const N=this.annotationStorage.getRawValue(this.data.id);if(!N)return;const I=this._commonActions;for(const[C,K]of Object.entries(N)){const f=I[C];if(f){const Yl={detail:{[C]:K},target:b};f(Yl),delete N[C]}}}_createQuadrilaterals(b=!1){if(!this.data.quadPoints)return null;const N=[],I=this.data.rect;for(const C of this.data.quadPoints)this.data.rect=[C[2].x,C[2].y,C[1].x,C[1].y],N.push(this._createContainer(b));return this.data.rect=I,N}_createPopup(b,N){let I=this.container;this.quadrilaterals&&(b||(b=this.quadrilaterals),I=this.quadrilaterals[0]),b||(b=document.createElement("div"),b.classList.add("popupTriggerArea"),I.append(b));const K=new Y({container:I,trigger:b,color:N.color,titleObj:N.titleObj,modificationDate:N.modificationDate,contentsObj:N.contentsObj,richText:N.richText,hideWrapper:!0}).render();K.style.left="100%",I.append(K)}_renderQuadrilaterals(b){for(const N of this.quadrilaterals)N.classList.add(b);return this.quadrilaterals}render(){(0,s.unreachable)("Abstract method `AnnotationElement.render` called")}_getElementsByName(b,N=null){const I=[];if(this._fieldObjects){const C=this._fieldObjects[b];if(C)for(const{page:K,id:f,exportValues:Yl}of C){if(K===-1||f===N)continue;const Wl=typeof Yl=="string"?Yl:null,Vl=document.querySelector(`[data-element-id="${f}"]`);if(Vl&&!u.has(Vl)){(0,s.warn)(`_getElementsByName - element not allowed: ${f}`);continue}I.push({id:f,exportValue:Wl,domElement:Vl})}return I}for(const C of document.getElementsByName(b)){const{exportValue:K}=C,f=C.getAttribute("data-element-id");f!==N&&u.has(C)&&I.push({id:f,exportValue:K,domElement:C})}return I}}class S extends R{constructor(N,I=null){super(N,{isRenderable:!0,ignoreBorder:!!(I!=null&&I.ignoreBorder),createQuadrilaterals:!0});st(this,Vt);st(this,U);this.isTooltipOnly=N.data.isTooltipOnly}render(){const{data:N,linkService:I}=this,C=document.createElement("a");C.setAttribute("data-element-id",N.id);let K=!1;return N.url?(I.addLinkAttributes(C,N.url,N.newWindow),K=!0):N.action?(this._bindNamedAction(C,N.action),K=!0):N.attachment?(this._bindAttachment(C,N.attachment),K=!0):N.setOCGState?(it(this,U,Ws).call(this,C,N.setOCGState),K=!0):N.dest?(this._bindLink(C,N.dest),K=!0):(N.actions&&(N.actions.Action||N.actions["Mouse Up"]||N.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(C,N),K=!0),N.resetForm?(this._bindResetFormAction(C,N.resetForm),K=!0):this.isTooltipOnly&&!K&&(this._bindLink(C,""),K=!0)),this.quadrilaterals?this._renderQuadrilaterals("linkAnnotation").map((f,Yl)=>{const Wl=Yl===0?C:C.cloneNode();return f.append(Wl),f}):(this.container.classList.add("linkAnnotation"),K&&this.container.append(C),this.container)}_bindLink(N,I){N.href=this.linkService.getDestinationHash(I),N.onclick=()=>(I&&this.linkService.goToDestination(I),!1),(I||I==="")&&it(this,Vt,At).call(this)}_bindNamedAction(N,I){N.href=this.linkService.getAnchorUrl(""),N.onclick=()=>(this.linkService.executeNamedAction(I),!1),it(this,Vt,At).call(this)}_bindAttachment(N,I){N.href=this.linkService.getAnchorUrl(""),N.onclick=()=>{var C;return(C=this.downloadManager)==null||C.openOrDownloadData(this.container,I.content,I.filename),!1},it(this,Vt,At).call(this)}_bindJSAction(N,I){N.href=this.linkService.getAnchorUrl("");const C=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]);for(const K of Object.keys(I.actions)){const f=C.get(K);f&&(N[f]=()=>{var Yl;return(Yl=this.linkService.eventBus)==null||Yl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:I.id,name:K}}),!1})}N.onclick||(N.onclick=()=>!1),it(this,Vt,At).call(this)}_bindResetFormAction(N,I){const C=N.onclick;if(C||(N.href=this.linkService.getAnchorUrl("")),it(this,Vt,At).call(this),!this._fieldObjects){(0,s.warn)('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'),C||(N.onclick=()=>!1);return}N.onclick=()=>{var $l;C==null||C();const{fields:K,refs:f,include:Yl}=I,Wl=[];if(K.length!==0||f.length!==0){const tt=new Set(f);for(const dt of K){const bt=this._fieldObjects[dt]||[];for(const{id:ut}of bt)tt.add(ut)}for(const dt of Object.values(this._fieldObjects))for(const bt of dt)tt.has(bt.id)===Yl&&Wl.push(bt)}else for(const tt of Object.values(this._fieldObjects))Wl.push(...tt);const Vl=this.annotationStorage,Tl=[];for(const tt of Wl){const{id:dt}=tt;switch(Tl.push(dt),tt.type){case"text":{const ut=tt.defaultValue||"";Vl.setValue(dt,{value:ut});break}case"checkbox":case"radiobutton":{const ut=tt.defaultValue===tt.exportValues;Vl.setValue(dt,{value:ut});break}case"combobox":case"listbox":{const ut=tt.defaultValue||"";Vl.setValue(dt,{value:ut});break}default:continue}const bt=document.querySelector(`[data-element-id="${dt}"]`);if(bt){if(!u.has(bt)){(0,s.warn)(`_bindResetFormAction - element not allowed: ${dt}`);continue}}else continue;bt.dispatchEvent(new Event("resetform"))}return this.enableScripting&&(($l=this.linkService.eventBus)==null||$l.dispatch("dispatcheventinsandbox",{source:this,detail:{id:"app",ids:Tl,name:"ResetForm"}})),!1}}}Vt=new WeakSet,At=function(){this.container.setAttribute("data-internal-link","")},U=new WeakSet,Ws=function(N,I){N.href=this.linkService.getAnchorUrl(""),N.onclick=()=>(this.linkService.executeSetOCGState(I),!1),it(this,Vt,At).call(this)};class k extends R{constructor(b){var I,C,K;const N=!!(b.data.hasPopup||(I=b.data.titleObj)!=null&&I.str||(C=b.data.contentsObj)!=null&&C.str||(K=b.data.richText)!=null&&K.str);super(b,{isRenderable:N})}render(){this.container.classList.add("textAnnotation");const b=document.createElement("img");return b.src=this.imageResourcesPath+"annotation-"+this.data.name.toLowerCase()+".svg",b.alt="[{{type}} Annotation]",b.dataset.l10nId="text_annotation_type",b.dataset.l10nArgs=JSON.stringify({type:this.data.name}),this.data.hasPopup||this._createPopup(b,this.data),this.container.append(b),this.container}}class L extends R{render(){return this.data.alternativeText&&(this.container.title=this.data.alternativeText),this.container}showElementAndHideCanvas(b){var N;this.data.hasOwnCanvas&&(((N=b.previousSibling)==null?void 0:N.nodeName)==="CANVAS"&&(b.previousSibling.hidden=!0),b.hidden=!1)}_getKeyModifier(b){const{isWin:N,isMac:I}=s.FeatureTest.platform;return N&&b.ctrlKey||I&&b.metaKey}_setEventListener(b,N,I,C){N.includes("mouse")?b.addEventListener(N,K=>{var f;(f=this.linkService.eventBus)==null||f.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:I,value:C(K),shift:K.shiftKey,modifier:this._getKeyModifier(K)}})}):b.addEventListener(N,K=>{var f;(f=this.linkService.eventBus)==null||f.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:I,value:C(K)}})})}_setEventListeners(b,N,I){var C;for(const[K,f]of N)(f==="Action"||(C=this.data.actions)!=null&&C[f])&&this._setEventListener(b,K,f,I)}_setBackgroundColor(b){const N=this.data.backgroundColor||null;b.style.backgroundColor=N===null?"transparent":s.Util.makeHexColor(N[0],N[1],N[2])}_setTextStyle(b){const N=["left","center","right"],{fontColor:I}=this.data.defaultAppearanceData,C=this.data.defaultAppearanceData.fontSize||G,K=b.style;let f;const Yl=2,Wl=Vl=>Math.round(10*Vl)/10;if(this.data.multiLine){const Vl=Math.abs(this.data.rect[3]-this.data.rect[1]-Yl),Tl=Math.round(Vl/(s.LINE_FACTOR*C))||1,$l=Vl/Tl;f=Math.min(C,Wl($l/s.LINE_FACTOR))}else{const Vl=Math.abs(this.data.rect[3]-this.data.rect[1]-Yl);f=Math.min(C,Wl(Vl/s.LINE_FACTOR))}K.fontSize=`calc(${f}px * var(--scale-factor))`,K.color=s.Util.makeHexColor(I[0],I[1],I[2]),this.data.textAlignment!==null&&(K.textAlign=N[this.data.textAlignment])}_setRequired(b,N){N?b.setAttribute("required",!0):b.removeAttribute("required"),b.setAttribute("aria-required",N)}}class x extends L{constructor(b){const N=b.renderForms||!b.data.hasAppearance&&!!b.data.fieldValue;super(b,{isRenderable:N})}setPropertyOnSiblings(b,N,I,C){const K=this.annotationStorage;for(const f of this._getElementsByName(b.name,b.id))f.domElement&&(f.domElement[N]=I),K.setValue(f.id,{[C]:I})}render(){var C,K;const b=this.annotationStorage,N=this.data.id;this.container.classList.add("textWidgetAnnotation");let I=null;if(this.renderForms){const f=b.getValue(N,{value:this.data.fieldValue});let Yl=f.value||"";const Wl=b.getValue(N,{charLimit:this.data.maxLen}).charLimit;Wl&&Yl.length>Wl&&(Yl=Yl.slice(0,Wl));let Vl=f.formattedValue||((C=this.data.textContent)==null?void 0:C.join(` +`))||null;Vl&&this.data.comb&&(Vl=Vl.replaceAll(/\s+/g,""));const Tl={userValue:Yl,formattedValue:Vl,lastCommittedValue:null,commitKey:1};this.data.multiLine?(I=document.createElement("textarea"),I.textContent=Vl??Yl,this.data.doNotScroll&&(I.style.overflowY="hidden")):(I=document.createElement("input"),I.type="text",I.setAttribute("value",Vl??Yl),this.data.doNotScroll&&(I.style.overflowX="hidden")),this.data.hasOwnCanvas&&(I.hidden=!0),u.add(I),I.setAttribute("data-element-id",N),I.disabled=this.data.readOnly,I.name=this.data.fieldName,I.tabIndex=W,this._setRequired(I,this.data.required),Wl&&(I.maxLength=Wl),I.addEventListener("input",tt=>{b.setValue(N,{value:tt.target.value}),this.setPropertyOnSiblings(I,"value",tt.target.value,"value"),Tl.formattedValue=null}),I.addEventListener("resetform",tt=>{const dt=this.data.defaultFieldValue??"";I.value=Tl.userValue=dt,Tl.formattedValue=null});let $l=tt=>{const{formattedValue:dt}=Tl;dt!=null&&(tt.target.value=dt),tt.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){I.addEventListener("focus",dt=>{const{target:bt}=dt;Tl.userValue&&(bt.value=Tl.userValue),Tl.lastCommittedValue=bt.value,Tl.commitKey=1}),I.addEventListener("updatefromsandbox",dt=>{this.showElementAndHideCanvas(dt.target);const bt={value(ut){Tl.userValue=ut.detail.value??"",b.setValue(N,{value:Tl.userValue.toString()}),ut.target.value=Tl.userValue},formattedValue(ut){const{formattedValue:ht}=ut.detail;Tl.formattedValue=ht,ht!=null&&ut.target!==document.activeElement&&(ut.target.value=ht),b.setValue(N,{formattedValue:ht})},selRange(ut){ut.target.setSelectionRange(...ut.detail.selRange)},charLimit:ut=>{var Gt;const{charLimit:ht}=ut.detail,{target:yt}=ut;if(ht===0){yt.removeAttribute("maxLength");return}yt.setAttribute("maxLength",ht);let Ll=Tl.userValue;!Ll||Ll.length<=ht||(Ll=Ll.slice(0,ht),yt.value=Tl.userValue=Ll,b.setValue(N,{value:Ll}),(Gt=this.linkService.eventBus)==null||Gt.dispatch("dispatcheventinsandbox",{source:this,detail:{id:N,name:"Keystroke",value:Ll,willCommit:!0,commitKey:1,selStart:yt.selectionStart,selEnd:yt.selectionEnd}}))}};this._dispatchEventFromSandbox(bt,dt)}),I.addEventListener("keydown",dt=>{var ht;Tl.commitKey=1;let bt=-1;if(dt.key==="Escape"?bt=0:dt.key==="Enter"&&!this.data.multiLine?bt=2:dt.key==="Tab"&&(Tl.commitKey=3),bt===-1)return;const{value:ut}=dt.target;Tl.lastCommittedValue!==ut&&(Tl.lastCommittedValue=ut,Tl.userValue=ut,(ht=this.linkService.eventBus)==null||ht.dispatch("dispatcheventinsandbox",{source:this,detail:{id:N,name:"Keystroke",value:ut,willCommit:!0,commitKey:bt,selStart:dt.target.selectionStart,selEnd:dt.target.selectionEnd}}))});const tt=$l;$l=null,I.addEventListener("blur",dt=>{var ut;if(!dt.relatedTarget)return;const{value:bt}=dt.target;Tl.userValue=bt,Tl.lastCommittedValue!==bt&&((ut=this.linkService.eventBus)==null||ut.dispatch("dispatcheventinsandbox",{source:this,detail:{id:N,name:"Keystroke",value:bt,willCommit:!0,commitKey:Tl.commitKey,selStart:dt.target.selectionStart,selEnd:dt.target.selectionEnd}})),tt(dt)}),(K=this.data.actions)!=null&&K.Keystroke&&I.addEventListener("beforeinput",dt=>{var It;Tl.lastCommittedValue=null;const{data:bt,target:ut}=dt,{value:ht,selectionStart:yt,selectionEnd:Ll}=ut;let Gt=yt,Lt=Ll;switch(dt.inputType){case"deleteWordBackward":{const et=ht.substring(0,yt).match(/\w*[^\w]*$/);et&&(Gt-=et[0].length);break}case"deleteWordForward":{const et=ht.substring(yt).match(/^[^\w]*\w*/);et&&(Lt+=et[0].length);break}case"deleteContentBackward":yt===Ll&&(Gt-=1);break;case"deleteContentForward":yt===Ll&&(Lt+=1);break}dt.preventDefault(),(It=this.linkService.eventBus)==null||It.dispatch("dispatcheventinsandbox",{source:this,detail:{id:N,name:"Keystroke",value:ht,change:bt||"",willCommit:!1,selStart:Gt,selEnd:Lt}})}),this._setEventListeners(I,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],dt=>dt.target.value)}if($l&&I.addEventListener("blur",$l),this.data.comb){const dt=(this.data.rect[2]-this.data.rect[0])/Wl;I.classList.add("comb"),I.style.letterSpacing=`calc(${dt}px * var(--scale-factor) - 1ch)`}}else I=document.createElement("div"),I.textContent=this.data.fieldValue,I.style.verticalAlign="middle",I.style.display="table-cell";return this._setTextStyle(I),this._setBackgroundColor(I),this._setDefaultPropertiesFromJS(I),this.container.append(I),this.container}}class j extends L{constructor(b){super(b,{isRenderable:b.renderForms})}render(){const b=this.annotationStorage,N=this.data,I=N.id;let C=b.getValue(I,{value:N.exportValue===N.fieldValue}).value;typeof C=="string"&&(C=C!=="Off",b.setValue(I,{value:C})),this.container.classList.add("buttonWidgetAnnotation","checkBox");const K=document.createElement("input");return u.add(K),K.setAttribute("data-element-id",I),K.disabled=N.readOnly,this._setRequired(K,this.data.required),K.type="checkbox",K.name=N.fieldName,C&&K.setAttribute("checked",!0),K.setAttribute("exportValue",N.exportValue),K.tabIndex=W,K.addEventListener("change",f=>{const{name:Yl,checked:Wl}=f.target;for(const Vl of this._getElementsByName(Yl,I)){const Tl=Wl&&Vl.exportValue===N.exportValue;Vl.domElement&&(Vl.domElement.checked=Tl),b.setValue(Vl.id,{value:Tl})}b.setValue(I,{value:Wl})}),K.addEventListener("resetform",f=>{const Yl=N.defaultFieldValue||"Off";f.target.checked=Yl===N.exportValue}),this.enableScripting&&this.hasJSActions&&(K.addEventListener("updatefromsandbox",f=>{const Yl={value(Wl){Wl.target.checked=Wl.detail.value!=="Off",b.setValue(I,{value:Wl.target.checked})}};this._dispatchEventFromSandbox(Yl,f)}),this._setEventListeners(K,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],f=>f.target.checked)),this._setBackgroundColor(K),this._setDefaultPropertiesFromJS(K),this.container.append(K),this.container}}class Q extends L{constructor(b){super(b,{isRenderable:b.renderForms})}render(){this.container.classList.add("buttonWidgetAnnotation","radioButton");const b=this.annotationStorage,N=this.data,I=N.id;let C=b.getValue(I,{value:N.fieldValue===N.buttonValue}).value;typeof C=="string"&&(C=C!==N.buttonValue,b.setValue(I,{value:C}));const K=document.createElement("input");if(u.add(K),K.setAttribute("data-element-id",I),K.disabled=N.readOnly,this._setRequired(K,this.data.required),K.type="radio",K.name=N.fieldName,C&&K.setAttribute("checked",!0),K.tabIndex=W,K.addEventListener("change",f=>{const{name:Yl,checked:Wl}=f.target;for(const Vl of this._getElementsByName(Yl,I))b.setValue(Vl.id,{value:!1});b.setValue(I,{value:Wl})}),K.addEventListener("resetform",f=>{const Yl=N.defaultFieldValue;f.target.checked=Yl!=null&&Yl===N.buttonValue}),this.enableScripting&&this.hasJSActions){const f=N.buttonValue;K.addEventListener("updatefromsandbox",Yl=>{const Wl={value:Vl=>{const Tl=f===Vl.detail.value;for(const $l of this._getElementsByName(Vl.target.name)){const tt=Tl&&$l.id===I;$l.domElement&&($l.domElement.checked=tt),b.setValue($l.id,{value:tt})}}};this._dispatchEventFromSandbox(Wl,Yl)}),this._setEventListeners(K,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],Yl=>Yl.target.checked)}return this._setBackgroundColor(K),this._setDefaultPropertiesFromJS(K),this.container.append(K),this.container}}class J extends S{constructor(b){super(b,{ignoreBorder:b.data.hasAppearance})}render(){const b=super.render();b.classList.add("buttonWidgetAnnotation","pushButton"),this.data.alternativeText&&(b.title=this.data.alternativeText);const N=b.lastChild;return this.enableScripting&&this.hasJSActions&&N&&(this._setDefaultPropertiesFromJS(N),N.addEventListener("updatefromsandbox",I=>{this._dispatchEventFromSandbox({},I)})),b}}class M extends L{constructor(b){super(b,{isRenderable:b.renderForms})}render(){this.container.classList.add("choiceWidgetAnnotation");const b=this.annotationStorage,N=this.data.id,I=b.getValue(N,{value:this.data.fieldValue}),C=document.createElement("select");u.add(C),C.setAttribute("data-element-id",N),C.disabled=this.data.readOnly,this._setRequired(C,this.data.required),C.name=this.data.fieldName,C.tabIndex=W;let K=this.data.combo&&this.data.options.length>0;this.data.combo||(C.size=this.data.options.length,this.data.multiSelect&&(C.multiple=!0)),C.addEventListener("resetform",Tl=>{const $l=this.data.defaultFieldValue;for(const tt of C.options)tt.selected=tt.value===$l});for(const Tl of this.data.options){const $l=document.createElement("option");$l.textContent=Tl.displayValue,$l.value=Tl.exportValue,I.value.includes(Tl.exportValue)&&($l.setAttribute("selected",!0),K=!1),C.append($l)}let f=null;if(K){const Tl=document.createElement("option");Tl.value=" ",Tl.setAttribute("hidden",!0),Tl.setAttribute("selected",!0),C.prepend(Tl),f=()=>{Tl.remove(),C.removeEventListener("input",f),f=null},C.addEventListener("input",f)}const Yl=Tl=>{const $l=Tl?"value":"textContent",{options:tt,multiple:dt}=C;return dt?Array.prototype.filter.call(tt,bt=>bt.selected).map(bt=>bt[$l]):tt.selectedIndex===-1?null:tt[tt.selectedIndex][$l]};let Wl=Yl(!1);const Vl=Tl=>{const $l=Tl.target.options;return Array.prototype.map.call($l,tt=>({displayValue:tt.textContent,exportValue:tt.value}))};return this.enableScripting&&this.hasJSActions?(C.addEventListener("updatefromsandbox",Tl=>{const $l={value(tt){f==null||f();const dt=tt.detail.value,bt=new Set(Array.isArray(dt)?dt:[dt]);for(const ut of C.options)ut.selected=bt.has(ut.value);b.setValue(N,{value:Yl(!0)}),Wl=Yl(!1)},multipleSelection(tt){C.multiple=!0},remove(tt){const dt=C.options,bt=tt.detail.remove;dt[bt].selected=!1,C.remove(bt),dt.length>0&&Array.prototype.findIndex.call(dt,ht=>ht.selected)===-1&&(dt[0].selected=!0),b.setValue(N,{value:Yl(!0),items:Vl(tt)}),Wl=Yl(!1)},clear(tt){for(;C.length!==0;)C.remove(0);b.setValue(N,{value:null,items:[]}),Wl=Yl(!1)},insert(tt){const{index:dt,displayValue:bt,exportValue:ut}=tt.detail.insert,ht=C.children[dt],yt=document.createElement("option");yt.textContent=bt,yt.value=ut,ht?ht.before(yt):C.append(yt),b.setValue(N,{value:Yl(!0),items:Vl(tt)}),Wl=Yl(!1)},items(tt){const{items:dt}=tt.detail;for(;C.length!==0;)C.remove(0);for(const bt of dt){const{displayValue:ut,exportValue:ht}=bt,yt=document.createElement("option");yt.textContent=ut,yt.value=ht,C.append(yt)}C.options.length>0&&(C.options[0].selected=!0),b.setValue(N,{value:Yl(!0),items:Vl(tt)}),Wl=Yl(!1)},indices(tt){const dt=new Set(tt.detail.indices);for(const bt of tt.target.options)bt.selected=dt.has(bt.index);b.setValue(N,{value:Yl(!0)}),Wl=Yl(!1)},editable(tt){tt.target.disabled=!tt.detail.editable}};this._dispatchEventFromSandbox($l,Tl)}),C.addEventListener("input",Tl=>{var tt;const $l=Yl(!0);b.setValue(N,{value:$l}),Tl.preventDefault(),(tt=this.linkService.eventBus)==null||tt.dispatch("dispatcheventinsandbox",{source:this,detail:{id:N,name:"Keystroke",value:Wl,changeEx:$l,willCommit:!1,commitKey:1,keyDown:!1}})}),this._setEventListeners(C,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"],["input","Validate"]],Tl=>Tl.target.value)):C.addEventListener("input",function(Tl){b.setValue(N,{value:Yl(!0)})}),this.data.combo&&this._setTextStyle(C),this._setBackgroundColor(C),this._setDefaultPropertiesFromJS(C),this.container.append(C),this.container}}const O=class extends R{constructor(b){var C,K,f;const{data:N}=b,I=!O.IGNORE_TYPES.has(N.parentType)&&!!((C=N.titleObj)!=null&&C.str||(K=N.contentsObj)!=null&&K.str||(f=N.richText)!=null&&f.str);super(b,{isRenderable:I})}render(){this.container.classList.add("popupAnnotation");const b=this.layer.querySelectorAll(`[data-annotation-id="${this.data.parentId}"]`);if(b.length===0)return this.container;const N=new Y({container:this.container,trigger:Array.from(b),color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText}),I=this.page,C=s.Util.normalizeRect([this.data.parentRect[0],I.view[3]-this.data.parentRect[1]+I.view[1],this.data.parentRect[2],I.view[3]-this.data.parentRect[3]+I.view[1]]),K=C[0]+this.data.parentRect[2]-this.data.parentRect[0],f=C[1],{pageWidth:Yl,pageHeight:Wl,pageX:Vl,pageY:Tl}=this.viewport.rawDims;return this.container.style.left=`${100*(K-Vl)/Yl}%`,this.container.style.top=`${100*(f-Tl)/Wl}%`,this.container.append(N.render()),this.container}};let y=O;jt(y,"IGNORE_TYPES",new Set(["Line","Square","Circle","PolyLine","Polygon","Ink"]));class Y{constructor(b){this.container=b.container,this.trigger=b.trigger,this.color=b.color,this.titleObj=b.titleObj,this.modificationDate=b.modificationDate,this.contentsObj=b.contentsObj,this.richText=b.richText,this.hideWrapper=b.hideWrapper||!1,this.pinned=!1}render(){var Yl,Wl;const N=document.createElement("div");N.classList.add("popupWrapper"),this.hideElement=this.hideWrapper?N:this.container,this.hideElement.hidden=!0;const I=document.createElement("div");I.classList.add("popup");const C=this.color;if(C){const Vl=.7*(255-C[0])+C[0],Tl=.7*(255-C[1])+C[1],$l=.7*(255-C[2])+C[2];I.style.backgroundColor=s.Util.makeHexColor(Vl|0,Tl|0,$l|0)}const K=document.createElement("h1");K.dir=this.titleObj.dir,K.textContent=this.titleObj.str,I.append(K);const f=d.PDFDateString.toDateObject(this.modificationDate);if(f){const Vl=document.createElement("span");Vl.classList.add("popupDate"),Vl.textContent="{{date}}, {{time}}",Vl.dataset.l10nId="annotation_date_string",Vl.dataset.l10nArgs=JSON.stringify({date:f.toLocaleDateString(),time:f.toLocaleTimeString()}),I.append(Vl)}if((Yl=this.richText)!=null&&Yl.str&&(!((Wl=this.contentsObj)!=null&&Wl.str)||this.contentsObj.str===this.richText.str))o.XfaLayer.render({xfaHtml:this.richText.html,intent:"richText",div:I}),I.lastChild.classList.add("richText","popupContent");else{const Vl=this._formatContents(this.contentsObj);I.append(Vl)}Array.isArray(this.trigger)||(this.trigger=[this.trigger]);for(const Vl of this.trigger)Vl.addEventListener("click",this._toggle.bind(this)),Vl.addEventListener("mouseover",this._show.bind(this,!1)),Vl.addEventListener("mouseout",this._hide.bind(this,!1));return I.addEventListener("click",this._hide.bind(this,!0)),N.append(I),N}_formatContents({str:b,dir:N}){const I=document.createElement("p");I.classList.add("popupContent"),I.dir=N;const C=b.split(/(?:\r\n?|\n)/);for(let K=0,f=C.length;K{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorConverters=void 0;function c(d){return Math.floor(Math.max(0,Math.min(1,d))*255).toString(16).padStart(2,"0")}class s{static CMYK_G([Z,i,o,W]){return["G",1-Math.min(1,.3*Z+.59*o+.11*i+W)]}static G_CMYK([Z]){return["CMYK",0,0,0,1-Z]}static G_RGB([Z]){return["RGB",Z,Z,Z]}static G_HTML([Z]){const i=c(Z);return`#${i}${i}${i}`}static RGB_G([Z,i,o]){return["G",.3*Z+.59*i+.11*o]}static RGB_HTML([Z,i,o]){const W=c(Z),G=c(i),u=c(o);return`#${W}${G}${u}`}static T_HTML(){return"#00000000"}static CMYK_RGB([Z,i,o,W]){return["RGB",1-Math.min(1,Z+W),1-Math.min(1,o+W),1-Math.min(1,i+W)]}static CMYK_HTML(Z){const i=this.CMYK_RGB(Z).slice(1);return this.RGB_HTML(i)}static RGB_CMYK([Z,i,o]){const W=1-Z,G=1-i,u=1-o,X=Math.min(W,G,u);return["CMYK",W,G,u,X]}}t.ColorConverters=s},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XfaLayer=void 0;var s=c(19);class d{static setupStorage(i,o,W,G,u){const X=G.getValue(o,{value:null});switch(W.name){case"textarea":if(X.value!==null&&(i.textContent=X.value),u==="print")break;i.addEventListener("input",z=>{G.setValue(o,{value:z.target.value})});break;case"input":if(W.attributes.type==="radio"||W.attributes.type==="checkbox"){if(X.value===W.attributes.xfaOn?i.setAttribute("checked",!0):X.value===W.attributes.xfaOff&&i.removeAttribute("checked"),u==="print")break;i.addEventListener("change",z=>{G.setValue(o,{value:z.target.checked?z.target.getAttribute("xfaOn"):z.target.getAttribute("xfaOff")})})}else{if(X.value!==null&&i.setAttribute("value",X.value),u==="print")break;i.addEventListener("input",z=>{G.setValue(o,{value:z.target.value})})}break;case"select":if(X.value!==null)for(const z of W.children)z.attributes.value===X.value&&(z.attributes.selected=!0);i.addEventListener("input",z=>{const R=z.target.options,S=R.selectedIndex===-1?"":R[R.selectedIndex].value;G.setValue(o,{value:S})});break}}static setAttributes({html:i,element:o,storage:W=null,intent:G,linkService:u}){const{attributes:X}=o,z=i instanceof HTMLAnchorElement;X.type==="radio"&&(X.name=`${X.name}-${G}`);for(const[R,S]of Object.entries(X))if(S!=null)switch(R){case"class":S.length&&i.setAttribute(R,S.join(" "));break;case"dataId":break;case"id":i.setAttribute("data-element-id",S);break;case"style":Object.assign(i.style,S);break;case"textContent":i.textContent=S;break;default:(!z||R!=="href"&&R!=="newWindow")&&i.setAttribute(R,S)}z&&u.addLinkAttributes(i,X.href,X.newWindow),W&&X.dataId&&this.setupStorage(i,X.dataId,o,W)}static render(i){var k;const o=i.annotationStorage,W=i.linkService,G=i.xfaHtml,u=i.intent||"display",X=document.createElement(G.name);G.attributes&&this.setAttributes({html:X,element:G,intent:u,linkService:W});const z=[[G,-1,X]],R=i.div;if(R.append(X),i.viewport){const L=`matrix(${i.viewport.transform.join(",")})`;R.style.transform=L}u!=="richText"&&R.setAttribute("class","xfaLayer xfaFont");const S=[];for(;z.length>0;){const[L,x,j]=z.at(-1);if(x+1===L.children.length){z.pop();continue}const Q=L.children[++z.at(-1)[1]];if(Q===null)continue;const{name:J}=Q;if(J==="#text"){const y=document.createTextNode(Q.value);S.push(y),j.append(y);continue}let M;if((k=Q==null?void 0:Q.attributes)!=null&&k.xmlns?M=document.createElementNS(Q.attributes.xmlns,J):M=document.createElement(J),j.append(M),Q.attributes&&this.setAttributes({html:M,element:Q,storage:o,intent:u,linkService:W}),Q.children&&Q.children.length>0)z.push([Q,-1,M]);else if(Q.value){const y=document.createTextNode(Q.value);s.XfaText.shouldBuildText(J)&&S.push(y),M.append(y)}}for(const L of R.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))L.setAttribute("readOnly",!0);return{textDivs:S}}static update(i){const o=`matrix(${i.viewport.transform.join(",")})`;i.div.style.transform=o,i.div.hidden=!1}}t.XfaLayer=d},(l,t,c)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SVGGraphics=void 0;var s=c(6),d=c(1),Z=c(10);let i=class{constructor(){(0,d.unreachable)("Not implemented: SVGGraphics")}};t.SVGGraphics=i;{let k=function(M){let y=[];const Y=[];for(const m of M){if(m.fn==="save"){y.push({fnId:92,fn:"group",items:[]}),Y.push(y),y=y.at(-1).items;continue}m.fn==="restore"?y=Y.pop():y.push(m)}return y},L=function(M){if(Number.isInteger(M))return M.toString();const y=M.toFixed(10);let Y=y.length-1;if(y[Y]!=="0")return y;do Y--;while(y[Y]==="0");return y.substring(0,y[Y]==="."?Y:Y+1)},x=function(M){if(M[4]===0&&M[5]===0){if(M[1]===0&&M[2]===0)return M[0]===1&&M[3]===1?"":`scale(${L(M[0])} ${L(M[3])})`;if(M[0]===M[3]&&M[1]===-M[2]){const y=Math.acos(M[0])*180/Math.PI;return`rotate(${L(y)})`}}else if(M[0]===1&&M[1]===0&&M[2]===0&&M[3]===1)return`translate(${L(M[4])} ${L(M[5])})`;return`matrix(${L(M[0])} ${L(M[1])} ${L(M[2])} ${L(M[3])} ${L(M[4])} ${L(M[5])})`};const o={fontStyle:"normal",fontWeight:"normal",fillColor:"#000000"},W="http://www.w3.org/XML/1998/namespace",G="http://www.w3.org/1999/xlink",u=["butt","round","square"],X=["miter","round","bevel"],z=function(M,y="",Y=!1){if(URL.createObjectURL&&typeof Blob<"u"&&!Y)return URL.createObjectURL(new Blob([M],{type:y}));const m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";let D=`data:${y};base64,`;for(let H=0,V=M.length;H>2,Xl=(v&3)<<4|A>>4,Zt=H+1>6:64,lt=H+2>1&2147483647:fl=fl>>1&2147483647;Y[Nl]=fl}function m(Nl,fl,Xl){let Zt=-1;for(let lt=fl;lt>>8^Wt}return Zt^-1}function D(Nl,fl,Xl,Zt){let lt=Zt;const at=fl.length;Xl[lt]=at>>24&255,Xl[lt+1]=at>>16&255,Xl[lt+2]=at>>8&255,Xl[lt+3]=at&255,lt+=4,Xl[lt]=Nl.charCodeAt(0)&255,Xl[lt+1]=Nl.charCodeAt(1)&255,Xl[lt+2]=Nl.charCodeAt(2)&255,Xl[lt+3]=Nl.charCodeAt(3)&255,lt+=4,Xl.set(fl,lt),lt+=fl.length;const Wt=m(Xl,Zt+4,lt);Xl[lt]=Wt>>24&255,Xl[lt+1]=Wt>>16&255,Xl[lt+2]=Wt>>8&255,Xl[lt+3]=Wt&255}function H(Nl,fl,Xl){let Zt=1,lt=0;for(let at=fl;at=8?fl=Nl:fl=Buffer.from(Nl);const Xl=require$$5.deflateSync(fl,{level:9});return Xl instanceof Uint8Array?Xl:new Uint8Array(Xl)}catch(fl){(0,d.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+fl)}return v(Nl)}function v(Nl){let fl=Nl.length;const Xl=65535,Zt=Math.ceil(fl/Xl),lt=new Uint8Array(2+fl+Zt*5+4);let at=0;lt[at++]=120,lt[at++]=156;let Wt=0;for(;fl>Xl;)lt[at++]=0,lt[at++]=255,lt[at++]=255,lt[at++]=0,lt[at++]=0,lt.set(Nl.subarray(Wt,Wt+Xl),at),at+=Xl,Wt+=Xl,fl-=Xl;lt[at++]=1,lt[at++]=fl&255,lt[at++]=fl>>8&255,lt[at++]=~fl&65535&255,lt[at++]=(~fl&65535)>>8&255,lt.set(Nl.subarray(Wt),at),at+=Nl.length-Wt;const Mt=H(Nl,0,Nl.length);return lt[at++]=Mt>>24&255,lt[at++]=Mt>>16&255,lt[at++]=Mt>>8&255,lt[at++]=Mt&255,lt}function A(Nl,fl,Xl,Zt){const lt=Nl.width,at=Nl.height;let Wt,Mt,Nt;const Vt=Nl.data;switch(fl){case d.ImageKind.GRAYSCALE_1BPP:Mt=0,Wt=1,Nt=lt+7>>3;break;case d.ImageKind.RGB_24BPP:Mt=2,Wt=8,Nt=lt*3;break;case d.ImageKind.RGBA_32BPP:Mt=6,Wt=8,Nt=lt*4;break;default:throw new Error("invalid format")}const Ml=new Uint8Array((1+Nt)*at);let U=0,g=0;for(let T=0;T>24&255,lt>>16&255,lt>>8&255,lt&255,at>>24&255,at>>16&255,at>>8&255,at&255,Wt,Mt,0,0,0]),B=V(Ml),P=M.length+y*3+O.length+B.length,Zl=new Uint8Array(P);let cl=0;return Zl.set(M,cl),cl+=M.length,D("IHDR",O,Zl,cl),cl+=y+O.length,D("IDATA",B,Zl,cl),cl+=y+B.length,D("IEND",new Uint8Array(0),Zl,cl),z(Zl,"image/png",Xl)}return function(fl,Xl,Zt){const lt=fl.kind===void 0?d.ImageKind.GRAYSCALE_1BPP:fl.kind;return A(fl,lt,Xl,Zt)}}();class S{constructor(){this.fontSizeScale=1,this.fontWeight=o.fontWeight,this.fontSize=0,this.textMatrix=d.IDENTITY_MATRIX,this.fontMatrix=d.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=d.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=o.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}clone(){return Object.create(this)}setCurrentPoint(y,Y){this.x=y,this.y=Y}}let j=0,Q=0,J=0;t.SVGGraphics=i=class{constructor(M,y,Y=!1){(0,s.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new s.DOMSVGFactory,this.current=new S,this.transformMatrix=d.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=M,this.objs=y,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!Y,this._operatorIdMapping=[];for(const m in d.OPS)this._operatorIdMapping[d.OPS[m]]=m}getObject(M,y=null){return typeof M=="string"?M.startsWith("g_")?this.commonObjs.get(M):this.objs.get(M):y}save(){this.transformStack.push(this.transformMatrix);const M=this.current;this.extraStack.push(M),this.current=M.clone()}restore(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}group(M){this.save(),this.executeOpTree(M),this.restore()}loadDependencies(M){const y=M.fnArray,Y=M.argsArray;for(let m=0,D=y.length;m{V.get(H,A)});this.current.dependencies.push(v)}return Promise.all(this.current.dependencies)}transform(M,y,Y,m,D,H){const V=[M,y,Y,m,D,H];this.transformMatrix=d.Util.transform(this.transformMatrix,V),this.tgrp=null}getSVG(M,y){this.viewport=y;const Y=this._initialize(y);return this.loadDependencies(M).then(()=>(this.transformMatrix=d.IDENTITY_MATRIX,this.executeOpTree(this.convertOpList(M)),Y))}convertOpList(M){const y=this._operatorIdMapping,Y=M.argsArray,m=M.fnArray,D=[];for(let H=0,V=m.length;H0&&(this.current.lineWidth=M)}setLineCap(M){this.current.lineCap=u[M]}setLineJoin(M){this.current.lineJoin=X[M]}setMiterLimit(M){this.current.miterLimit=M}setStrokeAlpha(M){this.current.strokeAlpha=M}setStrokeRGBColor(M,y,Y){this.current.strokeColor=d.Util.makeHexColor(M,y,Y)}setFillAlpha(M){this.current.fillAlpha=M}setFillRGBColor(M,y,Y){this.current.fillColor=d.Util.makeHexColor(M,y,Y),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}setStrokeColorN(M){this.current.strokeColor=this._makeColorN_Pattern(M)}setFillColorN(M){this.current.fillColor=this._makeColorN_Pattern(M)}shadingFill(M){const y=this.viewport.width,Y=this.viewport.height,m=d.Util.inverseTransform(this.transformMatrix),D=d.Util.applyTransform([0,0],m),H=d.Util.applyTransform([0,Y],m),V=d.Util.applyTransform([y,0],m),v=d.Util.applyTransform([y,Y],m),A=Math.min(D[0],H[0],V[0],v[0]),Nl=Math.min(D[1],H[1],V[1],v[1]),fl=Math.max(D[0],H[0],V[0],v[0]),Xl=Math.max(D[1],H[1],V[1],v[1]),Zt=this.svgFactory.createElement("svg:rect");Zt.setAttributeNS(null,"x",A),Zt.setAttributeNS(null,"y",Nl),Zt.setAttributeNS(null,"width",fl-A),Zt.setAttributeNS(null,"height",Xl-Nl),Zt.setAttributeNS(null,"fill",this._makeShadingPattern(M)),this.current.fillAlpha<1&&Zt.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(Zt)}_makeColorN_Pattern(M){return M[0]==="TilingPattern"?this._makeTilingPattern(M):this._makeShadingPattern(M)}_makeTilingPattern(M){const y=M[1],Y=M[2],m=M[3]||d.IDENTITY_MATRIX,[D,H,V,v]=M[4],A=M[5],Nl=M[6],fl=M[7],Xl=`shading${J++}`,[Zt,lt,at,Wt]=d.Util.normalizeRect([...d.Util.applyTransform([D,H],m),...d.Util.applyTransform([V,v],m)]),[Mt,Nt]=d.Util.singularValueDecompose2dScale(m),Vt=A*Mt,Ml=Nl*Nt,U=this.svgFactory.createElement("svg:pattern");U.setAttributeNS(null,"id",Xl),U.setAttributeNS(null,"patternUnits","userSpaceOnUse"),U.setAttributeNS(null,"width",Vt),U.setAttributeNS(null,"height",Ml),U.setAttributeNS(null,"x",`${Zt}`),U.setAttributeNS(null,"y",`${lt}`);const g=this.svg,O=this.transformMatrix,B=this.current.fillColor,P=this.current.strokeColor,Zl=this.svgFactory.create(at-Zt,Wt-lt);if(this.svg=Zl,this.transformMatrix=m,fl===2){const cl=d.Util.makeHexColor(...y);this.current.fillColor=cl,this.current.strokeColor=cl}return this.executeOpTree(this.convertOpList(Y)),this.svg=g,this.transformMatrix=O,this.current.fillColor=B,this.current.strokeColor=P,U.append(Zl.childNodes[0]),this.defs.append(U),`url(#${Xl})`}_makeShadingPattern(M){switch(typeof M=="string"&&(M=this.objs.get(M)),M[0]){case"RadialAxial":const y=`shading${J++}`,Y=M[3];let m;switch(M[1]){case"axial":const D=M[4],H=M[5];m=this.svgFactory.createElement("svg:linearGradient"),m.setAttributeNS(null,"id",y),m.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),m.setAttributeNS(null,"x1",D[0]),m.setAttributeNS(null,"y1",D[1]),m.setAttributeNS(null,"x2",H[0]),m.setAttributeNS(null,"y2",H[1]);break;case"radial":const V=M[4],v=M[5],A=M[6],Nl=M[7];m=this.svgFactory.createElement("svg:radialGradient"),m.setAttributeNS(null,"id",y),m.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),m.setAttributeNS(null,"cx",v[0]),m.setAttributeNS(null,"cy",v[1]),m.setAttributeNS(null,"r",Nl),m.setAttributeNS(null,"fx",V[0]),m.setAttributeNS(null,"fy",V[1]),m.setAttributeNS(null,"fr",A);break;default:throw new Error(`Unknown RadialAxial type: ${M[1]}`)}for(const D of Y){const H=this.svgFactory.createElement("svg:stop");H.setAttributeNS(null,"offset",D[0]),H.setAttributeNS(null,"stop-color",D[1]),m.append(H)}return this.defs.append(m),`url(#${y})`;case"Mesh":return(0,d.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error(`Unknown IR type: ${M[0]}`)}}setDash(M,y){this.current.dashArray=M,this.current.dashPhase=y}constructPath(M,y){const Y=this.current;let m=Y.x,D=Y.y,H=[],V=0;for(const v of M)switch(v|0){case d.OPS.rectangle:m=y[V++],D=y[V++];const A=y[V++],Nl=y[V++],fl=m+A,Xl=D+Nl;H.push("M",L(m),L(D),"L",L(fl),L(D),"L",L(fl),L(Xl),"L",L(m),L(Xl),"Z");break;case d.OPS.moveTo:m=y[V++],D=y[V++],H.push("M",L(m),L(D));break;case d.OPS.lineTo:m=y[V++],D=y[V++],H.push("L",L(m),L(D));break;case d.OPS.curveTo:m=y[V+4],D=y[V+5],H.push("C",L(y[V]),L(y[V+1]),L(y[V+2]),L(y[V+3]),L(m),L(D)),V+=6;break;case d.OPS.curveTo2:H.push("C",L(m),L(D),L(y[V]),L(y[V+1]),L(y[V+2]),L(y[V+3])),m=y[V+2],D=y[V+3],V+=4;break;case d.OPS.curveTo3:m=y[V+2],D=y[V+3],H.push("C",L(y[V]),L(y[V+1]),L(m),L(D),L(m),L(D)),V+=4;break;case d.OPS.closePath:H.push("Z");break}H=H.join(" "),Y.path&&M.length>0&&M[0]!==d.OPS.rectangle&&M[0]!==d.OPS.moveTo?H=Y.path.getAttributeNS(null,"d")+H:(Y.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(Y.path)),Y.path.setAttributeNS(null,"d",H),Y.path.setAttributeNS(null,"fill","none"),Y.element=Y.path,Y.setCurrentPoint(m,D)}endPath(){const M=this.current;if(M.path=null,!this.pendingClip)return;if(!M.element){this.pendingClip=null;return}const y=`clippath${j++}`,Y=this.svgFactory.createElement("svg:clipPath");Y.setAttributeNS(null,"id",y),Y.setAttributeNS(null,"transform",x(this.transformMatrix));const m=M.element.cloneNode(!0);if(this.pendingClip==="evenodd"?m.setAttributeNS(null,"clip-rule","evenodd"):m.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,Y.append(m),this.defs.append(Y),M.activeClipUrl){M.clipGroup=null;for(const D of this.extraStack)D.clipGroup=null;Y.setAttributeNS(null,"clip-path",M.activeClipUrl)}M.activeClipUrl=`url(#${y})`,this.tgrp=null}clip(M){this.pendingClip=M}closePath(){const M=this.current;if(M.path){const y=`${M.path.getAttributeNS(null,"d")}Z`;M.path.setAttributeNS(null,"d",y)}}setLeading(M){this.current.leading=-M}setTextRise(M){this.current.textRise=M}setTextRenderingMode(M){this.current.textRenderingMode=M}setHScale(M){this.current.textHScale=M/100}setRenderingIntent(M){}setFlatness(M){}setGState(M){for(const[y,Y]of M)switch(y){case"LW":this.setLineWidth(Y);break;case"LC":this.setLineCap(Y);break;case"LJ":this.setLineJoin(Y);break;case"ML":this.setMiterLimit(Y);break;case"D":this.setDash(Y[0],Y[1]);break;case"RI":this.setRenderingIntent(Y);break;case"FL":this.setFlatness(Y);break;case"Font":this.setFont(Y);break;case"CA":this.setStrokeAlpha(Y);break;case"ca":this.setFillAlpha(Y);break;default:(0,d.warn)(`Unimplemented graphic state operator ${y}`);break}}fill(){const M=this.current;M.element&&(M.element.setAttributeNS(null,"fill",M.fillColor),M.element.setAttributeNS(null,"fill-opacity",M.fillAlpha),this.endPath())}stroke(){const M=this.current;M.element&&(this._setStrokeAttributes(M.element),M.element.setAttributeNS(null,"fill","none"),this.endPath())}_setStrokeAttributes(M,y=1){const Y=this.current;let m=Y.dashArray;y!==1&&m.length>0&&(m=m.map(function(D){return y*D})),M.setAttributeNS(null,"stroke",Y.strokeColor),M.setAttributeNS(null,"stroke-opacity",Y.strokeAlpha),M.setAttributeNS(null,"stroke-miterlimit",L(Y.miterLimit)),M.setAttributeNS(null,"stroke-linecap",Y.lineCap),M.setAttributeNS(null,"stroke-linejoin",Y.lineJoin),M.setAttributeNS(null,"stroke-width",L(y*Y.lineWidth)+"px"),M.setAttributeNS(null,"stroke-dasharray",m.map(L).join(" ")),M.setAttributeNS(null,"stroke-dashoffset",L(y*Y.dashPhase)+"px")}eoFill(){var M;(M=this.current.element)==null||M.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}fillStroke(){this.stroke(),this.fill()}eoFillStroke(){var M;(M=this.current.element)==null||M.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}closeStroke(){this.closePath(),this.stroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.closePath(),this.eoFillStroke()}paintSolidColorImageMask(){const M=this.svgFactory.createElement("svg:rect");M.setAttributeNS(null,"x","0"),M.setAttributeNS(null,"y","0"),M.setAttributeNS(null,"width","1px"),M.setAttributeNS(null,"height","1px"),M.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(M)}paintImageXObject(M){const y=this.getObject(M);if(!y){(0,d.warn)(`Dependent image with object ID ${M} is not ready yet`);return}this.paintInlineImageXObject(y)}paintInlineImageXObject(M,y){const Y=M.width,m=M.height,D=R(M,this.forceDataSchema,!!y),H=this.svgFactory.createElement("svg:rect");H.setAttributeNS(null,"x","0"),H.setAttributeNS(null,"y","0"),H.setAttributeNS(null,"width",L(Y)),H.setAttributeNS(null,"height",L(m)),this.current.element=H,this.clip("nonzero");const V=this.svgFactory.createElement("svg:image");V.setAttributeNS(G,"xlink:href",D),V.setAttributeNS(null,"x","0"),V.setAttributeNS(null,"y",L(-m)),V.setAttributeNS(null,"width",L(Y)+"px"),V.setAttributeNS(null,"height",L(m)+"px"),V.setAttributeNS(null,"transform",`scale(${L(1/Y)} ${L(-1/m)})`),y?y.append(V):this._ensureTransformGroup().append(V)}paintImageMaskXObject(M){const y=this.getObject(M.data,M);if(y.bitmap){(0,d.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the `isOffscreenCanvasSupported` API parameter is disabled.");return}const Y=this.current,m=y.width,D=y.height,H=Y.fillColor;Y.maskId=`mask${Q++}`;const V=this.svgFactory.createElement("svg:mask");V.setAttributeNS(null,"id",Y.maskId);const v=this.svgFactory.createElement("svg:rect");v.setAttributeNS(null,"x","0"),v.setAttributeNS(null,"y","0"),v.setAttributeNS(null,"width",L(m)),v.setAttributeNS(null,"height",L(D)),v.setAttributeNS(null,"fill",H),v.setAttributeNS(null,"mask",`url(#${Y.maskId})`),this.defs.append(V),this._ensureTransformGroup().append(v),this.paintInlineImageXObject(y,V)}paintFormXObjectBegin(M,y){if(Array.isArray(M)&&M.length===6&&this.transform(M[0],M[1],M[2],M[3],M[4],M[5]),y){const Y=y[2]-y[0],m=y[3]-y[1],D=this.svgFactory.createElement("svg:rect");D.setAttributeNS(null,"x",y[0]),D.setAttributeNS(null,"y",y[1]),D.setAttributeNS(null,"width",L(Y)),D.setAttributeNS(null,"height",L(m)),this.current.element=D,this.clip("nonzero"),this.endPath()}}paintFormXObjectEnd(){}_initialize(M){const y=this.svgFactory.create(M.width,M.height),Y=this.svgFactory.createElement("svg:defs");y.append(Y),this.defs=Y;const m=this.svgFactory.createElement("svg:g");return m.setAttributeNS(null,"transform",x(M.transform)),y.append(m),this.svg=m,y}_ensureClipGroup(){if(!this.current.clipGroup){const M=this.svgFactory.createElement("svg:g");M.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(M),this.current.clipGroup=M}return this.current.clipGroup}_ensureTransformGroup(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",x(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}}}],__webpack_module_cache__={};function __w_pdfjs_require__(l){var t=__webpack_module_cache__[l];if(t!==void 0)return t.exports;var c=__webpack_module_cache__[l]={exports:{}};return __webpack_modules__[l](c,c.exports,__w_pdfjs_require__),c.exports}var __webpack_exports__={};return(()=>{var l=__webpack_exports__;Object.defineProperty(l,"__esModule",{value:!0}),Object.defineProperty(l,"AbortException",{enumerable:!0,get:function(){return t.AbortException}}),Object.defineProperty(l,"AnnotationEditorLayer",{enumerable:!0,get:function(){return Z.AnnotationEditorLayer}}),Object.defineProperty(l,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return t.AnnotationEditorParamsType}}),Object.defineProperty(l,"AnnotationEditorType",{enumerable:!0,get:function(){return t.AnnotationEditorType}}),Object.defineProperty(l,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return i.AnnotationEditorUIManager}}),Object.defineProperty(l,"AnnotationLayer",{enumerable:!0,get:function(){return o.AnnotationLayer}}),Object.defineProperty(l,"AnnotationMode",{enumerable:!0,get:function(){return t.AnnotationMode}}),Object.defineProperty(l,"CMapCompressionType",{enumerable:!0,get:function(){return t.CMapCompressionType}}),Object.defineProperty(l,"FeatureTest",{enumerable:!0,get:function(){return t.FeatureTest}}),Object.defineProperty(l,"GlobalWorkerOptions",{enumerable:!0,get:function(){return W.GlobalWorkerOptions}}),Object.defineProperty(l,"InvalidPDFException",{enumerable:!0,get:function(){return t.InvalidPDFException}}),Object.defineProperty(l,"MissingPDFException",{enumerable:!0,get:function(){return t.MissingPDFException}}),Object.defineProperty(l,"OPS",{enumerable:!0,get:function(){return t.OPS}}),Object.defineProperty(l,"PDFDataRangeTransport",{enumerable:!0,get:function(){return c.PDFDataRangeTransport}}),Object.defineProperty(l,"PDFDateString",{enumerable:!0,get:function(){return s.PDFDateString}}),Object.defineProperty(l,"PDFWorker",{enumerable:!0,get:function(){return c.PDFWorker}}),Object.defineProperty(l,"PasswordResponses",{enumerable:!0,get:function(){return t.PasswordResponses}}),Object.defineProperty(l,"PermissionFlag",{enumerable:!0,get:function(){return t.PermissionFlag}}),Object.defineProperty(l,"PixelsPerInch",{enumerable:!0,get:function(){return s.PixelsPerInch}}),Object.defineProperty(l,"PromiseCapability",{enumerable:!0,get:function(){return t.PromiseCapability}}),Object.defineProperty(l,"RenderingCancelledException",{enumerable:!0,get:function(){return s.RenderingCancelledException}}),Object.defineProperty(l,"SVGGraphics",{enumerable:!0,get:function(){return G.SVGGraphics}}),Object.defineProperty(l,"UnexpectedResponseException",{enumerable:!0,get:function(){return t.UnexpectedResponseException}}),Object.defineProperty(l,"Util",{enumerable:!0,get:function(){return t.Util}}),Object.defineProperty(l,"VerbosityLevel",{enumerable:!0,get:function(){return t.VerbosityLevel}}),Object.defineProperty(l,"XfaLayer",{enumerable:!0,get:function(){return u.XfaLayer}}),Object.defineProperty(l,"build",{enumerable:!0,get:function(){return c.build}}),Object.defineProperty(l,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return t.createValidAbsoluteUrl}}),Object.defineProperty(l,"getDocument",{enumerable:!0,get:function(){return c.getDocument}}),Object.defineProperty(l,"getFilenameFromUrl",{enumerable:!0,get:function(){return s.getFilenameFromUrl}}),Object.defineProperty(l,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return s.getPdfFilenameFromUrl}}),Object.defineProperty(l,"getXfaPageViewport",{enumerable:!0,get:function(){return s.getXfaPageViewport}}),Object.defineProperty(l,"isDataScheme",{enumerable:!0,get:function(){return s.isDataScheme}}),Object.defineProperty(l,"isPdfFile",{enumerable:!0,get:function(){return s.isPdfFile}}),Object.defineProperty(l,"loadScript",{enumerable:!0,get:function(){return s.loadScript}}),Object.defineProperty(l,"normalizeUnicode",{enumerable:!0,get:function(){return t.normalizeUnicode}}),Object.defineProperty(l,"renderTextLayer",{enumerable:!0,get:function(){return d.renderTextLayer}}),Object.defineProperty(l,"setLayerDimensions",{enumerable:!0,get:function(){return s.setLayerDimensions}}),Object.defineProperty(l,"shadow",{enumerable:!0,get:function(){return t.shadow}}),Object.defineProperty(l,"updateTextLayer",{enumerable:!0,get:function(){return d.updateTextLayer}}),Object.defineProperty(l,"version",{enumerable:!0,get:function(){return c.version}});var t=__w_pdfjs_require__(1),c=__w_pdfjs_require__(2),s=__w_pdfjs_require__(6),d=__w_pdfjs_require__(26),Z=__w_pdfjs_require__(27),i=__w_pdfjs_require__(5),o=__w_pdfjs_require__(30),W=__w_pdfjs_require__(14),G=__w_pdfjs_require__(33),u=__w_pdfjs_require__(32)})(),__webpack_exports__})())})(pdf);var pdfExports=pdf.exports,Gl=Object.defineProperty,ml=(l,t,c)=>t in l?Gl(l,t,{enumerable:!0,configurable:!0,writable:!0,value:c}):l[t]=c,e=(l,t,c)=>(ml(l,typeof t!="symbol"?t+"":t,c),c);const q="internal-link",yl="link",ul="file-attachment",hl="form-text",zl="form-select",sl="form-checkbox",Il="form-radio",Rl="form-button",_=["click","dblclick","mouseover","input","change"];function n(l,t,c){const s=[];if(c)for(const d of c)d[l]===t&&s.push(d);return s}function a(l,t){return{type:l,data:t}}function F(l,t){switch(l.type){case"textarea":case"text":return a(hl,{fieldName:l.name,value:l.value});case"select-one":case"select-multiple":const c=[];for(const d of l.options)c.push({value:d.value,label:d.label});const s=[];for(const d of l.selectedOptions)s.push({value:d.value,label:d.label});return a(zl,{fieldName:l.name,value:s,options:c});case"checkbox":return a(sl,{fieldName:l.name,checked:l.checked});case"radio":return a(Il,{fieldName:l.name,...t});case"button":return a(Rl,{fieldName:l.name,...t})}}function il(l){return a(ul,l.file)}async function pl(l,t){if(l.dest){if(typeof l.dest=="string")return a(q,{referencedPage:Number(l.dest.substring(1,l.dest.length)),offset:null});{const c=await t.getPageIndex(l.dest[0]);return a(q,{referencedPage:c+1,offset:{left:l.dest[2],bottom:l.dest[3]}})}}else if(l.url)return a(yl,{url:l.url,unsafeUrl:l.unsafeUrl})}function $(l){for(const t of l.getElementsByTagName("span")){let c=t.textContent;const s=JSON.parse(t.dataset.l10nArgs??"{}");if(c)for(const d in s)c=c.replace(`{{${d}}}`,s[d]);t.textContent=c}}function al(l,t,c){var s;let d=l.target.parentNode;if(d.tagName==="DIV"&&(d=d.firstChild),d.className==="linkAnnotation"&&l.type==="click"){const Z=(s=d.dataset)==null?void 0:s.annotationId;if(Z)return pl(n("id",Z,c)[0],t)}else if(d.className.includes("popupAnnotation")||d.className.includes("textAnnotation"))$(d);else if(d.className.includes("fileAttachmentAnnotation")){$(d);const Z=d.dataset.annotationId;if(Z&&l.type==="dblclick")return il(n("id",Z,c)[0])}else if(d.className.includes("textWidgetAnnotation")&&l.type==="input"){let Z=d.getElementsByTagName("input")[0];return Z||(Z=d.getElementsByTagName("textarea")[0]),F(Z)}else{if(d.className.includes("choiceWidgetAnnotation")&&l.type==="input")return F(d.getElementsByTagName("select")[0]);if(d.className.includes("buttonWidgetAnnotation checkBox")&&l.type==="change")return F(d.getElementsByTagName("input")[0]);if(d.className.includes("buttonWidgetAnnotation radioButton")&&l.type==="change"){const Z=d.dataset.annotationId;if(Z){const i=n("id",Z,c)[0],o=[];for(const W of n("fieldName",i.fieldName,c))W.buttonValue&&o.push(W.buttonValue);return F(d.getElementsByTagName("input")[0],{value:i.buttonValue,defaultValue:i.fieldValue,options:o})}}else if(d.className.includes("buttonWidgetAnnotation pushButton")&&l.type==="click"){const Z=d.dataset.annotationId;if(Z){const i=n("id",Z,c)[0];return i.resetForm?F({name:i.fieldName,type:"button"},{actions:i.actions,reset:!0}):F({name:i.fieldName,type:"button"},{actions:i.actions,reset:!1})}}}}class bl{constructor(){e(this,"externalLinkEnabled"),this.externalLinkEnabled=!0}get pagesCount(){return 0}get page(){return 0}set page(t){}get rotation(){return 0}set rotation(t){}get isInPresentationMode(){return!1}async goToDestination(t){}goToPage(t){}addLinkAttributes(t,c,s=!1){}getDestinationHash(t){return"#"}getAnchorUrl(t){return"#"}setHash(t){}executeNamedAction(t){}executeSetOCGState(t){}cachePageRef(t,c){}}const wl=defineComponent({__name:"AnnotationLayer",props:{page:{},viewport:{},document:{},annotationsFilter:{},annotationsMap:{},imageResourcesPath:{},hideForms:{type:Boolean},enableScripting:{type:Boolean}},emits:["annotation"],setup(l,{emit:t}){const c=l,s=ref(),d=ref();function Z(u){const X=al(u,c.document,d.value);Promise.resolve(X).then(z=>{z&&t("annotation",z)})}async function i(){var u;return await((u=toRaw(c.document))==null?void 0:u.getFieldObjects())}async function o(){var u;return await((u=toRaw(c.document))==null?void 0:u.hasJSActions())}async function W(){const u=c.page;let X=await(u==null?void 0:u.getAnnotations());if(c.annotationsFilter){const z=c.annotationsFilter;X=X.filter(R=>{const S=R.subtype,k=R.fieldType?`${S}.${R.fieldType}`:null;return(z==null?void 0:z.includes(S))||k!==null&&(z==null?void 0:z.includes(k))})}return X}async function G(){var u,X;(X=(u=s.value).replaceChildren)==null||X.call(u);for(const j of _)s.value.removeEventListener(j,Z);const z=toRaw(c.document),R=c.page,S=c.viewport;d.value=await W();const k=new Map([]);for(const j of d.value)if(j.subtype==="Widget"&&j.fieldType==="Btn"&&j.pushButton){const Q=j.rect[2]-j.rect[0],J=j.rect[3]-j.rect[1],M=document.createElement("canvas");M.setAttribute("width",(Q*S.scale).toString()),M.setAttribute("height",(J*S.scale).toString()),k.set(j.id,M)}const L=z.annotationStorage;if(c.annotationsMap)for(const[j,Q]of Object.entries(c.annotationsMap))L.setValue(j,Q);const x={annotations:d.value,viewport:S.clone({dontFlip:!0}),linkService:new bl,annotationCanvasMap:k,div:s.value,annotationStorage:L,renderForms:!c.hideForms,page:R,enableScripting:!1,hasJSActions:await o(),fieldObjects:await i(),downloadManager:null,imageResourcesPath:c.imageResourcesPath};pdfExports.AnnotationLayer.render(x);for(const j of _)s.value.addEventListener(j,Z)}return watch(()=>c.viewport,()=>{c.page&&c.viewport&&s.value&&G()}),onMounted(()=>{c.page&&c.viewport&&s.value&&G()}),(u,X)=>(openBlock(),createElementBlock("div",{ref_key:"layer",ref:s,class:"annotationLayer",style:{display:"block"}},null,512))}});function dl(l){return l.items.map(t=>t.str)}function Sl(l,t,c){const s=l.join(" "),d=["g"];c.ignoreCase&&d.push("i");let Z=t.trim();c.completeWords&&(Z=`\\b${Z}\\b`);const i=new RegExp(Z,d.join("")),o=[];let W;for(;(W=i.exec(s))!==null;)o.push([W.index,W[0].length,W[0]]);return o}function Dl(l,t){let c=0,s=0;const d=t.length-1,Z=[];for(let i=0;i=s+t[c].length;)s+=t[c].length+1,c++;const W={idx:c,offset:o-s};for(o+=l[i][1];c!==d&&o>s+t[c].length;)s+=t[c].length+1,c++;const G={idx:c,offset:o-s};Z.push({start:W,end:G,str:l[i][2],oindex:l[i][0]})}return Z}function xl(l,t,c){function s(d,Z=-1,i=-1){const o=t.items[d],W=[];let G="",u="",X="",z=c[d];if(!z)return;if(z.nodeType===Node.TEXT_NODE){const k=document.createElement("span");z.before(k),k.append(z),c[d]=k,z=k}Z>=0&&i>=0?G=o.str.substring(Z,i):Z<0&&i<0?G=o.str:Z>=0?G=o.str.substring(Z):i>=0&&(G=o.str.substring(0,i));const R=document.createTextNode(G),S=document.createElement("span");if(S.className="highlight appended",S.append(R),W.push(S),Z>0){u=o.str.substring(0,Z);const k=document.createTextNode(u);W.unshift(k)}if(i>0){X=o.str.substring(i);const k=document.createTextNode(X);W.push(k)}z.replaceChildren(...W)}for(const d of l)if(d.start.idx===d.end.idx)s(d.start.idx,d.start.offset,d.end.offset);else for(let Z=d.start.idx,i=d.end.idx;Z<=i;Z++)Z===d.start.idx?s(Z,d.start.offset):Z===d.end.idx?s(Z,-1,d.end.offset):s(Z)}function jl(l,t){const c=dl(l);for(let s=0;s{var L;const x=document.createElement("div");x.className="endOfContent",(L=s.value)==null||L.appendChild(x),d.value=x,o()})}function G(){d.value&&d.value.classList.add("active")}function u(){d.value&&d.value.classList.remove("active")}return watch(()=>c.viewport,X=>{c.page&&c.viewport&&s.value&&W()}),watch(()=>[c.highlightText,c.highlightOptions],X=>{o(!0)},{deep:!0}),onMounted(()=>{c.page&&c.viewport&&s.value&&W()}),(X,z)=>(openBlock(),createElementBlock("div",{ref_key:"layer",ref:s,class:"textLayer",style:{display:"block"},onMousedown:G,onMouseup:u},null,544))}}),kl=defineComponent({__name:"XFALayer",props:{page:{},document:{},viewport:{}},setup(l){const t=l,c=ref();async function s(){var d,Z;(Z=(d=c.value).replaceChildren)==null||Z.call(d);const i=toRaw(t.document),o=t.page,W=t.viewport;if(i.isPureXfa){const G=await o.getXfa(),u={div:c.value,viewport:W.clone({dontFlip:!0}),linkService:new bl,annotationStorage:i==null?void 0:i.annotationStorage,xfaHtml:G};pdfExports.XfaLayer.render(u)}}return watch(()=>t.viewport,d=>{t.page&&t.viewport&&c.value&&s()}),onMounted(()=>{t.page&&t.viewport&&c.value&&s()}),(d,Z)=>(openBlock(),createElementBlock("div",{ref_key:"layer",ref:c,style:{display:"block"}},null,512))}}),Fl=createBaseVNode("canvas",{dir:"ltr",style:{display:"block"},role:"main"},null,-1),ll=defineComponent({__name:"VuePDF",props:{pdf:{},page:{default:1},scale:{default:1},rotation:{},fitParent:{type:Boolean},width:{},height:{},textLayer:{type:Boolean},imageResourcesPath:{},hideForms:{type:Boolean},annotationLayer:{type:Boolean},annotationsFilter:{},annotationsMap:{},watermarkText:{},watermarkOptions:{},highlightText:{},highlightOptions:{}},emits:["annotation","highlight","loaded"],setup(l,{expose:t,emit:c}){const s=l,d=ref(),Z=ref(),i=ref(!1);let o;const W=computed(()=>({viewport:void 0,document:void 0,page:void 0})),G=computed(()=>({annotationsMap:s.annotationsMap,annotationsFilter:s.annotationsFilter,imageResourcePath:s.imageResourcesPath,hideForms:s.hideForms})),u=computed(()=>({highlightText:s.highlightText,highlightOptions:s.highlightOptions}));function X(){return Object.assign({},{columns:4,rows:4,rotation:45,fontSize:18,color:"rgba(211, 210, 211, 0.4)"},s.watermarkOptions)}function z(y){if(!(typeof y=="number"&&y%90===0))return 0;const Y=y/90;return Y>4?z(y-360):Y<0?z(y+360):y}function R(y){let Y=s.scale;if(s.fitParent){const m=d.value.parentNode.clientWidth,D=y.getViewport({scale:1}).width;Y=m/D}else if(s.width){const m=y.getViewport({scale:1}).width;Y=s.width/m}else if(s.height){const m=y.getViewport({scale:1}).height;Y=s.height/m}return Y}function S(y=1){if(!s.watermarkText)return;const Y=k();if(!Y)return;const m=Y.getContext("2d");if(!m)return;const D=X(),H=s.watermarkText,V=D.columns,v=D.rows,A=V*v,Nl=D.rotation,fl=D.fontSize*y;m.font=`${fl}px Trebuchet MS`,m.fillStyle=D.color;for(let Xl=0;Xl{m.tagName==="CANVAS"&&(Y=m)}),Y}function L(y){var Y;let m;const D=k();D&&(D==null?void 0:D.getAttribute("role"))==="main"?m=D:(m=document.createElement("canvas"),m.style.display="block",m.setAttribute("dir","ltr"));const H=window.devicePixelRatio||1;return m.width=Math.floor(y.width*H),m.height=Math.floor(y.height*H),m.style.width=`${Math.floor(y.width)}px`,m.style.height=`${Math.floor(y.height)}px`,(Y=d.value)==null||Y.style.setProperty("--scale-factor",`${y.scale}`),Z.value.style.width=`${Math.floor(y.width)}px`,Z.value.style.height=`${Math.floor(y.height)}px`,Z.value.style.top="0",Z.value.style.left="0",i.value=!0,m}function x(){o&&o.cancel()}function j(y){var Y;(Y=toRaw(W.value.document))==null||Y.getPage(y).then(m=>{var D;x();const H=m.getViewport(),V={scale:R(m),rotation:z((s.rotation||0)+H.rotation)},v=m.getViewport(V),A=k(),Nl=L(v),fl=window.devicePixelRatio||1,Xl=fl!==1?[fl,0,0,fl,0,0]:void 0,Zt={canvasContext:Nl.getContext("2d"),viewport:v,annotationMode:s.hideForms?pdfExports.AnnotationMode.ENABLE:pdfExports.AnnotationMode.ENABLE_FORMS,transform:Xl};(Nl==null?void 0:Nl.getAttribute("role"))!=="main"?A&&((D=d.value)==null||D.replaceChild(Nl,A)):Nl.removeAttribute("role"),W.value.page=m,W.value.viewport=v,o=m.render(Zt),o.promise.then(()=>{i.value=!1,S(v.scale),c("loaded",W.value.viewport)}).catch(()=>{})})}function Q(y){y.promise.then(async Y=>{W.value.document=Y,j(s.page)})}watch(()=>s.pdf,y=>{y!==void 0&&Q(y)}),watch(()=>[s.scale,s.width,s.height,s.rotation,s.page,s.hideForms],()=>{j(s.page)}),onMounted(()=>{s.pdf!==void 0&&Q(s.pdf)});function J(){j(s.page)}function M(){x()}return t({reload:J,cancel:M}),(y,Y)=>(openBlock(),createElementBlock("div",{ref_key:"container",ref:d,style:{position:"relative",display:"block",overflow:"hidden"}},[Fl,y.annotationLayer?(openBlock(),createBlock(wl,mergeProps({key:0},{...W.value,...G.value},{onAnnotation:Y[0]||(Y[0]=m=>c("annotation",m))}),null,16)):createCommentVNode("",!0),y.textLayer?(openBlock(),createBlock(Ul,mergeProps({key:1},{...W.value,...u.value},{onHighlight:Y[1]||(Y[1]=m=>c("highlight",m))}),null,16)):createCommentVNode("",!0),createVNode(kl,normalizeProps(guardReactiveProps({...W.value})),null,16),withDirectives(createBaseVNode("div",{ref_key:"loadingLayer",ref:Z,style:{position:"absolute"}},[renderSlot(y.$slots,"default")],512),[[vShow,i.value]])],512))}}),Ol="data:application/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDIzIE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KIWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKX0oZ2xvYmFsVGhpcywoKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZT1bLChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Xb3JrZXJUYXNrPXQuV29ya2VyTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciByPWEoMiksaT1hKDMpLG49YSg0KSxzPWEoNiksbz1hKDcyKSxjPWEoNjYpLGw9YSgxMDMpLGg9YSgxMDQpLHU9YSgxMDUpO2NsYXNzIFdvcmtlclRhc2t7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWU7dGhpcy50ZXJtaW5hdGVkPSExO3RoaXMuX2NhcGFiaWxpdHk9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHl9Z2V0IGZpbmlzaGVkKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX1maW5pc2goKXt0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKX10ZXJtaW5hdGUoKXt0aGlzLnRlcm1pbmF0ZWQ9ITB9ZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKHRoaXMudGVybWluYXRlZCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkIil9fXQuV29ya2VyVGFzaz1Xb3JrZXJUYXNrO2NsYXNzIFdvcmtlck1lc3NhZ2VIYW5kbGVye3N0YXRpYyBzZXR1cChlLHQpe2xldCBhPSExO2Uub24oInRlc3QiLChmdW5jdGlvbih0KXtpZighYSl7YT0hMDtlLnNlbmQoInRlc3QiLHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KX19KSk7ZS5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsci5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpO2Uub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbihlKXtyZXR1cm4gV29ya2VyTWVzc2FnZUhhbmRsZXIuY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCl9KSl9c3RhdGljIGNyZWF0ZURvY3VtZW50SGFuZGxlcihlLHQpe2xldCBhLGw9ITEsZD1udWxsO2NvbnN0IGY9bmV3IFNldCxnPSgwLHIuZ2V0VmVyYm9zaXR5TGV2ZWwpKCkse2RvY0lkOnAsYXBpVmVyc2lvbjptfT1lLGI9IjMuNy4xMDciO2lmKG0hPT1iKXRocm93IG5ldyBFcnJvcihgVGhlIEFQSSB2ZXJzaW9uICIke219IiBkb2VzIG5vdCBtYXRjaCB0aGUgV29ya2VyIHZlcnNpb24gIiR7Yn0iLmApO2NvbnN0IHk9W107Zm9yKGNvbnN0IGUgaW5bXSl5LnB1c2goZSk7aWYoeS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgYEFycmF5LnByb3RvdHlwZWAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXM6ICIreS5qb2luKCIsICIpKyI7IHRodXMgYnJlYWtpbmcgZS5nLiBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBvZiBgQXJyYXlgcy4iKTtjb25zdCB3PXArIl93b3JrZXIiO2xldCBTPW5ldyBoLk1lc3NhZ2VIYW5kbGVyKHcscCx0KTtmdW5jdGlvbiBlbnN1cmVOb3RUZXJtaW5hdGVkKCl7aWYobCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWZ1bmN0aW9uIHN0YXJ0V29ya2VyVGFzayhlKXtmLmFkZChlKX1mdW5jdGlvbiBmaW5pc2hXb3JrZXJUYXNrKGUpe2UuZmluaXNoKCk7Zi5kZWxldGUoZSl9YXN5bmMgZnVuY3Rpb24gbG9hZERvY3VtZW50KGUpe2F3YWl0IGEuZW5zdXJlRG9jKCJjaGVja0hlYWRlciIpO2F3YWl0IGEuZW5zdXJlRG9jKCJwYXJzZVN0YXJ0WFJlZiIpO2F3YWl0IGEuZW5zdXJlRG9jKCJwYXJzZSIsW2VdKTthd2FpdCBhLmVuc3VyZURvYygiY2hlY2tGaXJzdFBhZ2UiLFtlXSk7YXdhaXQgYS5lbnN1cmVEb2MoImNoZWNrTGFzdFBhZ2UiLFtlXSk7Y29uc3QgdD1hd2FpdCBhLmVuc3VyZURvYygiaXNQdXJlWGZhIik7aWYodCl7Y29uc3QgZT1uZXcgV29ya2VyVGFzaygibG9hZFhmYUZvbnRzIik7c3RhcnRXb3JrZXJUYXNrKGUpO2F3YWl0IFByb21pc2UuYWxsKFthLmxvYWRYZmFGb250cyhTLGUpLmNhdGNoKChlPT57fSkpLnRoZW4oKCgpPT5maW5pc2hXb3JrZXJUYXNrKGUpKSksYS5sb2FkWGZhSW1hZ2VzKCldKX1jb25zdFtyLGldPWF3YWl0IFByb21pc2UuYWxsKFthLmVuc3VyZURvYygibnVtUGFnZXMiKSxhLmVuc3VyZURvYygiZmluZ2VycHJpbnRzIildKTtyZXR1cm57bnVtUGFnZXM6cixmaW5nZXJwcmludHM6aSxodG1sRm9yWGZhOnQ/YXdhaXQgYS5lbnN1cmVEb2MoImh0bWxGb3JYZmEiKTpudWxsfX1mdW5jdGlvbiBnZXRQZGZNYW5hZ2VyKHtkYXRhOmUscGFzc3dvcmQ6dCxkaXNhYmxlQXV0b0ZldGNoOmEscmFuZ2VDaHVua1NpemU6bixsZW5ndGg6byxkb2NCYXNlVXJsOmMsZW5hYmxlWGZhOmwsZXZhbHVhdG9yT3B0aW9uczpofSl7Y29uc3QgZj17c291cmNlOm51bGwsZGlzYWJsZUF1dG9GZXRjaDphLGRvY0Jhc2VVcmw6Yyxkb2NJZDpwLGVuYWJsZVhmYTpsLGV2YWx1YXRvck9wdGlvbnM6aCxoYW5kbGVyOlMsbGVuZ3RoOm8scGFzc3dvcmQ6dCxyYW5nZUNodW5rU2l6ZTpufSxnPW5ldyByLlByb21pc2VDYXBhYmlsaXR5O2xldCBtO2lmKGUpe3RyeXtmLnNvdXJjZT1lO209bmV3IHMuTG9jYWxQZGZNYW5hZ2VyKGYpO2cucmVzb2x2ZShtKX1jYXRjaChlKXtnLnJlamVjdChlKX1yZXR1cm4gZy5wcm9taXNlfWxldCBiLHk9W107dHJ5e2I9bmV3IHUuUERGV29ya2VyU3RyZWFtKFMpfWNhdGNoKGUpe2cucmVqZWN0KGUpO3JldHVybiBnLnByb21pc2V9Y29uc3Qgdz1iLmdldEZ1bGxSZWFkZXIoKTt3LmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe2lmKHcuaXNSYW5nZVN1cHBvcnRlZCl7Zi5zb3VyY2U9YjtmLmxlbmd0aD13LmNvbnRlbnRMZW5ndGg7Zi5kaXNhYmxlQXV0b0ZldGNofHw9dy5pc1N0cmVhbWluZ1N1cHBvcnRlZDttPW5ldyBzLk5ldHdvcmtQZGZNYW5hZ2VyKGYpO2Zvcihjb25zdCBlIG9mIHkpbS5zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpO3k9W107Zy5yZXNvbHZlKG0pO2Q9bnVsbH19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2cucmVqZWN0KGUpO2Q9bnVsbH0pKTtsZXQgeD0wO25ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2NvbnN0IHJlYWRDaHVuaz1mdW5jdGlvbih7dmFsdWU6ZSxkb25lOmF9KXt0cnl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2lmKGEpe218fGZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxpLmFycmF5QnVmZmVyc1RvQnl0ZXMpKHkpO28mJmUubGVuZ3RoIT09byYmKDAsci53YXJuKSgicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7dHJ5e2Yuc291cmNlPWU7bT1uZXcgcy5Mb2NhbFBkZk1hbmFnZXIoZik7Zy5yZXNvbHZlKG0pfWNhdGNoKGUpe2cucmVqZWN0KGUpfXk9W119KCk7ZD1udWxsO3JldHVybn14Kz1lLmJ5dGVMZW5ndGg7dy5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8Uy5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp4LHRvdGFsOk1hdGgubWF4KHgsdy5jb250ZW50TGVuZ3RofHwwKX0pO20/bS5zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpOnkucHVzaChlKTt3LnJlYWQoKS50aGVuKHJlYWRDaHVuayx0KX1jYXRjaChlKXt0KGUpfX07dy5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2cucmVqZWN0KGUpO2Q9bnVsbH0pKTtkPWZ1bmN0aW9uKGUpe2IuY2FuY2VsQWxsUmVxdWVzdHMoZSl9O3JldHVybiBnLnByb21pc2V9Uy5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbYS5lbnN1cmUoZSwicm90YXRlIiksYS5lbnN1cmUoZSwicmVmIiksYS5lbnN1cmUoZSwidXNlclVuaXQiKSxhLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihbZSx0LGEscl0pe3JldHVybntyb3RhdGU6ZSxyZWY6dCx1c2VyVW5pdDphLHZpZXc6cn19KSl9KSl9KSk7Uy5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24oZSl7Y29uc3QgdD1uLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiBhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKTtTLm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKTtTLm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSkpO1Mub24oIkdldFBhZ2VMYWJlbHMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSk7Uy5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKX0pKTtTLm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSk7Uy5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpO1Mub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSk7Uy5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpO1Mub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSk7Uy5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSk7Uy5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKHtwYWdlSW5kZXg6ZX0pe3JldHVybiBhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpO1Mub24oIkdldE91dGxpbmUiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pKTtTLm9uKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJvcHRpb25hbENvbnRlbnRDb25maWciKX0pKTtTLm9uKCJHZXRQZXJtaXNzaW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIil9KSk7Uy5vbigiR2V0TWV0YWRhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxhLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKTtTLm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIil9KSk7Uy5vbigiR2V0RGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKTtTLm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKHtwYWdlSW5kZXg6ZSxpbnRlbnQ6dH0pe3JldHVybiBhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24oYSl7Y29uc3Qgcj1uZXcgV29ya2VyVGFzayhgR2V0QW5ub3RhdGlvbnM6IHBhZ2UgJHtlfWApO3N0YXJ0V29ya2VyVGFzayhyKTtyZXR1cm4gYS5nZXRBbm5vdGF0aW9uc0RhdGEoUyxyLHQpLnRoZW4oKGU9PntmaW5pc2hXb3JrZXJUYXNrKHIpO3JldHVybiBlfSksKGU9PntmaW5pc2hXb3JrZXJUYXNrKHIpO3Rocm93IGV9KSl9KSl9KSk7Uy5vbigiR2V0RmllbGRPYmplY3RzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKX0pKTtTLm9uKCJIYXNKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVEb2MoImhhc0pTQWN0aW9ucyIpfSkpO1Mub24oIkdldENhbGN1bGF0aW9uT3JkZXJJZHMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVEb2MoImNhbGN1bGF0aW9uT3JkZXJJZHMiKX0pKTtTLm9uKCJTYXZlRG9jdW1lbnQiLChmdW5jdGlvbih7aXNQdXJlWGZhOmUsbnVtUGFnZXM6dCxhbm5vdGF0aW9uU3RvcmFnZTpzLGZpbGVuYW1lOm99KXtjb25zdCBsPVthLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxhLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksYS5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybVJlZiIpLGEuZW5zdXJlRG9jKCJ4cmVmIiksYS5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpXSxoPWU/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShzKTtpZihoKWZvcihjb25zdFtlLHRdb2YgaClsLnB1c2goYS5nZXRQYWdlKGUpLnRoZW4oKGE9Pntjb25zdCByPW5ldyBXb3JrZXJUYXNrKGBTYXZlIChlZGl0b3IpOiBwYWdlICR7ZX1gKTtyZXR1cm4gYS5zYXZlTmV3QW5ub3RhdGlvbnMoUyxyLHQpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhyKX0pKX0pKSk7aWYoZSlsLnB1c2goYS5zZXJpYWxpemVYZmFEYXRhKHMpKTtlbHNlIGZvcihsZXQgZT0wO2U8dDtlKyspbC5wdXNoKGEuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbih0KXtjb25zdCBhPW5ldyBXb3JrZXJUYXNrKGBTYXZlOiBwYWdlICR7ZX1gKTtyZXR1cm4gdC5zYXZlKFMsYSxzKS5maW5hbGx5KChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soYSl9KSl9KSkpO3JldHVybiBQcm9taXNlLmFsbChsKS50aGVuKChmdW5jdGlvbihbdCxhLGkscyxsLC4uLmhdKXtsZXQgdT1bXSxkPW51bGw7aWYoZSl7ZD1oWzBdO2lmKCFkKXJldHVybiB0LmJ5dGVzfWVsc2V7dT1oLmZsYXQoMik7aWYoMD09PXUubGVuZ3RoKXJldHVybiB0LmJ5dGVzfWNvbnN0IGY9aSYmYSBpbnN0YW5jZW9mIG4uRGljdCYmdS5zb21lKChlPT5lLm5lZWRBcHBlYXJhbmNlcykpLGc9YSBpbnN0YW5jZW9mIG4uRGljdCYmYS5nZXQoIlhGQSIpfHxudWxsO2xldCBwPW51bGwsbT0hMTtpZihBcnJheS5pc0FycmF5KGcpKXtmb3IobGV0IGU9MCx0PWcubGVuZ3RoO2U8dDtlKz0yKWlmKCJkYXRhc2V0cyI9PT1nW2VdKXtwPWdbZSsxXTttPSEwfW51bGw9PT1wJiYocD1zLmdldE5ld1RlbXBvcmFyeVJlZigpKX1lbHNlIGcmJigwLHIud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpO2xldCBiPU9iamVjdC5jcmVhdGUobnVsbCk7aWYocy50cmFpbGVyKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1zLnRyYWlsZXIuZ2V0KCJJbmZvIil8fG51bGw7dCBpbnN0YW5jZW9mIG4uRGljdCYmdC5mb3JFYWNoKCgodCxhKT0+eyJzdHJpbmciPT10eXBlb2YgYSYmKGVbdF09KDAsci5zdHJpbmdUb1BERlN0cmluZykoYSkpfSkpO2I9e3Jvb3RSZWY6cy50cmFpbGVyLmdldFJhdygiUm9vdCIpfHxudWxsLGVuY3J5cHRSZWY6cy50cmFpbGVyLmdldFJhdygiRW5jcnlwdCIpfHxudWxsLG5ld1JlZjpzLmdldE5ld1RlbXBvcmFyeVJlZigpLGluZm9SZWY6cy50cmFpbGVyLmdldFJhdygiSW5mbyIpfHxudWxsLGluZm86ZSxmaWxlSWRzOnMudHJhaWxlci5nZXQoIklEIil8fG51bGwsc3RhcnRYUmVmOnMubGFzdFhSZWZTdHJlYW1Qb3M/P2wsZmlsZW5hbWU6b319dHJ5e3JldHVybigwLGMuaW5jcmVtZW50YWxVcGRhdGUpKHtvcmlnaW5hbERhdGE6dC5ieXRlcyx4cmVmSW5mbzpiLG5ld1JlZnM6dSx4cmVmOnMsaGFzWGZhOiEhZyx4ZmFEYXRhc2V0c1JlZjpwLGhhc1hmYURhdGFzZXRzRW50cnk6bSxuZWVkQXBwZWFyYW5jZXM6ZixhY3JvRm9ybVJlZjppLGFjcm9Gb3JtOmEseGZhRGF0YTpkfSl9ZmluYWxseXtzLnJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl9fSkpfSkpO1Mub24oIkdldE9wZXJhdG9yTGlzdCIsKGZ1bmN0aW9uKGUsdCl7Y29uc3QgaT1lLnBhZ2VJbmRleDthLmdldFBhZ2UoaSkudGhlbigoZnVuY3Rpb24oYSl7Y29uc3Qgbj1uZXcgV29ya2VyVGFzayhgR2V0T3BlcmF0b3JMaXN0OiBwYWdlICR7aX1gKTtzdGFydFdvcmtlclRhc2sobik7Y29uc3Qgcz1nPj1yLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDthLmdldE9wZXJhdG9yTGlzdCh7aGFuZGxlcjpTLHNpbms6dCx0YXNrOm4saW50ZW50OmUuaW50ZW50LGNhY2hlS2V5OmUuY2FjaGVLZXksYW5ub3RhdGlvblN0b3JhZ2U6ZS5hbm5vdGF0aW9uU3RvcmFnZX0pLnRoZW4oKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2sobik7cyYmKDAsci5pbmZvKShgcGFnZT0ke2krMX0gLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9JHtEYXRlLm5vdygpLXN9bXMsIGxlbj0ke2UubGVuZ3RofWApO3QuY2xvc2UoKX0pLChmdW5jdGlvbihlKXtmaW5pc2hXb3JrZXJUYXNrKG4pO24udGVybWluYXRlZHx8dC5lcnJvcihlKX0pKX0pKX0pKTtTLm9uKCJHZXRUZXh0Q29udGVudCIsKGZ1bmN0aW9uKGUsdCl7Y29uc3R7cGFnZUluZGV4OmksaW5jbHVkZU1hcmtlZENvbnRlbnQ6bixkaXNhYmxlTm9ybWFsaXphdGlvbjpzfT1lO2EuZ2V0UGFnZShpKS50aGVuKChmdW5jdGlvbihlKXtjb25zdCBhPW5ldyBXb3JrZXJUYXNrKCJHZXRUZXh0Q29udGVudDogcGFnZSAiK2kpO3N0YXJ0V29ya2VyVGFzayhhKTtjb25zdCBvPWc+PXIuVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO2UuZXh0cmFjdFRleHRDb250ZW50KHtoYW5kbGVyOlMsdGFzazphLHNpbms6dCxpbmNsdWRlTWFya2VkQ29udGVudDpuLGRpc2FibGVOb3JtYWxpemF0aW9uOnN9KS50aGVuKChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soYSk7byYmKDAsci5pbmZvKShgcGFnZT0ke2krMX0gLSBnZXRUZXh0Q29udGVudDogdGltZT1gKyhEYXRlLm5vdygpLW8pKyJtcyIpO3QuY2xvc2UoKX0pLChmdW5jdGlvbihlKXtmaW5pc2hXb3JrZXJUYXNrKGEpO2EudGVybWluYXRlZHx8dC5lcnJvcihlKX0pKX0pKX0pKTtTLm9uKCJHZXRTdHJ1Y3RUcmVlIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZ2V0UGFnZShlLnBhZ2VJbmRleCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlKGUsImdldFN0cnVjdFRyZWUiKX0pKX0pKTtTLm9uKCJGb250RmFsbGJhY2siLChmdW5jdGlvbihlKXtyZXR1cm4gYS5mb250RmFsbGJhY2soZS5pZCxTKX0pKTtTLm9uKCJDbGVhbnVwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW51cCghMCl9KSk7Uy5vbigiVGVybWluYXRlIiwoZnVuY3Rpb24oZSl7bD0hMDtjb25zdCB0PVtdO2lmKGEpe2EudGVybWluYXRlKG5ldyByLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO2NvbnN0IGU9YS5jbGVhbnVwKCk7dC5wdXNoKGUpO2E9bnVsbH1lbHNlKDAsby5jbGVhckdsb2JhbENhY2hlcykoKTtkJiZkKG5ldyByLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO2Zvcihjb25zdCBlIG9mIGYpe3QucHVzaChlLmZpbmlzaGVkKTtlLnRlcm1pbmF0ZSgpfXJldHVybiBQcm9taXNlLmFsbCh0KS50aGVuKChmdW5jdGlvbigpe1MuZGVzdHJveSgpO1M9bnVsbH0pKX0pKTtTLm9uKCJSZWFkeSIsKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbiBzZXR1cERvYyhlKXtmdW5jdGlvbiBvblN1Y2Nlc3MoZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO1Muc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gb25GYWlsdXJlKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtpZihlIGluc3RhbmNlb2Ygci5QYXNzd29yZEV4Y2VwdGlvbil7Y29uc3QgdD1uZXcgV29ya2VyVGFzayhgUGFzc3dvcmRFeGNlcHRpb246IHJlc3BvbnNlICR7ZS5jb2RlfWApO3N0YXJ0V29ya2VyVGFzayh0KTtTLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IixlKS50aGVuKChmdW5jdGlvbih7cGFzc3dvcmQ6ZX0pe2ZpbmlzaFdvcmtlclRhc2sodCk7YS51cGRhdGVQYXNzd29yZChlKTtwZGZNYW5hZ2VyUmVhZHkoKX0pKS5jYXRjaCgoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKHQpO1Muc2VuZCgiRG9jRXhjZXB0aW9uIixlKX0pKX1lbHNlIGUgaW5zdGFuY2VvZiByLkludmFsaWRQREZFeGNlcHRpb258fGUgaW5zdGFuY2VvZiByLk1pc3NpbmdQREZFeGNlcHRpb258fGUgaW5zdGFuY2VvZiByLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIHIuVW5rbm93bkVycm9yRXhjZXB0aW9uP1Muc2VuZCgiRG9jRXhjZXB0aW9uIixlKTpTLnNlbmQoIkRvY0V4Y2VwdGlvbiIsbmV3IHIuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpKX1mdW5jdGlvbiBwZGZNYW5hZ2VyUmVhZHkoKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7bG9hZERvY3VtZW50KCExKS50aGVuKG9uU3VjY2VzcywoZnVuY3Rpb24oZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2UgaW5zdGFuY2VvZiBpLlhSZWZQYXJzZUV4Y2VwdGlvbj9hLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbigpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtsb2FkRG9jdW1lbnQoITApLnRoZW4ob25TdWNjZXNzLG9uRmFpbHVyZSl9KSk6b25GYWlsdXJlKGUpfSkpfWVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtnZXRQZGZNYW5hZ2VyKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGwpe2UudGVybWluYXRlKG5ldyByLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3Rocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIil9YT1lO2EucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbigoZT0+e1Muc2VuZCgiRGF0YUxvYWRlZCIse2xlbmd0aDplLmJ5dGVzLmJ5dGVMZW5ndGh9KX0pKX0pKS50aGVuKHBkZk1hbmFnZXJSZWFkeSxvbkZhaWx1cmUpfShlKTtlPW51bGx9KSk7cmV0dXJuIHd9c3RhdGljIGluaXRpYWxpemVGcm9tUG9ydChlKXtjb25zdCB0PW5ldyBoLk1lc3NhZ2VIYW5kbGVyKCJ3b3JrZXIiLCJtYWluIixlKTtXb3JrZXJNZXNzYWdlSGFuZGxlci5zZXR1cCh0LGUpO3Quc2VuZCgicmVhZHkiLG51bGwpfX10Lldvcmtlck1lc3NhZ2VIYW5kbGVyPVdvcmtlck1lc3NhZ2VIYW5kbGVyOyJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhbC5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZmdW5jdGlvbiBpc01lc3NhZ2VQb3J0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnBvc3RNZXNzYWdlJiYib25tZXNzYWdlImluIGV9KHNlbGYpJiZXb3JrZXJNZXNzYWdlSGFuZGxlci5pbml0aWFsaXplRnJvbVBvcnQoc2VsZil9LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVmVyYm9zaXR5TGV2ZWw9dC5VdGlsPXQuVW5rbm93bkVycm9yRXhjZXB0aW9uPXQuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5SZW5kZXJpbmdJbnRlbnRGbGFnPXQuUHJvbWlzZUNhcGFiaWxpdHk9dC5QZXJtaXNzaW9uRmxhZz10LlBhc3N3b3JkUmVzcG9uc2VzPXQuUGFzc3dvcmRFeGNlcHRpb249dC5QYWdlQWN0aW9uRXZlbnRUeXBlPXQuT1BTPXQuTWlzc2luZ1BERkV4Y2VwdGlvbj10Lk1BWF9JTUFHRV9TSVpFX1RPX0NBQ0hFPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRmVhdHVyZVRlc3Q9dC5GT05UX0lERU5USVRZX01BVFJJWD10LkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXQuQ01hcENvbXByZXNzaW9uVHlwZT10LkJhc2VFeGNlcHRpb249dC5CQVNFTElORV9GQUNUT1I9dC5Bbm5vdGF0aW9uVHlwZT10LkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZT10LkFubm90YXRpb25SZXZpZXdTdGF0ZT10LkFubm90YXRpb25SZXBseVR5cGU9dC5Bbm5vdGF0aW9uTW9kZT10LkFubm90YXRpb25NYXJrZWRTdGF0ZT10LkFubm90YXRpb25GbGFnPXQuQW5ub3RhdGlvbkZpZWxkRmxhZz10LkFubm90YXRpb25FZGl0b3JUeXBlPXQuQW5ub3RhdGlvbkVkaXRvclByZWZpeD10LkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT10LkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9dC5BYm9ydEV4Y2VwdGlvbj12b2lkIDA7dC5hc3NlcnQ9ZnVuY3Rpb24gYXNzZXJ0KGUsdCl7ZXx8dW5yZWFjaGFibGUodCl9O3QuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbiBieXRlc1RvU3RyaW5nKGUpeyJvYmplY3QiPT10eXBlb2YgZSYmdm9pZCAwIT09ZT8ubGVuZ3RofHx1bnJlYWNoYWJsZSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpO2NvbnN0IHQ9ZS5sZW5ndGgsYT04MTkyO2lmKHQ8YSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpO2NvbnN0IHI9W107Zm9yKGxldCBpPTA7aTx0O2krPWEpe2NvbnN0IG49TWF0aC5taW4oaSthLHQpLHM9ZS5zdWJhcnJheShpLG4pO3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscykpfXJldHVybiByLmpvaW4oIiIpfTt0LmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybChlLHQ9bnVsbCxhPW51bGwpe2lmKCFlKXJldHVybiBudWxsO3RyeXtpZihhJiYic3RyaW5nIj09dHlwZW9mIGUpe2lmKGEuYWRkRGVmYXVsdFByb3RvY29sJiZlLnN0YXJ0c1dpdGgoInd3dy4iKSl7Y29uc3QgdD1lLm1hdGNoKC9cLi9nKTt0Py5sZW5ndGg+PTImJihlPWBodHRwOi8vJHtlfWApfWlmKGEudHJ5Q29udmVydEVuY29kaW5nKXRyeXtlPXN0cmluZ1RvVVRGOFN0cmluZyhlKX1jYXRjaChlKXt9fWNvbnN0IHI9dD9uZXcgVVJMKGUsdCk6bmV3IFVSTChlKTtpZihmdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKGUpe3N3aXRjaChlPy5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOmNhc2UiZnRwOiI6Y2FzZSJtYWlsdG86IjpjYXNlInRlbDoiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fShyKSlyZXR1cm4gcn1jYXRjaChlKXt9cmV0dXJuIG51bGx9O3QuZ2V0TW9kaWZpY2F0aW9uRGF0ZT1mdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKGU9bmV3IERhdGUpe3JldHVybltlLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSwoZS5nZXRVVENNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKV0uam9pbigiIil9O3QuZ2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24gZ2V0VmVyYm9zaXR5TGV2ZWwoKXtyZXR1cm4gcn07dC5pbmZvPWZ1bmN0aW9uIGluZm8oZSl7cj49YS5JTkZPUyYmY29uc29sZS5sb2coYEluZm86ICR7ZX1gKX07dC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZ2b2lkIDAhPT1lPy5ieXRlTGVuZ3RofTt0LmlzQXJyYXlFcXVhbD1mdW5jdGlvbiBpc0FycmF5RXF1YWwoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKylpZihlW2FdIT09dFthXSlyZXR1cm4hMTtyZXR1cm4hMH07dC5ub3JtYWxpemVVbmljb2RlPWZ1bmN0aW9uIG5vcm1hbGl6ZVVuaWNvZGUoZSl7aWYoIW8pe289LyhbXHUwMGEwXHUwMGI1XHUwMzdlXHUwZWIzXHUyMDAwLVx1MjAwYVx1MjAyZlx1MjEyNlx1ZmIwMC1cdWZiMDRcdWZiMDZcdWZiMjAtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MC1cdWZiNDFcdWZiNDMtXHVmYjQ0XHVmYjQ2LVx1ZmJhMVx1ZmJhNC1cdWZiYTlcdWZiYWUtXHVmYmIxXHVmYmQzLVx1ZmJkY1x1ZmJkZS1cdWZiZTdcdWZiZWEtXHVmYmY4XHVmYmZjLVx1ZmJmZFx1ZmMwMC1cdWZjNWRcdWZjNjQtXHVmY2YxXHVmY2Y1LVx1ZmQzZFx1ZmQ4OFx1ZmRmNFx1ZmRmYS1cdWZkZmJcdWZlNzFcdWZlNzdcdWZlNzlcdWZlN2JcdWZlN2RdKyl8KFx1ZmIwNSspL2d1O2M9bmV3IE1hcChbWyLvrIUiLCLFv3QiXV0pfXJldHVybiBlLnJlcGxhY2VBbGwobywoKGUsdCxhKT0+dD90Lm5vcm1hbGl6ZSgiTkZLQyIpOmMuZ2V0KGEpKSl9O3Qub2JqZWN0RnJvbU1hcD1mdW5jdGlvbiBvYmplY3RGcm9tTWFwKGUpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbYSxyXW9mIGUpdFthXT1yO3JldHVybiB0fTt0Lm9iamVjdFNpemU9ZnVuY3Rpb24gb2JqZWN0U2l6ZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RofTt0LnNldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uIHNldFZlcmJvc2l0eUxldmVsKGUpe051bWJlci5pc0ludGVnZXIoZSkmJihyPWUpfTt0LnNoYWRvdz1zaGFkb3c7dC5zdHJpbmczMj1mdW5jdGlvbiBzdHJpbmczMihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlKX07dC5zdHJpbmdUb0J5dGVzPXN0cmluZ1RvQnl0ZXM7dC5zdHJpbmdUb1BERlN0cmluZz1mdW5jdGlvbiBzdHJpbmdUb1BERlN0cmluZyhlKXtpZihlWzBdPj0iw68iKXtsZXQgdDsiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0/dD0idXRmLTE2YmUiOiLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXT90PSJ1dGYtMTZsZSI6IsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKHQ9InV0Zi04Iik7aWYodCl0cnl7Y29uc3QgYT1uZXcgVGV4dERlY29kZXIodCx7ZmF0YWw6ITB9KSxyPXN0cmluZ1RvQnl0ZXMoZSk7cmV0dXJuIGEuZGVjb2RlKHIpfWNhdGNoKGUpe3dhcm4oYHN0cmluZ1RvUERGU3RyaW5nOiAiJHtlfSIuYCl9fWNvbnN0IHQ9W107Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPXNbZS5jaGFyQ29kZUF0KGEpXTt0LnB1c2gocj9TdHJpbmcuZnJvbUNoYXJDb2RlKHIpOmUuY2hhckF0KGEpKX1yZXR1cm4gdC5qb2luKCIiKX07dC5zdHJpbmdUb1VURjhTdHJpbmc9c3RyaW5nVG9VVEY4U3RyaW5nO3QudW5yZWFjaGFibGU9dW5yZWFjaGFibGU7dC51dGY4U3RyaW5nVG9TdHJpbmc9ZnVuY3Rpb24gdXRmOFN0cmluZ1RvU3RyaW5nKGUpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpfTt0Lndhcm49d2Fybjt0LklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdO3QuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXTt0Lk1BWF9JTUFHRV9TSVpFX1RPX0NBQ0hFPTFlNzt0LkxJTkVfRkFDVE9SPTEuMzU7dC5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNTt0LkJBU0VMSU5FX0ZBQ1RPUj0uMjU5MjU5MjU5MjU5MjU5MjQ7dC5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxTQVZFOjgsQU5OT1RBVElPTlNfRk9STVM6MTYsQU5OT1RBVElPTlNfU1RPUkFHRTozMixBTk5PVEFUSU9OU19ESVNBQkxFOjY0LE9QTElTVDoyNTZ9O3QuQW5ub3RhdGlvbk1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRk9STVM6MixFTkFCTEVfU1RPUkFHRTozfTt0LkFubm90YXRpb25FZGl0b3JQcmVmaXg9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iO3QuQW5ub3RhdGlvbkVkaXRvclR5cGU9e0RJU0FCTEU6LTEsTk9ORTowLEZSRUVURVhUOjMsSU5LOjE1fTt0LkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXtGUkVFVEVYVF9TSVpFOjEsRlJFRVRFWFRfQ09MT1I6MixGUkVFVEVYVF9PUEFDSVRZOjMsSU5LX0NPTE9SOjExLElOS19USElDS05FU1M6MTIsSU5LX09QQUNJVFk6MTN9O3QuUGVybWlzc2lvbkZsYWc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH07dC5UZXh0UmVuZGVyaW5nTW9kZT17RklMTDowLFNUUk9LRToxLEZJTExfU1RST0tFOjIsSU5WSVNJQkxFOjMsRklMTF9BRERfVE9fUEFUSDo0LFNUUk9LRV9BRERfVE9fUEFUSDo1LEZJTExfU1RST0tFX0FERF9UT19QQVRIOjYsQUREX1RPX1BBVEg6NyxGSUxMX1NUUk9LRV9NQVNLOjMsQUREX1RPX1BBVEhfRkxBRzo0fTt0LkltYWdlS2luZD17R1JBWVNDQUxFXzFCUFA6MSxSR0JfMjRCUFA6MixSR0JBXzMyQlBQOjN9O3QuQW5ub3RhdGlvblR5cGU9e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fTt0LkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZT17TUFSS0VEOiJNYXJrZWQiLFJFVklFVzoiUmV2aWV3In07dC5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9e01BUktFRDoiTWFya2VkIixVTk1BUktFRDoiVW5tYXJrZWQifTt0LkFubm90YXRpb25SZXZpZXdTdGF0ZT17QUNDRVBURUQ6IkFjY2VwdGVkIixSRUpFQ1RFRDoiUmVqZWN0ZWQiLENBTkNFTExFRDoiQ2FuY2VsbGVkIixDT01QTEVURUQ6IkNvbXBsZXRlZCIsTk9ORToiTm9uZSJ9O3QuQW5ub3RhdGlvblJlcGx5VHlwZT17R1JPVVA6Ikdyb3VwIixSRVBMWToiUiJ9O3QuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9O3QuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH07dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fTt0LkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9O3QuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9O3QuUGFnZUFjdGlvbkV2ZW50VHlwZT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9O2NvbnN0IGE9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07dC5WZXJib3NpdHlMZXZlbD1hO3QuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfTt0Lk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfTt0LlBhc3N3b3JkUmVzcG9uc2VzPXtORUVEX1BBU1NXT1JEOjEsSU5DT1JSRUNUX1BBU1NXT1JEOjJ9O2xldCByPWEuV0FSTklOR1M7ZnVuY3Rpb24gd2FybihlKXtyPj1hLldBUk5JTkdTJiZjb25zb2xlLmxvZyhgV2FybmluZzogJHtlfWApfWZ1bmN0aW9uIHVucmVhY2hhYmxlKGUpe3Rocm93IG5ldyBFcnJvcihlKX1mdW5jdGlvbiBzaGFkb3coZSx0LGEscj0hMSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6YSxlbnVtZXJhYmxlOiFyLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pO3JldHVybiBhfWNvbnN0IGk9ZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbkNsb3N1cmUoKXtmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKGUsdCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VFeGNlcHRpb24mJnVucmVhY2hhYmxlKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLiIpO3RoaXMubWVzc2FnZT1lO3RoaXMubmFtZT10fUJhc2VFeGNlcHRpb24ucHJvdG90eXBlPW5ldyBFcnJvcjtCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yPUJhc2VFeGNlcHRpb247cmV0dXJuIEJhc2VFeGNlcHRpb259KCk7dC5CYXNlRXhjZXB0aW9uPWk7dC5QYXNzd29yZEV4Y2VwdGlvbj1jbGFzcyBQYXNzd29yZEV4Y2VwdGlvbiBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJQYXNzd29yZEV4Y2VwdGlvbiIpO3RoaXMuY29kZT10fX07dC5Vbmtub3duRXJyb3JFeGNlcHRpb249Y2xhc3MgVW5rbm93bkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpO3RoaXMuZGV0YWlscz10fX07dC5JbnZhbGlkUERGRXhjZXB0aW9uPWNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkludmFsaWRQREZFeGNlcHRpb24iKX19O3QuTWlzc2luZ1BERkV4Y2VwdGlvbj1jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJNaXNzaW5nUERGRXhjZXB0aW9uIil9fTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1jbGFzcyBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIik7dGhpcy5zdGF0dXM9dH19O3QuRm9ybWF0RXJyb3I9Y2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkZvcm1hdEVycm9yIil9fTt0LkFib3J0RXhjZXB0aW9uPWNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgaXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJBYm9ydEV4Y2VwdGlvbiIpfX07ZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhlKXsic3RyaW5nIiE9dHlwZW9mIGUmJnVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Y29uc3QgdD1lLmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDsrK3IpYVtyXT0yNTUmZS5jaGFyQ29kZUF0KHIpO3JldHVybiBhfXQuRmVhdHVyZVRlc3Q9Y2xhc3MgRmVhdHVyZVRlc3R7c3RhdGljIGdldCBpc0xpdHRsZUVuZGlhbigpe3JldHVybiBzaGFkb3codGhpcywiaXNMaXR0bGVFbmRpYW4iLGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSg0KTtlWzBdPTE7cmV0dXJuIDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXX0oKSl9c3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCl7dHJ5e25ldyBGdW5jdGlvbigiIik7cmV0dXJuITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpKX1zdGF0aWMgZ2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfXN0YXRpYyBnZXQgcGxhdGZvcm0oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcj9zaGFkb3codGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOnNoYWRvdyh0aGlzLCJwbGF0Zm9ybSIse2lzV2luOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiV2luIiksaXNNYWM6bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJNYWMiKX0pfX07Y29uc3Qgbj1bLi4uQXJyYXkoMjU2KS5rZXlzKCldLm1hcCgoZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKSk7Y2xhc3MgVXRpbHtzdGF0aWMgbWFrZUhleENvbG9yKGUsdCxhKXtyZXR1cm5gIyR7bltlXX0ke25bdF19JHtuW2FdfWB9c3RhdGljIHNjYWxlTWluTWF4KGUsdCl7bGV0IGE7aWYoZVswXSl7aWYoZVswXTwwKXthPXRbMF07dFswXT10WzFdO3RbMV09YX10WzBdKj1lWzBdO3RbMV0qPWVbMF07aWYoZVszXTwwKXthPXRbMl07dFsyXT10WzNdO3RbM109YX10WzJdKj1lWzNdO3RbM10qPWVbM119ZWxzZXthPXRbMF07dFswXT10WzJdO3RbMl09YTthPXRbMV07dFsxXT10WzNdO3RbM109YTtpZihlWzFdPDApe2E9dFsyXTt0WzJdPXRbM107dFszXT1hfXRbMl0qPWVbMV07dFszXSo9ZVsxXTtpZihlWzJdPDApe2E9dFswXTt0WzBdPXRbMV07dFsxXT1hfXRbMF0qPWVbMl07dFsxXSo9ZVsyXX10WzBdKz1lWzRdO3RbMV0rPWVbNF07dFsyXSs9ZVs1XTt0WzNdKz1lWzVdfXN0YXRpYyB0cmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zdGF0aWMgYXBwbHlUcmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMV0qdFsyXSt0WzRdLGVbMF0qdFsxXStlWzFdKnRbM10rdFs1XV19c3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShlLHQpe2NvbnN0IGE9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bKGVbMF0qdFszXS1lWzFdKnRbMl0rdFsyXSp0WzVdLXRbNF0qdFszXSkvYSwoLWVbMF0qdFsxXStlWzFdKnRbMF0rdFs0XSp0WzFdLXRbNV0qdFswXSkvYV19c3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUsdCl7Y29uc3QgYT1VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCkscj1VdGlsLmFwcGx5VHJhbnNmb3JtKGUuc2xpY2UoMiw0KSx0KSxpPVV0aWwuYXBwbHlUcmFuc2Zvcm0oW2VbMF0sZVszXV0sdCksbj1VdGlsLmFwcGx5VHJhbnNmb3JtKFtlWzJdLGVbMV1dLHQpO3JldHVybltNYXRoLm1pbihhWzBdLHJbMF0saVswXSxuWzBdKSxNYXRoLm1pbihhWzFdLHJbMV0saVsxXSxuWzFdKSxNYXRoLm1heChhWzBdLHJbMF0saVswXSxuWzBdKSxNYXRoLm1heChhWzFdLHJbMV0saVsxXSxuWzFdKV19c3RhdGljIGludmVyc2VUcmFuc2Zvcm0oZSl7Y29uc3QgdD1lWzBdKmVbM10tZVsxXSplWzJdO3JldHVybltlWzNdL3QsLWVbMV0vdCwtZVsyXS90LGVbMF0vdCwoZVsyXSplWzVdLWVbNF0qZVszXSkvdCwoZVs0XSplWzFdLWVbNV0qZVswXSkvdF19c3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpe2NvbnN0IHQ9W2VbMF0sZVsyXSxlWzFdLGVbM11dLGE9ZVswXSp0WzBdK2VbMV0qdFsyXSxyPWVbMF0qdFsxXStlWzFdKnRbM10saT1lWzJdKnRbMF0rZVszXSp0WzJdLG49ZVsyXSp0WzFdK2VbM10qdFszXSxzPShhK24pLzIsbz1NYXRoLnNxcnQoKGErbikqKjItNCooYSpuLWkqcikpLzIsYz1zK298fDEsbD1zLW98fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQobCldfXN0YXRpYyBub3JtYWxpemVSZWN0KGUpe2NvbnN0IHQ9ZS5zbGljZSgwKTtpZihlWzBdPmVbMl0pe3RbMF09ZVsyXTt0WzJdPWVbMF19aWYoZVsxXT5lWzNdKXt0WzFdPWVbM107dFszXT1lWzFdfXJldHVybiB0fXN0YXRpYyBpbnRlcnNlY3QoZSx0KXtjb25zdCBhPU1hdGgubWF4KE1hdGgubWluKGVbMF0sZVsyXSksTWF0aC5taW4odFswXSx0WzJdKSkscj1NYXRoLm1pbihNYXRoLm1heChlWzBdLGVbMl0pLE1hdGgubWF4KHRbMF0sdFsyXSkpO2lmKGE+cilyZXR1cm4gbnVsbDtjb25zdCBpPU1hdGgubWF4KE1hdGgubWluKGVbMV0sZVszXSksTWF0aC5taW4odFsxXSx0WzNdKSksbj1NYXRoLm1pbihNYXRoLm1heChlWzFdLGVbM10pLE1hdGgubWF4KHRbMV0sdFszXSkpO3JldHVybiBpPm4/bnVsbDpbYSxpLHIsbl19c3RhdGljIGJlemllckJvdW5kaW5nQm94KGUsdCxhLHIsaSxuLHMsbyl7Y29uc3QgYz1bXSxsPVtbXSxbXV07bGV0IGgsdSxkLGYsZyxwLG0sYjtmb3IobGV0IGw9MDtsPDI7KytsKXtpZigwPT09bCl7dT02KmUtMTIqYSs2Kmk7aD0tMyplKzkqYS05KmkrMypzO2Q9MyphLTMqZX1lbHNle3U9Nip0LTEyKnIrNipuO2g9LTMqdCs5KnItOSpuKzMqbztkPTMqci0zKnR9aWYoTWF0aC5hYnMoaCk8MWUtMTIpe2lmKE1hdGguYWJzKHUpPDFlLTEyKWNvbnRpbnVlO2Y9LWQvdTswPGYmJmY8MSYmYy5wdXNoKGYpfWVsc2V7bT11KnUtNCpkKmg7Yj1NYXRoLnNxcnQobSk7aWYoIShtPDApKXtnPSgtdStiKS8oMipoKTswPGcmJmc8MSYmYy5wdXNoKGcpO3A9KC11LWIpLygyKmgpOzA8cCYmcDwxJiZjLnB1c2gocCl9fX1sZXQgeSx3PWMubGVuZ3RoO2NvbnN0IFM9dztmb3IoO3ctLTspe2Y9Y1t3XTt5PTEtZjtsWzBdW3ddPXkqeSp5KmUrMyp5KnkqZiphKzMqeSpmKmYqaStmKmYqZipzO2xbMV1bd109eSp5KnkqdCszKnkqeSpmKnIrMyp5KmYqZipuK2YqZipmKm99bFswXVtTXT1lO2xbMV1bU109dDtsWzBdW1MrMV09cztsWzFdW1MrMV09bztsWzBdLmxlbmd0aD1sWzFdLmxlbmd0aD1TKzI7cmV0dXJuW01hdGgubWluKC4uLmxbMF0pLE1hdGgubWluKC4uLmxbMV0pLE1hdGgubWF4KC4uLmxbMF0pLE1hdGgubWF4KC4uLmxbMV0pXX19dC5VdGlsPVV0aWw7Y29uc3Qgcz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX10LlByb21pc2VDYXBhYmlsaXR5PWNsYXNzIFByb21pc2VDYXBhYmlsaXR5eyNlPSExO2NvbnN0cnVjdG9yKCl7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKCgoZSx0KT0+e3RoaXMucmVzb2x2ZT10PT57dGhpcy4jZT0hMDtlKHQpfTt0aGlzLnJlamVjdD1lPT57dGhpcy4jZT0hMDt0KGUpfX0pKX1nZXQgc2V0dGxlZCgpe3JldHVybiB0aGlzLiNlfX07bGV0IG89bnVsbCxjPW51bGx9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj12b2lkIDA7dC5hcnJheUJ1ZmZlcnNUb0J5dGVzPWZ1bmN0aW9uIGFycmF5QnVmZmVyc1RvQnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KGVbMF0pO2xldCBhPTA7Zm9yKGxldCByPTA7cjx0O3IrKylhKz1lW3JdLmJ5dGVMZW5ndGg7Y29uc3Qgcj1uZXcgVWludDhBcnJheShhKTtsZXQgaT0wO2ZvcihsZXQgYT0wO2E8dDthKyspe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZVthXSk7ci5zZXQodCxpKTtpKz10LmJ5dGVMZW5ndGh9cmV0dXJuIHJ9O3QuY29sbGVjdEFjdGlvbnM9ZnVuY3Rpb24gY29sbGVjdEFjdGlvbnMoZSx0LGEpe2NvbnN0IG49T2JqZWN0LmNyZWF0ZShudWxsKSxzPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkFBIixzdG9wV2hlbkZvdW5kOiExfSk7aWYocylmb3IobGV0IHQ9cy5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgcj1zW3RdO2lmKHIgaW5zdGFuY2VvZiBpLkRpY3QpZm9yKGNvbnN0IHQgb2Ygci5nZXRLZXlzKCkpe2NvbnN0IHM9YVt0XTtpZighcyljb250aW51ZTtjb25zdCBvPVtdO19jb2xsZWN0SlMoci5nZXRSYXcodCksZSxvLG5ldyBpLlJlZlNldCk7by5sZW5ndGg+MCYmKG5bc109byl9fWlmKHQuaGFzKCJBIikpe2NvbnN0IGE9W107X2NvbGxlY3RKUyh0LmdldCgiQSIpLGUsYSxuZXcgaS5SZWZTZXQpO2EubGVuZ3RoPjAmJihuLkFjdGlvbj1hKX1yZXR1cm4oMCxyLm9iamVjdFNpemUpKG4pPjA/bjpudWxsfTt0LmVuY29kZVRvWG1sU3RyaW5nPWZ1bmN0aW9uIGVuY29kZVRvWG1sU3RyaW5nKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9ZS5jb2RlUG9pbnRBdChyKTtpZigzMjw9aSYmaTw9MTI2KXtjb25zdCBuPW9baV07aWYobil7YTxyJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxyKSk7dC5wdXNoKG4pO2E9cisxfX1lbHNle2E8ciYmdC5wdXNoKGUuc3Vic3RyaW5nKGEscikpO3QucHVzaChgJiN4JHtpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfTtgKTtpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJnIrKzthPXIrMX19aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2E8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhhLGUubGVuZ3RoKSk7cmV0dXJuIHQuam9pbigiIil9O3QuZXNjYXBlUERGTmFtZT1mdW5jdGlvbiBlc2NhcGVQREZOYW1lKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KHIpO2lmKGk8MzN8fGk+MTI2fHwzNT09PWl8fDQwPT09aXx8NDE9PT1pfHw2MD09PWl8fDYyPT09aXx8OTE9PT1pfHw5Mz09PWl8fDEyMz09PWl8fDEyNT09PWl8fDQ3PT09aXx8Mzc9PT1pKXthPHImJnQucHVzaChlLnN1YnN0cmluZyhhLHIpKTt0LnB1c2goYCMke2kudG9TdHJpbmcoMTYpfWApO2E9cisxfX1pZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7YTxlLmxlbmd0aCYmdC5wdXNoKGUuc3Vic3RyaW5nKGEsZS5sZW5ndGgpKTtyZXR1cm4gdC5qb2luKCIiKX07dC5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24gZXNjYXBlU3RyaW5nKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoLyhbKClcXFxuXHJdKS9nLChlPT4iXG4iPT09ZT8iXFxuIjoiXHIiPT09ZT8iXFxyIjpgXFwke2V9YCkpfTt0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eTt0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZSl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dD1PYmplY3QuY3JlYXRlKG51bGwpO2UodCk7ZT1udWxsfXJldHVybiB0fX07dC5nZXROZXdBbm5vdGF0aW9uc01hcD1mdW5jdGlvbiBnZXROZXdBbm5vdGF0aW9uc01hcChlKXtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0W2EsaV1vZiBlKXtpZighYS5zdGFydHNXaXRoKHIuQW5ub3RhdGlvbkVkaXRvclByZWZpeCkpY29udGludWU7bGV0IGU9dC5nZXQoaS5wYWdlSW5kZXgpO2lmKCFlKXtlPVtdO3Quc2V0KGkucGFnZUluZGV4LGUpfWUucHVzaChpKX1yZXR1cm4gdC5zaXplPjA/dDpudWxsfTt0LmdldFJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uIGdldFJvdGF0aW9uTWF0cml4KGUsdCxhKXtzd2l0Y2goZSl7Y2FzZSA5MDpyZXR1cm5bMCwxLC0xLDAsdCwwXTtjYXNlIDE4MDpyZXR1cm5bLTEsMCwwLC0xLHQsYV07Y2FzZSAyNzA6cmV0dXJuWzAsLTEsMSwwLDAsYV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19O3QuaXNBc2NpaT1mdW5jdGlvbiBpc0FzY2lpKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX07dC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMz09PWV8fDEwPT09ZX07dC5sb2cyPWZ1bmN0aW9uIGxvZzIoZSl7aWYoZTw9MClyZXR1cm4gMDtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nMihlKSl9O3QubnVtYmVyVG9TdHJpbmc9ZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcoZSl7aWYoTnVtYmVyLmlzSW50ZWdlcihlKSlyZXR1cm4gZS50b1N0cmluZygpO2NvbnN0IHQ9TWF0aC5yb3VuZCgxMDAqZSk7aWYodCUxMDA9PTApcmV0dXJuKHQvMTAwKS50b1N0cmluZygpO2lmKHQlMTA9PTApcmV0dXJuIGUudG9GaXhlZCgxKTtyZXR1cm4gZS50b0ZpeGVkKDIpfTt0LnBhcnNlWEZBUGF0aD1mdW5jdGlvbiBwYXJzZVhGQVBhdGgoZSl7Y29uc3QgdD0vKC4rKVxbKFxkKylcXSQvO3JldHVybiBlLnNwbGl0KCIuIikubWFwKChlPT57Y29uc3QgYT1lLm1hdGNoKHQpO3JldHVybiBhP3tuYW1lOmFbMV0scG9zOnBhcnNlSW50KGFbMl0sMTApfTp7bmFtZTplLHBvczowfX0pKX07dC5yZWFkSW50OD1mdW5jdGlvbiByZWFkSW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9O3QucmVhZFVpbnQxNj1mdW5jdGlvbiByZWFkVWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfTt0LnJlYWRVaW50MzI9ZnVuY3Rpb24gcmVhZFVpbnQzMihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH07dC5yZWNvdmVySnNVUkw9ZnVuY3Rpb24gcmVjb3ZlckpzVVJMKGUpe2NvbnN0IHQ9bmV3IFJlZ0V4cCgiXlxccyooIitbImFwcC5sYXVuY2hVUkwiLCJ3aW5kb3cub3BlbiIsInhmYS5ob3N0LmdvdG9VUkwiXS5qb2luKCJ8IikucmVwbGFjZUFsbCgiLiIsIlxcLiIpKyIpXFwoKD86J3xcIikoW14nXCJdKikoPzonfFwiKSg/OixcXHMqKFxcdyspXFwpfFxcKSkiLCJpIikuZXhlYyhlKTtpZih0Py5bMl0pe2NvbnN0IGU9dFsyXTtsZXQgYT0hMTsidHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYoYT0hMCk7cmV0dXJue3VybDplLG5ld1dpbmRvdzphfX1yZXR1cm4gbnVsbH07dC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZIZXhTdHJpbmcoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpO3QucHVzaCgocj4+OCYyNTUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIiksKDI1NSZyKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKX1yZXR1cm4gdC5qb2luKCIiKX07dC5zdHJpbmdUb1VURjE2U3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZTdHJpbmcoZSx0PSExKXtjb25zdCBhPVtdO3QmJmEucHVzaCgiw77DvyIpO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQodCk7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocj4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JnIpKX1yZXR1cm4gYS5qb2luKCIiKX07dC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24gdG9Sb21hbk51bWVyYWxzKGUsdD0hMSl7KDAsci5hc3NlcnQpKE51bWJlci5pc0ludGVnZXIoZSkmJmU+MCwiVGhlIG51bWJlciBzaG91bGQgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIpO2NvbnN0IGE9W107bGV0IGk7Zm9yKDtlPj0xZTM7KXtlLT0xZTM7YS5wdXNoKCJNIil9aT1lLzEwMHwwO2UlPTEwMDthLnB1c2goc1tpXSk7aT1lLzEwfDA7ZSU9MTA7YS5wdXNoKHNbMTAraV0pO2EucHVzaChzWzIwK2VdKTtjb25zdCBuPWEuam9pbigiIik7cmV0dXJuIHQ/bi50b0xvd2VyQ2FzZSgpOm59O3QudmFsaWRhdGVDU1NGb250PWZ1bmN0aW9uIHZhbGlkYXRlQ1NTRm9udChlKXtjb25zdCB0PW5ldyBTZXQoWyIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI3MDAiLCI4MDAiLCI5MDAiLCIxMDAwIiwibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiXSkse2ZvbnRGYW1pbHk6YSxmb250V2VpZ2h0OnIsaXRhbGljQW5nbGU6aX09ZTtpZighdmFsaWRhdGVGb250TmFtZShhLCEwKSlyZXR1cm4hMTtjb25zdCBuPXI/ci50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhuKT9uOiI0MDAiO2NvbnN0IHM9cGFyc2VGbG9hdChpKTtlLml0YWxpY0FuZ2xlPWlzTmFOKHMpfHxzPC05MHx8cz45MD8iMTQiOmkudG9TdHJpbmcoKTtyZXR1cm4hMH07dC52YWxpZGF0ZUZvbnROYW1lPXZhbGlkYXRlRm9udE5hbWU7dmFyIHI9YSgyKSxpPWEoNCksbj1hKDUpO3QuUERGX1ZFUlNJT05fUkVHRVhQPS9eWzEtOV1cLlxkJC87Y2xhc3MgTWlzc2luZ0RhdGFFeGNlcHRpb24gZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgTWlzc2luZyBkYXRhIFske2V9LCAke3R9KWAsIk1pc3NpbmdEYXRhRXhjZXB0aW9uIik7dGhpcy5iZWdpbj1lO3RoaXMuZW5kPXR9fXQuTWlzc2luZ0RhdGFFeGNlcHRpb249TWlzc2luZ0RhdGFFeGNlcHRpb247Y2xhc3MgUGFyc2VyRU9GRXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlBhcnNlckVPRkV4Y2VwdGlvbiIpfX10LlBhcnNlckVPRkV4Y2VwdGlvbj1QYXJzZXJFT0ZFeGNlcHRpb247Y2xhc3MgWFJlZkVudHJ5RXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlhSZWZFbnRyeUV4Y2VwdGlvbiIpfX10LlhSZWZFbnRyeUV4Y2VwdGlvbj1YUmVmRW50cnlFeGNlcHRpb247Y2xhc3MgWFJlZlBhcnNlRXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlhSZWZQYXJzZUV4Y2VwdGlvbiIpfX10LlhSZWZQYXJzZUV4Y2VwdGlvbj1YUmVmUGFyc2VFeGNlcHRpb247ZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDplLGtleTp0LGdldEFycmF5OmE9ITEsc3RvcFdoZW5Gb3VuZDpyPSEwfSl7bGV0IG47Y29uc3Qgcz1uZXcgaS5SZWZTZXQ7Zm9yKDtlIGluc3RhbmNlb2YgaS5EaWN0JiYoIWUub2JqSWR8fCFzLmhhcyhlLm9iaklkKSk7KXtlLm9iaklkJiZzLnB1dChlLm9iaklkKTtjb25zdCBpPWE/ZS5nZXRBcnJheSh0KTplLmdldCh0KTtpZih2b2lkIDAhPT1pKXtpZihyKXJldHVybiBpOyhufHw9W10pLnB1c2goaSl9ZT1lLmdldCgiUGFyZW50Iil9cmV0dXJuIG59Y29uc3Qgcz1bIiIsIkMiLCJDQyIsIkNDQyIsIkNEIiwiRCIsIkRDIiwiRENDIiwiRENDQyIsIkNNIiwiIiwiWCIsIlhYIiwiWFhYIiwiWEwiLCJMIiwiTFgiLCJMWFgiLCJMWFhYIiwiWEMiLCIiLCJJIiwiSUkiLCJJSUkiLCJJViIsIlYiLCJWSSIsIlZJSSIsIlZJSUkiLCJJWCJdO2Z1bmN0aW9uIF9jb2xsZWN0SlMoZSx0LGEscyl7aWYoIWUpcmV0dXJuO2xldCBvPW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtpZihzLmhhcyhlKSlyZXR1cm47bz1lO3MucHV0KG8pO2U9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKWZvcihjb25zdCByIG9mIGUpX2NvbGxlY3RKUyhyLHQsYSxzKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBpLkRpY3Qpe2lmKCgwLGkuaXNOYW1lKShlLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9ZS5nZXQoIkpTIik7bGV0IGk7dCBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbT9pPXQuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiB0JiYoaT10KTtpJiY9KDAsci5zdHJpbmdUb1BERlN0cmluZykoaSkucmVwbGFjZUFsbCgiXDAiLCIiKTtpJiZhLnB1c2goaSl9X2NvbGxlY3RKUyhlLmdldFJhdygiTmV4dCIpLHQsYSxzKX1vJiZzLnJlbW92ZShvKX1jb25zdCBvPXs2MDoiJmx0OyIsNjI6IiZndDsiLDM4OiImYW1wOyIsMzQ6IiZxdW90OyIsMzk6IiZhcG9zOyJ9O2Z1bmN0aW9uIHZhbGlkYXRlRm9udE5hbWUoZSx0PSExKXtjb25zdCBhPS9eKCJ8JykuKigifCcpJC8uZXhlYyhlKTtpZihhJiZhWzFdPT09YVsyXSl7aWYobmV3IFJlZ0V4cChgW15cXFxcXSR7YVsxXX1gKS50ZXN0KGUuc2xpY2UoMSwtMSkpKXt0JiYoMCxyLndhcm4pKGBGb250RmFtaWx5IGNvbnRhaW5zIHVuZXNjYXBlZCAke2FbMV19OiAke2V9LmApO3JldHVybiExfX1lbHNlIGZvcihjb25zdCBhIG9mIGUuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoYSl8fCEvXltcdy1cXF0rJC8udGVzdChhKSl7dCYmKDAsci53YXJuKShgRm9udEZhbWlseSBjb250YWlucyBpbnZhbGlkIDxjdXN0b20taWRlbnQ+OiAke2V9LmApO3JldHVybiExfXJldHVybiEwfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwO3QuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24gY2xlYXJQcmltaXRpdmVDYWNoZXMoKXtzPU9iamVjdC5jcmVhdGUobnVsbCk7bz1PYmplY3QuY3JlYXRlKG51bGwpO2M9T2JqZWN0LmNyZWF0ZShudWxsKX07dC5pc0NtZD1mdW5jdGlvbiBpc0NtZChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgQ21kJiYodm9pZCAwPT09dHx8ZS5jbWQ9PT10KX07dC5pc0RpY3Q9ZnVuY3Rpb24gaXNEaWN0KGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEaWN0JiYodm9pZCAwPT09dHx8aXNOYW1lKGUuZ2V0KCJUeXBlIiksdCkpfTt0LmlzTmFtZT1pc05hbWU7dC5pc1JlZnNFcXVhbD1mdW5jdGlvbiBpc1JlZnNFcXVhbChlLHQpe3JldHVybiBlLm51bT09PXQubnVtJiZlLmdlbj09PXQuZ2VufTt2YXIgcj1hKDIpO2NvbnN0IGk9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1pO2NvbnN0IG49U3ltYm9sKCJFT0YiKTt0LkVPRj1uO2xldCBzPU9iamVjdC5jcmVhdGUobnVsbCksbz1PYmplY3QuY3JlYXRlKG51bGwpLGM9T2JqZWN0LmNyZWF0ZShudWxsKTtjbGFzcyBOYW1le2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT1lfXN0YXRpYyBnZXQoZSl7cmV0dXJuIG9bZV18fD1uZXcgTmFtZShlKX19dC5OYW1lPU5hbWU7Y2xhc3MgQ21ke2NvbnN0cnVjdG9yKGUpe3RoaXMuY21kPWV9c3RhdGljIGdldChlKXtyZXR1cm4gc1tlXXx8PW5ldyBDbWQoZSl9fXQuQ21kPUNtZDtjb25zdCBsPWZ1bmN0aW9uIG5vblNlcmlhbGl6YWJsZUNsb3N1cmUoKXtyZXR1cm4gbH07Y2xhc3MgRGljdHtjb25zdHJ1Y3RvcihlPW51bGwpe3RoaXMuX21hcD1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMueHJlZj1lO3RoaXMub2JqSWQ9bnVsbDt0aGlzLnN1cHByZXNzRW5jcnlwdGlvbj0hMTt0aGlzLl9fbm9uU2VyaWFsaXphYmxlX189bH1hc3NpZ25YcmVmKGUpe3RoaXMueHJlZj1lfWdldCBzaXplKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCkubGVuZ3RofWdldChlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2gocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1hc3luYyBnZXRBc3luYyhlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2hBc3luYyhyLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTpyfWdldEFycmF5KGUsdCxhKXtsZXQgcj10aGlzLl9tYXBbZV07aWYodm9pZCAwPT09ciYmdm9pZCAwIT09dCl7cj10aGlzLl9tYXBbdF07dm9pZCAwPT09ciYmdm9pZCAwIT09YSYmKHI9dGhpcy5fbWFwW2FdKX1yIGluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWYmJihyPXRoaXMueHJlZi5mZXRjaChyLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7aWYoQXJyYXkuaXNBcnJheShyKSl7cj1yLnNsaWNlKCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXJbZV1pbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmJiYocltlXT10aGlzLnhyZWYuZmV0Y2gocltlXSx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpfXJldHVybiByfWdldFJhdyhlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKX1nZXRSYXdWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9tYXApfXNldChlLHQpe3RoaXMuX21hcFtlXT10fWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9c3RhdGljIGdldCBlbXB0eSgpe2NvbnN0IGU9bmV3IERpY3QobnVsbCk7ZS5zZXQ9KGUsdCk9PnsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZW1wdHkiLGUpfXN0YXRpYyBtZXJnZSh7eHJlZjplLGRpY3RBcnJheTp0LG1lcmdlU3ViRGljdHM6YT0hMX0pe2NvbnN0IHI9bmV3IERpY3QoZSksaT1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0W3Qscl1vZiBPYmplY3QuZW50cmllcyhlLl9tYXApKXtsZXQgZT1pLmdldCh0KTtpZih2b2lkIDA9PT1lKXtlPVtdO2kuc2V0KHQsZSl9ZWxzZSBpZighKGEmJnIgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtlLnB1c2gocil9Zm9yKGNvbnN0W3QsYV1vZiBpKXtpZigxPT09YS5sZW5ndGh8fCEoYVswXWluc3RhbmNlb2YgRGljdCkpe3IuX21hcFt0XT1hWzBdO2NvbnRpbnVlfWNvbnN0IGk9bmV3IERpY3QoZSk7Zm9yKGNvbnN0IGUgb2YgYSlmb3IoY29uc3RbdCxhXW9mIE9iamVjdC5lbnRyaWVzKGUuX21hcCkpdm9pZCAwPT09aS5fbWFwW3RdJiYoaS5fbWFwW3RdPWEpO2kuc2l6ZT4wJiYoci5fbWFwW3RdPWkpfWkuY2xlYXIoKTtyZXR1cm4gci5zaXplPjA/cjpEaWN0LmVtcHR5fX10LkRpY3Q9RGljdDtjbGFzcyBSZWZ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm51bT1lO3RoaXMuZ2VuPXR9dG9TdHJpbmcoKXtyZXR1cm4gMD09PXRoaXMuZ2VuP2Ake3RoaXMubnVtfVJgOmAke3RoaXMubnVtfVIke3RoaXMuZ2VufWB9c3RhdGljIGdldChlLHQpe2NvbnN0IGE9MD09PXQ/YCR7ZX1SYDpgJHtlfVIke3R9YDtyZXR1cm4gY1thXXx8PW5ldyBSZWYoZSx0KX19dC5SZWY9UmVmO2NsYXNzIFJlZlNldHtjb25zdHJ1Y3RvcihlPW51bGwpe3RoaXMuX3NldD1uZXcgU2V0KGU/Ll9zZXQpfWhhcyhlKXtyZXR1cm4gdGhpcy5fc2V0LmhhcyhlLnRvU3RyaW5nKCkpfXB1dChlKXt0aGlzLl9zZXQuYWRkKGUudG9TdHJpbmcoKSl9cmVtb3ZlKGUpe3RoaXMuX3NldC5kZWxldGUoZS50b1N0cmluZygpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9zZXQudmFsdWVzKCl9Y2xlYXIoKXt0aGlzLl9zZXQuY2xlYXIoKX19dC5SZWZTZXQ9UmVmU2V0O2NsYXNzIFJlZlNldENhY2hle2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9aGFzKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9cHV0QWxpYXMoZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fXQuUmVmU2V0Q2FjaGU9UmVmU2V0Q2FjaGU7ZnVuY3Rpb24gaXNOYW1lKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBOYW1lJiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQmFzZVN0cmVhbT12b2lkIDA7dmFyIHI9YSgyKTtjbGFzcyBCYXNlU3RyZWFte2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VTdHJlYW0mJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLiIpfWdldCBsZW5ndGgoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBsZW5ndGhgIGFjY2Vzc2VkIil9Z2V0IGlzRW1wdHkoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZCIpfWdldCBpc0RhdGFMb2FkZWQoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9Z2V0Qnl0ZSgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfWdldEJ5dGVzKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX1wZWVrQnl0ZSgpe2NvbnN0IGU9dGhpcy5nZXRCeXRlKCk7LTEhPT1lJiZ0aGlzLnBvcy0tO3JldHVybiBlfXBlZWtCeXRlcyhlKXtjb25zdCB0PXRoaXMuZ2V0Qnl0ZXMoZSk7dGhpcy5wb3MtPXQubGVuZ3RoO3JldHVybiB0fWdldFVpbnQxNigpe2NvbnN0IGU9dGhpcy5nZXRCeXRlKCksdD10aGlzLmdldEJ5dGUoKTtyZXR1cm4tMT09PWV8fC0xPT09dD8tMTooZTw8OCkrdH1nZXRJbnQzMigpe3JldHVybih0aGlzLmdldEJ5dGUoKTw8MjQpKyh0aGlzLmdldEJ5dGUoKTw8MTYpKyh0aGlzLmdldEJ5dGUoKTw8OCkrdGhpcy5nZXRCeXRlKCl9Z2V0Qnl0ZVJhbmdlKGUsdCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZVJhbmdlYCBjYWxsZWQiKX1nZXRTdHJpbmcoZSl7cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKSh0aGlzLmdldEJ5dGVzKGUpKX1za2lwKGUpe3RoaXMucG9zKz1lfHwxfXJlc2V0KCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgcmVzZXRgIGNhbGxlZCIpfW1vdmVTdGFydCgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYG1vdmVTdGFydGAgY2FsbGVkIil9bWFrZVN1YlN0cmVhbShlLHQsYT1udWxsKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBtYWtlU3ViU3RyZWFtYCBjYWxsZWQiKX1nZXRCYXNlU3RyZWFtcygpe3JldHVybiBudWxsfX10LkJhc2VTdHJlYW09QmFzZVN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgcj1hKDIpLGk9YSg3KSxuPWEoMykscz1hKDkpLG89YSg4KTtjbGFzcyBCYXNlUGRmTWFuYWdlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZVBkZk1hbmFnZXImJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKTt0aGlzLl9kb2NCYXNlVXJsPWZ1bmN0aW9uIHBhcnNlRG9jQmFzZVVybChlKXtpZihlKXtjb25zdCB0PSgwLHIuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkoZSk7aWYodClyZXR1cm4gdC5ocmVmOygwLHIud2FybikoYEludmFsaWQgYWJzb2x1dGUgZG9jQmFzZVVybDogIiR7ZX0iLmApfXJldHVybiBudWxsfShlLmRvY0Jhc2VVcmwpO3RoaXMuX2RvY0lkPWUuZG9jSWQ7dGhpcy5fcGFzc3dvcmQ9ZS5wYXNzd29yZDt0aGlzLmVuYWJsZVhmYT1lLmVuYWJsZVhmYTtlLmV2YWx1YXRvck9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJj1yLkZlYXR1cmVUZXN0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkO3RoaXMuZXZhbHVhdG9yT3B0aW9ucz1lLmV2YWx1YXRvck9wdGlvbnN9Z2V0IGRvY0lkKCl7cmV0dXJuIHRoaXMuX2RvY0lkfWdldCBwYXNzd29yZCgpe3JldHVybiB0aGlzLl9wYXNzd29yZH1nZXQgZG9jQmFzZVVybCgpe2NvbnN0IGU9dGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJkb2NCYXNlVXJsIixlLmJhc2VVcmx8fHRoaXMuX2RvY0Jhc2VVcmwpfWVuc3VyZURvYyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LGUsdCl9ZW5zdXJlWFJlZihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsZSx0KX1lbnN1cmVDYXRhbG9nKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZyxlLHQpfWdldFBhZ2UoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShlKX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soZSx0KX1sb2FkWGZhRm9udHMoZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhRm9udHMoZSx0KX1sb2FkWGZhSW1hZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpfXNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuc2VyaWFsaXplWGZhRGF0YShlKX1jbGVhbnVwKGU9ITEpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmNsZWFudXAoZSl9YXN5bmMgZW5zdXJlKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpfXJlcXVlc3RSYW5nZShlLHQpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkIil9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfXVwZGF0ZVBhc3N3b3JkKGUpe3RoaXMuX3Bhc3N3b3JkPWV9dGVybWluYXRlKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fXQuTG9jYWxQZGZNYW5hZ2VyPWNsYXNzIExvY2FsUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9bmV3IG8uU3RyZWFtKGUuc291cmNlKTt0aGlzLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHRoaXMsdCk7dGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUodCl9YXN5bmMgZW5zdXJlKGUsdCxhKXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9cmVxdWVzdFJhbmdlKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2V9dGVybWluYXRlKGUpe319O3QuTmV0d29ya1BkZk1hbmFnZXI9Y2xhc3MgTmV0d29ya1BkZk1hbmFnZXIgZXh0ZW5kcyBCYXNlUGRmTWFuYWdlcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnN0cmVhbU1hbmFnZXI9bmV3IGkuQ2h1bmtlZFN0cmVhbU1hbmFnZXIoZS5zb3VyY2Use21zZ0hhbmRsZXI6ZS5oYW5kbGVyLGxlbmd0aDplLmxlbmd0aCxkaXNhYmxlQXV0b0ZldGNoOmUuZGlzYWJsZUF1dG9GZXRjaCxyYW5nZUNodW5rU2l6ZTplLnJhbmdlQ2h1bmtTaXplfSk7dGhpcy5wZGZEb2N1bWVudD1uZXcgcy5QREZEb2N1bWVudCh0aGlzLHRoaXMuc3RyZWFtTWFuYWdlci5nZXRTdHJlYW0oKSl9YXN5bmMgZW5zdXJlKGUsdCxhKXt0cnl7Y29uc3Qgcj1lW3RdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkoZSxhKTpyfWNhdGNoKHIpe2lmKCEociBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pKXRocm93IHI7YXdhaXQgdGhpcy5yZXF1ZXN0UmFuZ2Uoci5iZWdpbixyLmVuZCk7cmV0dXJuIHRoaXMuZW5zdXJlKGUsdCxhKX19cmVxdWVzdFJhbmdlKGUsdCl7cmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0UmFuZ2UoZSx0KX1yZXF1ZXN0TG9hZGVkU3RyZWFtKGU9ITEpe3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9dGVybWluYXRlKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2h1bmtlZFN0cmVhbU1hbmFnZXI9dC5DaHVua2VkU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDMpLGk9YSgyKSxuPWEoOCk7Y2xhc3MgQ2h1bmtlZFN0cmVhbSBleHRlbmRzIG4uU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCk7dGhpcy5jaHVua1NpemU9dDt0aGlzLl9sb2FkZWRDaHVua3M9bmV3IFNldDt0aGlzLm51bUNodW5rcz1NYXRoLmNlaWwoZS90KTt0aGlzLm1hbmFnZXI9YTt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bms9LTF9Z2V0TWlzc2luZ0NodW5rcygpe2NvbnN0IGU9W107Zm9yKGxldCB0PTAsYT10aGlzLm51bUNodW5rczt0PGE7Kyt0KXRoaXMuX2xvYWRlZENodW5rcy5oYXModCl8fGUucHVzaCh0KTtyZXR1cm4gZX1nZXQgbnVtQ2h1bmtzTG9hZGVkKCl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5zaXplfWdldCBpc0RhdGFMb2FkZWQoKXtyZXR1cm4gdGhpcy5udW1DaHVua3NMb2FkZWQ9PT10aGlzLm51bUNodW5rc31vblJlY2VpdmVEYXRhKGUsdCl7Y29uc3QgYT10aGlzLmNodW5rU2l6ZTtpZihlJWEhPTApdGhyb3cgbmV3IEVycm9yKGBCYWQgYmVnaW4gb2Zmc2V0OiAke2V9YCk7Y29uc3Qgcj1lK3QuYnl0ZUxlbmd0aDtpZihyJWEhPTAmJnIhPT10aGlzLmJ5dGVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEJhZCBlbmQgb2Zmc2V0OiAke3J9YCk7dGhpcy5ieXRlcy5zZXQobmV3IFVpbnQ4QXJyYXkodCksZSk7Y29uc3QgaT1NYXRoLmZsb29yKGUvYSksbj1NYXRoLmZsb29yKChyLTEpL2EpKzE7Zm9yKGxldCBlPWk7ZTxuOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfW9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YShlKXtsZXQgdD10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDtjb25zdCBhPU1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7dGhpcy5ieXRlcy5zZXQobmV3IFVpbnQ4QXJyYXkoZSksdCk7dCs9ZS5ieXRlTGVuZ3RoO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPXQ7Y29uc3Qgcj10Pj10aGlzLmVuZD90aGlzLm51bUNodW5rczpNYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpO2ZvcihsZXQgZT1hO2U8cjsrK2UpdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChlKX1lbnN1cmVCeXRlKGUpe2lmKGU8dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuO2NvbnN0IHQ9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZighKHQ+dGhpcy5udW1DaHVua3MpJiZ0IT09dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuayl7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXModCkpdGhyb3cgbmV3IHIuTWlzc2luZ0RhdGFFeGNlcHRpb24oZSxlKzEpO3RoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bms9dH19ZW5zdXJlUmFuZ2UoZSx0KXtpZihlPj10KXJldHVybjtpZih0PD10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgYT1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKGE+dGhpcy5udW1DaHVua3MpcmV0dXJuO2NvbnN0IGk9TWF0aC5taW4oTWF0aC5mbG9vcigodC0xKS90aGlzLmNodW5rU2l6ZSkrMSx0aGlzLm51bUNodW5rcyk7Zm9yKGxldCBuPWE7bjxpOysrbilpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhuKSl0aHJvdyBuZXcgci5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfW5leHRFbXB0eUNodW5rKGUpe2NvbnN0IHQ9dGhpcy5udW1DaHVua3M7Zm9yKGxldCBhPTA7YTx0OysrYSl7Y29uc3Qgcj0oZSthKSV0O2lmKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKHIpKXJldHVybiByfXJldHVybiBudWxsfWhhc0NodW5rKGUpe3JldHVybiB0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGUpfWdldEJ5dGUoKXtjb25zdCBlPXRoaXMucG9zO2lmKGU+PXRoaXMuZW5kKXJldHVybi0xO2U+PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZUJ5dGUoZSk7cmV0dXJuIHRoaXMuYnl0ZXNbdGhpcy5wb3MrK119Z2V0Qnl0ZXMoZSl7Y29uc3QgdD10aGlzLmJ5dGVzLGE9dGhpcy5wb3Mscj10aGlzLmVuZDtpZighZSl7cj50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShhLHIpO3JldHVybiB0LnN1YmFycmF5KGEscil9bGV0IGk9YStlO2k+ciYmKGk9cik7aT50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShhLGkpO3RoaXMucG9zPWk7cmV0dXJuIHQuc3ViYXJyYXkoYSxpKX1nZXRCeXRlUmFuZ2UoZSx0KXtlPDAmJihlPTApO3Q+dGhpcy5lbmQmJih0PXRoaXMuZW5kKTt0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsdCk7cmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoZSx0KX1tYWtlU3ViU3RyZWFtKGUsdCxhPW51bGwpe3Q/ZSt0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsZSt0KTplPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpO2Z1bmN0aW9uIENodW5rZWRTdHJlYW1TdWJzdHJlYW0oKXt9Q2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0aGlzKTtDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZS5nZXRNaXNzaW5nQ2h1bmtzPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLmNodW5rU2l6ZSx0PU1hdGguZmxvb3IodGhpcy5zdGFydC9lKSxhPU1hdGguZmxvb3IoKHRoaXMuZW5kLTEpL2UpKzEscj1bXTtmb3IobGV0IGU9dDtlPGE7KytlKXRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl8fHIucHVzaChlKTtyZXR1cm4gcn07T2JqZWN0LmRlZmluZVByb3BlcnR5KENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLCJpc0RhdGFMb2FkZWQiLHtnZXQoKXtyZXR1cm4gdGhpcy5udW1DaHVua3NMb2FkZWQ9PT10aGlzLm51bUNodW5rc3x8MD09PXRoaXMuZ2V0TWlzc2luZ0NodW5rcygpLmxlbmd0aH0sY29uZmlndXJhYmxlOiEwfSk7Y29uc3Qgcj1uZXcgQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbTtyLnBvcz1yLnN0YXJ0PWU7ci5lbmQ9ZSt0fHx0aGlzLmVuZDtyLmRpY3Q9YTtyZXR1cm4gcn1nZXRCYXNlU3RyZWFtcygpe3JldHVyblt0aGlzXX19dC5DaHVua2VkU3RyZWFtPUNodW5rZWRTdHJlYW07dC5DaHVua2VkU3RyZWFtTWFuYWdlcj1jbGFzcyBDaHVua2VkU3RyZWFtTWFuYWdlcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO3RoaXMuY2h1bmtTaXplPXQucmFuZ2VDaHVua1NpemU7dGhpcy5zdHJlYW09bmV3IENodW5rZWRTdHJlYW0odGhpcy5sZW5ndGgsdGhpcy5jaHVua1NpemUsdGhpcyk7dGhpcy5wZGZOZXR3b3JrU3RyZWFtPWU7dGhpcy5kaXNhYmxlQXV0b0ZldGNoPXQuZGlzYWJsZUF1dG9GZXRjaDt0aGlzLm1zZ0hhbmRsZXI9dC5tc2dIYW5kbGVyO3RoaXMuY3VyclJlcXVlc3RJZD0wO3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdD1uZXcgTWFwO3RoaXMuX3JlcXVlc3RzQnlDaHVuaz1uZXcgTWFwO3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0PW5ldyBNYXA7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9MDt0aGlzLmFib3J0ZWQ9ITE7dGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eT1uZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eX1zZW5kUmVxdWVzdChlLHQpe2NvbnN0IGE9dGhpcy5wZGZOZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUsdCk7YS5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8KGEub25Qcm9ncmVzcz10aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzKSk7bGV0IGk9W10sbj0wO3JldHVybiBuZXcgUHJvbWlzZSgoKGUsdCk9Pntjb25zdCByZWFkQ2h1bms9KHt2YWx1ZTpzLGRvbmU6b30pPT57dHJ5e2lmKG8pe2NvbnN0IHQ9KDAsci5hcnJheUJ1ZmZlcnNUb0J5dGVzKShpKTtpPW51bGw7ZSh0KTtyZXR1cm59bis9cy5ieXRlTGVuZ3RoO2EuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOm59KTtpLnB1c2gocyk7YS5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9Y2F0Y2goZSl7dChlKX19O2EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfSkpLnRoZW4oKHQ9Pnt0aGlzLmFib3J0ZWR8fHRoaXMub25SZWNlaXZlRGF0YSh7Y2h1bms6dCxiZWdpbjplfSl9KSl9cmVxdWVzdEFsbENodW5rcyhlPSExKXtpZighZSl7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCk7dGhpcy5fcmVxdWVzdENodW5rcyhlKX1yZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlfV9yZXF1ZXN0Q2h1bmtzKGUpe2NvbnN0IHQ9dGhpcy5jdXJyUmVxdWVzdElkKyssYT1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQodCxhKTtmb3IoY29uc3QgdCBvZiBlKXRoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHxhLmFkZCh0KTtpZigwPT09YS5zaXplKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCByPW5ldyBpLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnNldCh0LHIpO2NvbnN0IG49W107Zm9yKGNvbnN0IGUgb2YgYSl7bGV0IGE9dGhpcy5fcmVxdWVzdHNCeUNodW5rLmdldChlKTtpZighYSl7YT1bXTt0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuc2V0KGUsYSk7bi5wdXNoKGUpfWEucHVzaCh0KX1pZihuLmxlbmd0aD4wKXtjb25zdCBlPXRoaXMuZ3JvdXBDaHVua3Mobik7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT10LmJlZ2luQ2h1bmsqdGhpcy5jaHVua1NpemUsYT1NYXRoLm1pbih0LmVuZENodW5rKnRoaXMuY2h1bmtTaXplLHRoaXMubGVuZ3RoKTt0aGlzLnNlbmRSZXF1ZXN0KGUsYSkuY2F0Y2goci5yZWplY3QpfX1yZXR1cm4gci5wcm9taXNlLmNhdGNoKChlPT57aWYoIXRoaXMuYWJvcnRlZCl0aHJvdyBlfSkpfWdldFN0cmVhbSgpe3JldHVybiB0aGlzLnN0cmVhbX1yZXF1ZXN0UmFuZ2UoZSx0KXt0PU1hdGgubWluKHQsdGhpcy5sZW5ndGgpO2NvbnN0IGE9dGhpcy5nZXRCZWdpbkNodW5rKGUpLHI9dGhpcy5nZXRFbmRDaHVuayh0KSxpPVtdO2ZvcihsZXQgZT1hO2U8cjsrK2UpaS5wdXNoKGUpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGkpfXJlcXVlc3RSYW5nZXMoZT1bXSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPXRoaXMuZ2V0QmVnaW5DaHVuayhhLmJlZ2luKSxyPXRoaXMuZ2V0RW5kQ2h1bmsoYS5lbmQpO2ZvcihsZXQgYT1lO2E8cjsrK2EpdC5pbmNsdWRlcyhhKXx8dC5wdXNoKGEpfXQuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfWdyb3VwQ2h1bmtzKGUpe2NvbnN0IHQ9W107bGV0IGE9LTEscj0tMTtmb3IobGV0IGk9MCxuPWUubGVuZ3RoO2k8bjsrK2kpe2NvbnN0IG49ZVtpXTthPDAmJihhPW4pO2lmKHI+PTAmJnIrMSE9PW4pe3QucHVzaCh7YmVnaW5DaHVuazphLGVuZENodW5rOnIrMX0pO2E9bn1pKzE9PT1lLmxlbmd0aCYmdC5wdXNoKHtiZWdpbkNodW5rOmEsZW5kQ2h1bms6bisxfSk7cj1ufXJldHVybiB0fW9uUHJvZ3Jlc3MoZSl7dGhpcy5tc2dIYW5kbGVyLnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOnRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCp0aGlzLmNodW5rU2l6ZStlLmxvYWRlZCx0b3RhbDp0aGlzLmxlbmd0aH0pfW9uUmVjZWl2ZURhdGEoZSl7Y29uc3QgdD1lLmNodW5rLGE9dm9pZCAwPT09ZS5iZWdpbixyPWE/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixpPXIrdC5ieXRlTGVuZ3RoLG49TWF0aC5mbG9vcihyL3RoaXMuY2h1bmtTaXplKSxzPWk8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihpL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoaS90aGlzLmNodW5rU2l6ZSk7aWYoYSl7dGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPWl9ZWxzZSB0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKHIsdCk7dGhpcy5zdHJlYW0uaXNEYXRhTG9hZGVkJiZ0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO2NvbnN0IG89W107Zm9yKGxldCBlPW47ZTxzOysrZSl7Y29uc3QgdD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKHQpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUoZSk7Zm9yKGNvbnN0IGEgb2YgdCl7Y29uc3QgdD10aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QuZ2V0KGEpO3QuaGFzKGUpJiZ0LmRlbGV0ZShlKTt0LnNpemU+MHx8by5wdXNoKGEpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXtsZXQgZTtpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXtjb25zdCB0PXRoaXMuc3RyZWFtLm51bUNodW5rcy0xO3RoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHwoZT10KX1lbHNlIGU9dGhpcy5zdHJlYW0ubmV4dEVtcHR5Q2h1bmsocyk7TnVtYmVyLmlzSW50ZWdlcihlKSYmdGhpcy5fcmVxdWVzdENodW5rcyhbZV0pfWZvcihjb25zdCBlIG9mIG8pe2NvbnN0IHQ9dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZ2V0KGUpO3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LmRlbGV0ZShlKTt0LnJlc29sdmUoKX10aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplLHRvdGFsOnRoaXMubGVuZ3RofSl9b25FcnJvcihlKXt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlamVjdChlKX1nZXRCZWdpbkNodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpfWdldEVuZENodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTEpL3RoaXMuY2h1bmtTaXplKSsxfWFib3J0KGUpe3RoaXMuYWJvcnRlZD0hMDt0aGlzLnBkZk5ldHdvcmtTdHJlYW0mJnRoaXMucGRmTmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhlKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSl0LnJlamVjdChlKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RyaW5nU3RyZWFtPXQuU3RyZWFtPXQuTnVsbFN0cmVhbT12b2lkIDA7dmFyIHI9YSg1KSxpPWEoMik7Y2xhc3MgU3RyZWFtIGV4dGVuZHMgci5CYXNlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKCk7dGhpcy5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpO3RoaXMuc3RhcnQ9dHx8MDt0aGlzLnBvcz10aGlzLnN0YXJ0O3RoaXMuZW5kPXQrYXx8dGhpcy5ieXRlcy5sZW5ndGg7dGhpcy5kaWN0PXJ9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH1nZXRCeXRlKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5ieXRlcyxhPXRoaXMucG9zLHI9dGhpcy5lbmQ7aWYoIWUpcmV0dXJuIHQuc3ViYXJyYXkoYSxyKTtsZXQgaT1hK2U7aT5yJiYoaT1yKTt0aGlzLnBvcz1pO3JldHVybiB0LnN1YmFycmF5KGEsaSl9Z2V0Qnl0ZVJhbmdlKGUsdCl7ZTwwJiYoZT0wKTt0PnRoaXMuZW5kJiYodD10aGlzLmVuZCk7cmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoZSx0KX1yZXNldCgpe3RoaXMucG9zPXRoaXMuc3RhcnR9bW92ZVN0YXJ0KCl7dGhpcy5zdGFydD10aGlzLnBvc31tYWtlU3ViU3RyZWFtKGUsdCxhPW51bGwpe3JldHVybiBuZXcgU3RyZWFtKHRoaXMuYnl0ZXMuYnVmZmVyLGUsdCxhKX19dC5TdHJlYW09U3RyZWFtO3QuU3RyaW5nU3RyZWFtPWNsYXNzIFN0cmluZ1N0cmVhbSBleHRlbmRzIFN0cmVhbXtjb25zdHJ1Y3RvcihlKXtzdXBlcigoMCxpLnN0cmluZ1RvQnl0ZXMpKGUpKX19O3QuTnVsbFN0cmVhbT1jbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpbnQ4QXJyYXkoMCkpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QYWdlPXQuUERGRG9jdW1lbnQ9dm9pZCAwO3ZhciByPWEoMTApLGk9YSgyKSxuPWEoMykscz1hKDQpLG89YSg1MSksYz1hKDUpLGw9YSg2OCksaD1hKDcwKSx1PWEoNzIpLGQ9YSgxMDEpLGY9YSgxNiksZz1hKDgpLHA9YSg3NiksbT1hKDY0KSxiPWEoMTMpLHk9YSgxOCksdz1hKDc1KSxTPWEoNjYpLHg9YSg3NyksQz1hKDEwMik7Y29uc3Qgaz1bMCwwLDYxMiw3OTJdO2NsYXNzIFBhZ2V7Y29uc3RydWN0b3Ioe3BkZk1hbmFnZXI6ZSx4cmVmOnQscGFnZUluZGV4OmEscGFnZURpY3Q6cixyZWY6aSxnbG9iYWxJZEZhY3Rvcnk6bixmb250Q2FjaGU6cyxidWlsdEluQ01hcENhY2hlOm8sc3RhbmRhcmRGb250RGF0YUNhY2hlOmMsZ2xvYmFsSW1hZ2VDYWNoZTpsLHN5c3RlbUZvbnRDYWNoZTpoLG5vbkJsZW5kTW9kZXNTZXQ6dSx4ZmFGYWN0b3J5OmR9KXt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnBhZ2VJbmRleD1hO3RoaXMucGFnZURpY3Q9cjt0aGlzLnhyZWY9dDt0aGlzLnJlZj1pO3RoaXMuZm9udENhY2hlPXM7dGhpcy5idWlsdEluQ01hcENhY2hlPW87dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yzt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bDt0aGlzLnN5c3RlbUZvbnRDYWNoZT1oO3RoaXMubm9uQmxlbmRNb2Rlc1NldD11O3RoaXMuZXZhbHVhdG9yT3B0aW9ucz1lLmV2YWx1YXRvck9wdGlvbnM7dGhpcy5yZXNvdXJjZXNQcm9taXNlPW51bGw7dGhpcy54ZmFGYWN0b3J5PWQ7Y29uc3QgZj17b2JqOjB9O3RoaXMuX2xvY2FsSWRGYWN0b3J5PWNsYXNzIGV4dGVuZHMgbntzdGF0aWMgY3JlYXRlT2JqSWQoKXtyZXR1cm5gcCR7YX1fJHsrK2Yub2JqfWB9c3RhdGljIGdldFBhZ2VPYmpJZCgpe3JldHVybmBwJHtpLnRvU3RyaW5nKCl9YH19fV9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGUsdD0hMSl7Y29uc3QgYT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnRoaXMucGFnZURpY3Qsa2V5OmUsZ2V0QXJyYXk6dCxzdG9wV2hlbkZvdW5kOiExfSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/MSE9PWEubGVuZ3RoJiZhWzBdaW5zdGFuY2VvZiBzLkRpY3Q/cy5EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6YX0pOmFbMF06YX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLnBhZ2VEaWN0LmdldEFycmF5KCJDb250ZW50cyIpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBzLkRpY3Q/ZTpzLkRpY3QuZW1wdHkpfV9nZXRCb3VuZGluZ0JveChlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O2xldCB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXt0PWkuVXRpbC5ub3JtYWxpemVSZWN0KHQpO2lmKHRbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxpLndhcm4pKGBFbXB0eSwgb3IgaW52YWxpZCwgLyR7ZX0gZW50cnkuYCl9cmV0dXJuIG51bGx9Z2V0IG1lZGlhQm94KCl7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8ayl9Z2V0IGNyb3BCb3goKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9Z2V0IHVzZXJVbml0KCl7bGV0IGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7KCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9Z2V0IHZpZXcoKXtjb25zdHtjcm9wQm94OmUsbWVkaWFCb3g6dH09dGhpcztpZihlIT09dCYmISgwLGkuaXNBcnJheUVxdWFsKShlLHQpKXtjb25zdCBhPWkuVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihhJiZhWzJdLWFbMF0+MCYmYVszXS1hWzFdPjApcmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInZpZXciLGEpOygwLGkud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX1nZXQgcm90YXRlKCl7bGV0IGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7ZSU5MCE9MD9lPTA6ZT49MzYwP2UlPTM2MDplPDAmJihlPShlJTM2MCszNjApJTM2MCk7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInJvdGF0ZSIsZSl9X29uU3ViU3RyZWFtRXJyb3IoZSx0KXtpZighdGhpcy5ldmFsdWF0b3JPcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGkud2FybikoYGdldENvbnRlbnRTdHJlYW0gLSBpZ25vcmluZyBzdWItc3RyZWFtICgke3R9KTogIiR7ZX0iLmApfWdldENvbnRlbnRTdHJlYW0oKXtyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50IikudGhlbigoZT0+ZSBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbT9lOkFycmF5LmlzQXJyYXkoZSk/bmV3IHkuU3RyZWFtc1NlcXVlbmNlU3RyZWFtKGUsdGhpcy5fb25TdWJTdHJlYW1FcnJvci5iaW5kKHRoaXMpKTpuZXcgZy5OdWxsU3RyZWFtKSl9Z2V0IHhmYURhdGEoKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywieGZhRGF0YSIsdGhpcy54ZmFGYWN0b3J5P3tiYm94OnRoaXMueGZhRmFjdG9yeS5nZXRCb3VuZGluZ0JveCh0aGlzLnBhZ2VJbmRleCl9Om51bGwpfWFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsYSl7aWYodGhpcy54ZmFGYWN0b3J5KXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y29uc3QgaT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLG49dGhpcy5wYWdlRGljdCxzPXRoaXMuYW5ub3RhdGlvbnMuc2xpY2UoKSxvPWF3YWl0IHIuQW5ub3RhdGlvbkZhY3Rvcnkuc2F2ZU5ld0Fubm90YXRpb25zKGksdCxhKTtmb3IoY29uc3R7cmVmOmV9b2Ygby5hbm5vdGF0aW9ucylzLnB1c2goZSk7Y29uc3QgYz1uLmdldCgiQW5ub3RzIik7bi5zZXQoIkFubm90cyIscyk7Y29uc3QgbD1bXTtsZXQgaD1udWxsO3RoaXMueHJlZi5lbmNyeXB0JiYoaD10aGlzLnhyZWYuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpO2F3YWl0KDAsUy53cml0ZU9iamVjdCkodGhpcy5yZWYsbixsLGgpO2MmJm4uc2V0KCJBbm5vdHMiLGMpO2NvbnN0IHU9by5kZXBlbmRlbmNpZXM7dS5wdXNoKHtyZWY6dGhpcy5yZWYsZGF0YTpsLmpvaW4oIiIpfSwuLi5vLmFubm90YXRpb25zKTtyZXR1cm4gdX1zYXZlKGUsdCxhKXtjb25zdCByPW5ldyBiLlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe2NvbnN0IG49W107Zm9yKGNvbnN0IHMgb2YgZSlzLm11c3RCZVByaW50ZWQoYSkmJm4ucHVzaChzLnNhdmUocix0LGEpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxpLndhcm4pKGBzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGU9PiEhZSkpfSkpfSkpfWxvYWRSZXNvdXJjZXMoZSl7dGhpcy5yZXNvdXJjZXNQcm9taXNlfHwodGhpcy5yZXNvdXJjZXNQcm9taXNlPXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywicmVzb3VyY2VzIikpO3JldHVybiB0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoKCk9Pm5ldyBwLk9iamVjdExvYWRlcih0aGlzLnJlc291cmNlcyxlLHRoaXMueHJlZikubG9hZCgpKSl9Z2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOmUsc2luazp0LHRhc2s6YSxpbnRlbnQ6cyxjYWNoZUtleTpvLGFubm90YXRpb25TdG9yYWdlOmM9bnVsbH0pe2NvbnN0IGw9dGhpcy5nZXRDb250ZW50U3RyZWFtKCksaD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSksdT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLGQ9dGhpcy54ZmFGYWN0b3J5P251bGw6KDAsbi5nZXROZXdBbm5vdGF0aW9uc01hcCkoYyk7bGV0IGY9UHJvbWlzZS5yZXNvbHZlKG51bGwpO2lmKGQpe2NvbnN0IGU9ZC5nZXQodGhpcy5wYWdlSW5kZXgpO2UmJihmPXIuQW5ub3RhdGlvbkZhY3RvcnkucHJpbnROZXdBbm5vdGF0aW9ucyh1LGEsZSkpfWNvbnN0IGc9UHJvbWlzZS5hbGwoW2wsaF0pLnRoZW4oKChbcl0pPT57Y29uc3QgaT1uZXcgbS5PcGVyYXRvckxpc3Qocyx0KTtlLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIse3RyYW5zcGFyZW5jeTp1Lmhhc0JsZW5kTW9kZXModGhpcy5yZXNvdXJjZXMsdGhpcy5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsY2FjaGVLZXk6b30pO3JldHVybiB1LmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnIsdGFzazphLHJlc291cmNlczp0aGlzLnJlc291cmNlcyxvcGVyYXRvckxpc3Q6aX0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSl9KSk7cmV0dXJuIFByb21pc2UuYWxsKFtnLHRoaXMuX3BhcnNlZEFubm90YXRpb25zLGZdKS50aGVuKChmdW5jdGlvbihbZSx0LHJdKXtyJiYodD10LmNvbmNhdChyKSk7aWYoMD09PXQubGVuZ3RofHxzJmkuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKXtlLmZsdXNoKCEwKTtyZXR1cm57bGVuZ3RoOmUudG90YWxMZW5ndGh9fWNvbnN0IG49ISEocyZpLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMpLG89ISEocyZpLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxsPSEhKHMmaS5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGg9ISEocyZpLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpLGQ9W107Zm9yKGNvbnN0IGUgb2YgdCkob3x8bCYmZS5tdXN0QmVWaWV3ZWQoYyl8fGgmJmUubXVzdEJlUHJpbnRlZChjKSkmJmQucHVzaChlLmdldE9wZXJhdG9yTGlzdCh1LGEscyxuLGMpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxpLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIke2EubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtyZXR1cm57b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSk7cmV0dXJuIFByb21pc2UuYWxsKGQpLnRoZW4oKGZ1bmN0aW9uKHQpe2xldCBhPSExLHI9ITE7Zm9yKGNvbnN0e29wTGlzdDppLHNlcGFyYXRlRm9ybTpuLHNlcGFyYXRlQ2FudmFzOnN9b2YgdCl7ZS5hZGRPcExpc3QoaSk7YXx8PW47cnx8PXN9ZS5mbHVzaCghMCx7Zm9ybTphLGNhbnZhczpyfSk7cmV0dXJue2xlbmd0aDplLnRvdGFsTGVuZ3RofX0pKX0pKX1leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6ZSx0YXNrOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6YSxkaXNhYmxlTm9ybWFsaXphdGlvbjpyLHNpbms6aX0pe2NvbnN0IG49dGhpcy5nZXRDb250ZW50U3RyZWFtKCkscz10aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSk7cmV0dXJuIFByb21pc2UuYWxsKFtuLHNdKS50aGVuKCgoW25dKT0+bmV3IGIuUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOm4sdGFzazp0LHJlc291cmNlczp0aGlzLnJlc291cmNlcyxpbmNsdWRlTWFya2VkQ29udGVudDphLGRpc2FibGVOb3JtYWxpemF0aW9uOnIsc2luazppLHZpZXdCb3g6dGhpcy52aWV3fSkpKX1hc3luYyBnZXRTdHJ1Y3RUcmVlKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygic3RydWN0VHJlZVJvb3QiKTtpZighZSlyZXR1cm4gbnVsbDtyZXR1cm4oYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbZV0pKS5zZXJpYWxpemFibGV9X3BhcnNlU3RydWN0VHJlZShlKXtjb25zdCB0PW5ldyB3LlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7dC5wYXJzZSgpO3JldHVybiB0fWFzeW5jIGdldEFubm90YXRpb25zRGF0YShlLHQsYSl7Y29uc3Qgcj1hd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztpZigwPT09ci5sZW5ndGgpcmV0dXJuW107Y29uc3Qgbj1bXSxzPVtdO2xldCBvO2NvbnN0IGM9ISEoYSZpLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxsPSEhKGEmaS5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGg9ISEoYSZpLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpO2Zvcihjb25zdCBhIG9mIHIpe2NvbnN0IHI9Y3x8bCYmYS52aWV3YWJsZTsocnx8aCYmYS5wcmludGFibGUpJiZuLnB1c2goYS5kYXRhKTtpZihhLmhhc1RleHRDb250ZW50JiZyKXtvfHw9bmV3IGIuUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtzLnB1c2goYS5leHRyYWN0VGV4dENvbnRlbnQobyx0LFstMS8wLC0xLzAsMS8wLDEvMF0pLmNhdGNoKChmdW5jdGlvbihlKXsoMCxpLndhcm4pKGBnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApfSkpKX19YXdhaXQgUHJvbWlzZS5hbGwocyk7cmV0dXJuIG59Z2V0IGFubm90YXRpb25zKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJBbm5vdHMiKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYW5ub3RhdGlvbnMiLEFycmF5LmlzQXJyYXkoZSk/ZTpbXSl9Z2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKCgpPT57Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzLmFubm90YXRpb25zKWUucHVzaChyLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCx0aGlzLnBkZk1hbmFnZXIsdGhpcy5fbG9jYWxJZEZhY3RvcnksITEpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxpLndhcm4pKGBfcGFyc2VkQW5ub3RhdGlvbnM6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSk7cmV0dXJuIFByb21pc2UuYWxsKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTtjb25zdCB0PVtdO2xldCBhO2Zvcihjb25zdCBpIG9mIGUpaSYmKGkgaW5zdGFuY2VvZiByLlBvcHVwQW5ub3RhdGlvbj8oYXx8PVtdKS5wdXNoKGkpOnQucHVzaChpKSk7YSYmdC5wdXNoKC4uLmEpO3JldHVybiB0fSkpfSkpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJfcGFyc2VkQW5ub3RhdGlvbnMiLGUpfWdldCBqc0FjdGlvbnMoKXtjb25zdCBlPSgwLG4uY29sbGVjdEFjdGlvbnMpKHRoaXMueHJlZix0aGlzLnBhZ2VEaWN0LGkuUGFnZUFjdGlvbkV2ZW50VHlwZSk7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImpzQWN0aW9ucyIsZSl9fXQuUGFnZT1QYWdlO2NvbnN0IHY9bmV3IFVpbnQ4QXJyYXkoWzM3LDgwLDY4LDcwLDQ1XSksRj1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLE89bmV3IFVpbnQ4QXJyYXkoWzEwMSwxMTAsMTAwLDExMSw5OCwxMDZdKTtmdW5jdGlvbiBmaW5kKGUsdCxhPTEwMjQscj0hMSl7Y29uc3QgaT10Lmxlbmd0aCxuPWUucGVla0J5dGVzKGEpLHM9bi5sZW5ndGgtaTtpZihzPD0wKXJldHVybiExO2lmKHIpe2NvbnN0IGE9aS0xO2xldCByPW4ubGVuZ3RoLTE7Zm9yKDtyPj1hOyl7bGV0IHM9MDtmb3IoO3M8aSYmbltyLXNdPT09dFthLXNdOylzKys7aWYocz49aSl7ZS5wb3MrPXItYTtyZXR1cm4hMH1yLS19fWVsc2V7bGV0IGE9MDtmb3IoO2E8PXM7KXtsZXQgcj0wO2Zvcig7cjxpJiZuW2Ercl09PT10W3JdOylyKys7aWYocj49aSl7ZS5wb3MrPWE7cmV0dXJuITB9YSsrfX1yZXR1cm4hMX10LlBERkRvY3VtZW50PWNsYXNzIFBERkRvY3VtZW50e2NvbnN0cnVjdG9yKGUsdCl7aWYodC5sZW5ndGg8PTApdGhyb3cgbmV3IGkuSW52YWxpZFBERkV4Y2VwdGlvbigiVGhlIFBERiBmaWxlIGlzIGVtcHR5LCBpLmUuIGl0cyBzaXplIGlzIHplcm8gYnl0ZXMuIik7dGhpcy5wZGZNYW5hZ2VyPWU7dGhpcy5zdHJlYW09dDt0aGlzLnhyZWY9bmV3IEMuWFJlZih0LGUpO3RoaXMuX3BhZ2VQcm9taXNlcz1uZXcgTWFwO3RoaXMuX3ZlcnNpb249bnVsbDtjb25zdCBhPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1jbGFzc3tzdGF0aWMgZ2V0RG9jSWQoKXtyZXR1cm5gZ18ke2UuZG9jSWR9YH1zdGF0aWMgY3JlYXRlRm9udElkKCl7cmV0dXJuImYiKyArK2EuZm9udH1zdGF0aWMgY3JlYXRlT2JqSWQoKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBjcmVhdGVPYmpJZGAgY2FsbGVkLiIpfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRQYWdlT2JqSWRgIGNhbGxlZC4iKX19fXBhcnNlKGUpe3RoaXMueHJlZi5wYXJzZShlKTt0aGlzLmNhdGFsb2c9bmV3IGguQ2F0YWxvZyh0aGlzLnBkZk1hbmFnZXIsdGhpcy54cmVmKX1nZXQgbGluZWFyaXphdGlvbigpe2xldCBlPW51bGw7dHJ5e2U9Zi5MaW5lYXJpemF0aW9uLmNyZWF0ZSh0aGlzLnN0cmVhbSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxpLmluZm8pKGUpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJsaW5lYXJpemF0aW9uIixlKX1nZXQgc3RhcnRYUmVmKCl7Y29uc3QgZT10aGlzLnN0cmVhbTtsZXQgdD0wO2lmKHRoaXMubGluZWFyaXphdGlvbil7ZS5yZXNldCgpO2ZpbmQoZSxPKSYmKHQ9ZS5wb3MrNi1lLnN0YXJ0KX1lbHNle2NvbnN0IGE9MTAyNCxyPUYubGVuZ3RoO2xldCBpPSExLHM9ZS5lbmQ7Zm9yKDshaSYmcz4wOyl7cy09YS1yO3M8MCYmKHM9MCk7ZS5wb3M9cztpPWZpbmQoZSxGLGEsITApfWlmKGkpe2Uuc2tpcCg5KTtsZXQgYTtkb3thPWUuZ2V0Qnl0ZSgpfXdoaWxlKCgwLG4uaXNXaGl0ZVNwYWNlKShhKSk7bGV0IHI9IiI7Zm9yKDthPj0zMiYmYTw9NTc7KXtyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2E9ZS5nZXRCeXRlKCl9dD1wYXJzZUludChyLDEwKTtpc05hTih0KSYmKHQ9MCl9fXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJzdGFydFhSZWYiLHQpfWNoZWNrSGVhZGVyKCl7Y29uc3QgZT10aGlzLnN0cmVhbTtlLnJlc2V0KCk7aWYoIWZpbmQoZSx2KSlyZXR1cm47ZS5tb3ZlU3RhcnQoKTtlLnNraXAodi5sZW5ndGgpO2xldCB0LGE9IiI7Zm9yKDsodD1lLmdldEJ5dGUoKSk+MzImJmEubGVuZ3RoPDc7KWErPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7bi5QREZfVkVSU0lPTl9SRUdFWFAudGVzdChhKT90aGlzLl92ZXJzaW9uPWE6KDAsaS53YXJuKShgSW52YWxpZCBQREYgaGVhZGVyIHZlcnNpb246ICR7YX1gKX1wYXJzZVN0YXJ0WFJlZigpe3RoaXMueHJlZi5zZXRTdGFydFhSZWYodGhpcy5zdGFydFhSZWYpfWdldCBudW1QYWdlcygpe2xldCBlPTA7ZT10aGlzLmNhdGFsb2cuaGFzQWN0dWFsTnVtUGFnZXM/dGhpcy5jYXRhbG9nLm51bVBhZ2VzOnRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0TnVtUGFnZXMoKTp0aGlzLmxpbmVhcml6YXRpb24/dGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzOnRoaXMuY2F0YWxvZy5udW1QYWdlcztyZXR1cm4oMCxpLnNoYWRvdykodGhpcywibnVtUGFnZXMiLGUpfV9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGUsdD0wKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoKGU9PntpZighKChlPXRoaXMueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXtpZigrK3Q+MTApeygwLGkud2FybikoIl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzOiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCByZWFjaGVkIik7cmV0dXJuITF9cmV0dXJuIHRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZS5nZXQoIktpZHMiKSx0KX1jb25zdCBhPSgwLHMuaXNOYW1lKShlLmdldCgiRlQiKSwiU2lnIikscj1lLmdldCgiUmVjdCIpLG49QXJyYXkuaXNBcnJheShyKSYmci5ldmVyeSgoZT0+MD09PWUpKTtyZXR1cm4gYSYmbn0pKX1nZXQgX3hmYVN0cmVhbXMoKXtjb25zdCBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PWUuZ2V0KCJYRkEiKSxhPXsieGRwOnhkcCI6IiIsdGVtcGxhdGU6IiIsZGF0YXNldHM6IiIsY29uZmlnOiIiLGNvbm5lY3Rpb25TZXQ6IiIsbG9jYWxlU2V0OiIiLHN0eWxlc2hlZXQ6IiIsIi94ZHA6eGRwIjoiIn07aWYodCBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmIXQuaXNFbXB0eSl7YVsieGRwOnhkcCJdPXQ7cmV0dXJuIGF9aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IGU9MCxyPXQubGVuZ3RoO2U8cjtlKz0yKXtsZXQgaTtpPTA9PT1lPyJ4ZHA6eGRwIjplPT09ci0yPyIveGRwOnhkcCI6dFtlXTtpZighYS5oYXNPd25Qcm9wZXJ0eShpKSljb250aW51ZTtjb25zdCBuPXRoaXMueHJlZi5mZXRjaElmUmVmKHRbZSsxXSk7biBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmIW4uaXNFbXB0eSYmKGFbaV09bil9cmV0dXJuIGF9Z2V0IHhmYURhdGFzZXRzKCl7Y29uc3QgZT10aGlzLl94ZmFTdHJlYW1zO2lmKCFlKXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCk7Zm9yKGNvbnN0IHQgb2ZbImRhdGFzZXRzIiwieGRwOnhkcCJdKXtjb25zdCBhPWVbdF07aWYoYSl0cnl7Y29uc3QgZT17W3RdOigwLGkuc3RyaW5nVG9VVEY4U3RyaW5nKShhLmdldFN0cmluZygpKX07cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixuZXcgZC5EYXRhc2V0UmVhZGVyKGUpKX1jYXRjaChlKXsoMCxpLndhcm4pKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTticmVha319cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixudWxsKX1nZXQgeGZhRGF0YSgpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W2Escl1vZiBPYmplY3QuZW50cmllcyhlKSlpZihyKXRyeXt0W2FdPSgwLGkuc3RyaW5nVG9VVEY4U3RyaW5nKShyLmdldFN0cmluZygpKX1jYXRjaChlKXsoMCxpLndhcm4pKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTtyZXR1cm4gbnVsbH1yZXR1cm4gdH1nZXQgeGZhRmFjdG9yeSgpe2xldCBlO3RoaXMucGRmTWFuYWdlci5lbmFibGVYZmEmJnRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyYmdGhpcy5mb3JtSW5mby5oYXNYZmEmJiF0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtJiYoZT10aGlzLnhmYURhdGEpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJ4ZmFGYWN0b3J5IixlP25ldyB4LlhGQUZhY3RvcnkoZSk6bnVsbCl9Z2V0IGlzUHVyZVhmYSgpe3JldHVybiEhdGhpcy54ZmFGYWN0b3J5JiZ0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpfWdldCBodG1sRm9yWGZhKCl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0UGFnZXMoKTpudWxsfWFzeW5jIGxvYWRYZmFJbWFnZXMoKXtjb25zdCBlPWF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJ4ZmFJbWFnZXMiKTtpZighZSlyZXR1cm47Y29uc3QgdD1lLmdldEtleXMoKSxhPW5ldyBwLk9iamVjdExvYWRlcihlLHQsdGhpcy54cmVmKTthd2FpdCBhLmxvYWQoKTtjb25zdCByPW5ldyBNYXA7Zm9yKGNvbnN0IGEgb2YgdCl7Y29uc3QgdD1lLmdldChhKTt0IGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtJiZyLnNldChhLHQuZ2V0Qnl0ZXMoKSl9dGhpcy54ZmFGYWN0b3J5LnNldEltYWdlcyhyKX1hc3luYyBsb2FkWGZhRm9udHMoZSx0KXtjb25zdCBhPWF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpO2lmKCFhKXJldHVybjtjb25zdCByPWF3YWl0IGEuZ2V0QXN5bmMoIkRSIik7aWYoIShyIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgYz1uZXcgcC5PYmplY3RMb2FkZXIocixbIkZvbnQiXSx0aGlzLnhyZWYpO2F3YWl0IGMubG9hZCgpO2NvbnN0IGw9ci5nZXQoIkZvbnQiKTtpZighKGwgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCBoPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnBkZk1hbmFnZXIuZXZhbHVhdG9yT3B0aW9ucyk7aC51c2VTeXN0ZW1Gb250cz0hMTtjb25zdCB1PW5ldyBiLlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6LTEsaWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5jYXRhbG9nLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuY2F0YWxvZy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLmNhdGFsb2cuc3RhbmRhcmRGb250RGF0YUNhY2hlLG9wdGlvbnM6aH0pLGQ9bmV3IG0uT3BlcmF0b3JMaXN0LGY9W10sZz17Z2V0IGZvbnQoKXtyZXR1cm4gZi5hdCgtMSl9LHNldCBmb250KGUpe2YucHVzaChlKX0sY2xvbmUoKXtyZXR1cm4gdGhpc319LHk9bmV3IE1hcDtsLmZvckVhY2goKChlLHQpPT57eS5zZXQoZSx0KX0pKTtjb25zdCB3PVtdO2Zvcihjb25zdFtlLGFdb2YgeSl7Y29uc3Qgbz1hLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZighKG8gaW5zdGFuY2VvZiBzLkRpY3QpKWNvbnRpbnVlO2xldCBjPW8uZ2V0KCJGb250RmFtaWx5Iik7Yz1jLnJlcGxhY2VBbGwoL1sgXSsoXGQpL2csIiQxIik7Y29uc3QgbD17Zm9udEZhbWlseTpjLGZvbnRXZWlnaHQ6by5nZXQoIkZvbnRXZWlnaHQiKSxpdGFsaWNBbmdsZTotby5nZXQoIkl0YWxpY0FuZ2xlIil9OygwLG4udmFsaWRhdGVDU1NGb250KShsKSYmdy5wdXNoKHUuaGFuZGxlU2V0Rm9udChyLFtzLk5hbWUuZ2V0KGUpLDFdLG51bGwsZCx0LGcsbnVsbCxsKS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsaS53YXJuKShgbG9hZFhmYUZvbnRzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpfWF3YWl0IFByb21pc2UuYWxsKHcpO2NvbnN0IFM9dGhpcy54ZmFGYWN0b3J5LnNldEZvbnRzKGYpO2lmKCFTKXJldHVybjtoLmlnbm9yZUVycm9ycz0hMDt3Lmxlbmd0aD0wO2YubGVuZ3RoPTA7Y29uc3QgeD1uZXcgU2V0O2Zvcihjb25zdCBlIG9mIFMpKDAsby5nZXRYZmFGb250TmFtZSkoYCR7ZX0tUmVndWxhcmApfHx4LmFkZChlKTt4LnNpemUmJlMucHVzaCgiUGRmSlMtRmFsbGJhY2siKTtmb3IoY29uc3QgZSBvZiBTKWlmKCF4LmhhcyhlKSlmb3IoY29uc3QgYSBvZlt7bmFtZToiUmVndWxhciIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MH0se25hbWU6IkJvbGQiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJJdGFsaWMiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjEyfSx7bmFtZToiQm9sZEl0YWxpYyIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MTJ9XSl7Y29uc3Qgbj1gJHtlfS0ke2EubmFtZX1gLGM9KDAsby5nZXRYZmFGb250RGljdCkobik7dy5wdXNoKHUuaGFuZGxlU2V0Rm9udChyLFtzLk5hbWUuZ2V0KG4pLDFdLG51bGwsZCx0LGcsYyx7Zm9udEZhbWlseTplLGZvbnRXZWlnaHQ6YS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOmEuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsaS53YXJuKShgbG9hZFhmYUZvbnRzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpfWF3YWl0IFByb21pc2UuYWxsKHcpO3RoaXMueGZhRmFjdG9yeS5hcHBlbmRGb250cyhmLHgpfWFzeW5jIHNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3Rvcnkuc2VyaWFsaXplRGF0YShlKTpudWxsfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuY2F0YWxvZy52ZXJzaW9ufHx0aGlzLl92ZXJzaW9ufWdldCBmb3JtSW5mbygpe2NvbnN0IGU9e2hhc0ZpZWxkczohMSxoYXNBY3JvRm9ybTohMSxoYXNYZmE6ITEsaGFzU2lnbmF0dXJlczohMX0sdD10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIXQpcmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImZvcm1JbmZvIixlKTt0cnl7Y29uc3QgYT10LmdldCgiRmllbGRzIikscj1BcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aD4wO2UuaGFzRmllbGRzPXI7Y29uc3QgaT10LmdldCgiWEZBIik7ZS5oYXNYZmE9QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MHx8aSBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmIWkuaXNFbXB0eTtjb25zdCBuPSEhKDEmdC5nZXQoIlNpZ0ZsYWdzIikpLHM9biYmdGhpcy5faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhhKTtlLmhhc0Fjcm9Gb3JtPXImJiFzO2UuaGFzU2lnbmF0dXJlcz1ufWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsaS53YXJuKShgQ2Fubm90IGZldGNoIGZvcm0gaW5mb3JtYXRpb246ICIke2V9Ii5gKX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiZm9ybUluZm8iLGUpfWdldCBkb2N1bWVudEluZm8oKXtjb25zdCBlPXtQREZGb3JtYXRWZXJzaW9uOnRoaXMudmVyc2lvbixMYW5ndWFnZTp0aGlzLmNhdGFsb2cubGFuZyxFbmNyeXB0RmlsdGVyTmFtZTp0aGlzLnhyZWYuZW5jcnlwdD90aGlzLnhyZWYuZW5jcnlwdC5maWx0ZXJOYW1lOm51bGwsSXNMaW5lYXJpemVkOiEhdGhpcy5saW5lYXJpemF0aW9uLElzQWNyb0Zvcm1QcmVzZW50OnRoaXMuZm9ybUluZm8uaGFzQWNyb0Zvcm0sSXNYRkFQcmVzZW50OnRoaXMuZm9ybUluZm8uaGFzWGZhLElzQ29sbGVjdGlvblByZXNlbnQ6ISF0aGlzLmNhdGFsb2cuY29sbGVjdGlvbixJc1NpZ25hdHVyZXNQcmVzZW50OnRoaXMuZm9ybUluZm8uaGFzU2lnbmF0dXJlc307bGV0IHQ7dHJ5e3Q9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJbmZvIil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxpLmluZm8pKCJUaGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfWlmKCEodCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImRvY3VtZW50SW5mbyIsZSk7Zm9yKGNvbnN0IGEgb2YgdC5nZXRLZXlzKCkpe2NvbnN0IHI9dC5nZXQoYSk7c3dpdGNoKGEpe2Nhc2UiVGl0bGUiOmNhc2UiQXV0aG9yIjpjYXNlIlN1YmplY3QiOmNhc2UiS2V5d29yZHMiOmNhc2UiQ3JlYXRvciI6Y2FzZSJQcm9kdWNlciI6Y2FzZSJDcmVhdGlvbkRhdGUiOmNhc2UiTW9kRGF0ZSI6aWYoInN0cmluZyI9PXR5cGVvZiByKXtlW2FdPSgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKHIpO2NvbnRpbnVlfWJyZWFrO2Nhc2UiVHJhcHBlZCI6aWYociBpbnN0YW5jZW9mIHMuTmFtZSl7ZVthXT1yO2NvbnRpbnVlfWJyZWFrO2RlZmF1bHQ6bGV0IHQ7c3dpdGNoKHR5cGVvZiByKXtjYXNlInN0cmluZyI6dD0oMCxpLnN0cmluZ1RvUERGU3RyaW5nKShyKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjp0PXI7YnJlYWs7ZGVmYXVsdDpyIGluc3RhbmNlb2Ygcy5OYW1lJiYodD1yKX1pZih2b2lkIDA9PT10KXsoMCxpLndhcm4pKGBCYWQgdmFsdWUsIGZvciBjdXN0b20ga2V5ICIke2F9IiwgaW4gSW5mbzogJHtyfS5gKTtjb250aW51ZX1lLkN1c3RvbXx8KGUuQ3VzdG9tPU9iamVjdC5jcmVhdGUobnVsbCkpO2UuQ3VzdG9tW2FdPXQ7Y29udGludWV9KDAsaS53YXJuKShgQmFkIHZhbHVlLCBmb3Iga2V5ICIke2F9IiwgaW4gSW5mbzogJHtyfS5gKX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiZG9jdW1lbnRJbmZvIixlKX1nZXQgZmluZ2VycHJpbnRzKCl7ZnVuY3Rpb24gdmFsaWRhdGUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wJiYiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiIT09ZX1mdW5jdGlvbiBoZXhTdHJpbmcoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPWEudG9TdHJpbmcoMTYpO3QucHVzaChlLnBhZFN0YXJ0KDIsIjAiKSl9cmV0dXJuIHQuam9pbigiIil9Y29uc3QgZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7bGV0IHQsYTtpZihBcnJheS5pc0FycmF5KGUpJiZ2YWxpZGF0ZShlWzBdKSl7dD0oMCxpLnN0cmluZ1RvQnl0ZXMpKGVbMF0pO2VbMV0hPT1lWzBdJiZ2YWxpZGF0ZShlWzFdKSYmKGE9KDAsaS5zdHJpbmdUb0J5dGVzKShlWzFdKSl9ZWxzZSB0PSgwLGwuY2FsY3VsYXRlTUQ1KSh0aGlzLnN0cmVhbS5nZXRCeXRlUmFuZ2UoMCwxMDI0KSwwLDEwMjQpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJmaW5nZXJwcmludHMiLFtoZXhTdHJpbmcodCksYT9oZXhTdHJpbmcoYSk6bnVsbF0pfWFzeW5jIF9nZXRMaW5lYXJpemF0aW9uUGFnZShlKXtjb25zdHtjYXRhbG9nOnQsbGluZWFyaXphdGlvbjphLHhyZWY6cn09dGhpcyxuPXMuUmVmLmdldChhLm9iamVjdE51bWJlckZpcnN0LDApO3RyeXtjb25zdCBlPWF3YWl0IHIuZmV0Y2hBc3luYyhuKTtpZihlIGluc3RhbmNlb2Ygcy5EaWN0KXtsZXQgYT1lLmdldFJhdygiVHlwZSIpO2EgaW5zdGFuY2VvZiBzLlJlZiYmKGE9YXdhaXQgci5mZXRjaEFzeW5jKGEpKTtpZigoMCxzLmlzTmFtZSkoYSwiUGFnZSIpfHwhZS5oYXMoIlR5cGUiKSYmIWUuaGFzKCJLaWRzIikpe3QucGFnZUtpZHNDb3VudENhY2hlLmhhcyhuKXx8dC5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KG4sMSk7dC5wYWdlSW5kZXhDYWNoZS5oYXMobil8fHQucGFnZUluZGV4Q2FjaGUucHV0KG4sMCk7cmV0dXJuW2Usbl19fXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgcG9pbnQgdG8gYSB2YWxpZCBQYWdlIGRpY3Rpb25hcnkuIil9Y2F0Y2goYSl7KDAsaS53YXJuKShgX2dldExpbmVhcml6YXRpb25QYWdlOiAiJHthLm1lc3NhZ2V9Ii5gKTtyZXR1cm4gdC5nZXRQYWdlRGljdChlKX19Z2V0UGFnZShlKXtjb25zdCB0PXRoaXMuX3BhZ2VQcm9taXNlcy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdHtjYXRhbG9nOmEsbGluZWFyaXphdGlvbjpyLHhmYUZhY3Rvcnk6aX09dGhpcztsZXQgbjtuPWk/UHJvbWlzZS5yZXNvbHZlKFtzLkRpY3QuZW1wdHksbnVsbF0pOnI/LnBhZ2VGaXJzdD09PWU/dGhpcy5fZ2V0TGluZWFyaXphdGlvblBhZ2UoZSk6YS5nZXRQYWdlRGljdChlKTtuPW4udGhlbigoKFt0LHJdKT0+bmV3IFBhZ2Uoe3BkZk1hbmFnZXI6dGhpcy5wZGZNYW5hZ2VyLHhyZWY6dGhpcy54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OnQscmVmOnIsZ2xvYmFsSWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTphLnN5c3RlbUZvbnRDYWNoZSxub25CbGVuZE1vZGVzU2V0OmEubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Oml9KSkpO3RoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxuKTtyZXR1cm4gbn1hc3luYyBjaGVja0ZpcnN0UGFnZShlPSExKXtpZighZSl0cnl7YXdhaXQgdGhpcy5nZXRQYWdlKDApfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLlhSZWZFbnRyeUV4Y2VwdGlvbil7dGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKTthd2FpdCB0aGlzLmNsZWFudXAoKTt0aHJvdyBuZXcgbi5YUmVmUGFyc2VFeGNlcHRpb259fX1hc3luYyBjaGVja0xhc3RQYWdlKGU9ITEpe2NvbnN0e2NhdGFsb2c6dCxwZGZNYW5hZ2VyOmF9PXRoaXM7dC5zZXRBY3R1YWxOdW1QYWdlcygpO2xldCByO3RyeXthd2FpdCBQcm9taXNlLmFsbChbYS5lbnN1cmVEb2MoInhmYUZhY3RvcnkiKSxhLmVuc3VyZURvYygibGluZWFyaXphdGlvbiIpLGEuZW5zdXJlQ2F0YWxvZygibnVtUGFnZXMiKV0pO2lmKHRoaXMueGZhRmFjdG9yeSlyZXR1cm47cj10aGlzLmxpbmVhcml6YXRpb24/dGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzOnQubnVtUGFnZXM7aWYoIU51bWJlci5pc0ludGVnZXIocikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaXMgbm90IGFuIGludGVnZXIuIik7aWYocjw9MSlyZXR1cm47YXdhaXQgdGhpcy5nZXRQYWdlKHItMSl9Y2F0Y2gocyl7dGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZShyLTEpO2F3YWl0IHRoaXMuY2xlYW51cCgpO2lmKHMgaW5zdGFuY2VvZiBuLlhSZWZFbnRyeUV4Y2VwdGlvbiYmIWUpdGhyb3cgbmV3IG4uWFJlZlBhcnNlRXhjZXB0aW9uOygwLGkud2FybikoYGNoZWNrTGFzdFBhZ2UgLSBpbnZhbGlkIC9QYWdlcyB0cmVlIC9Db3VudDogJHtyfS5gKTtsZXQgbzt0cnl7bz1hd2FpdCB0LmdldEFsbFBhZ2VEaWN0cyhlKX1jYXRjaChhKXtpZihhIGluc3RhbmNlb2Ygbi5YUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IG5ldyBuLlhSZWZQYXJzZUV4Y2VwdGlvbjt0LnNldEFjdHVhbE51bVBhZ2VzKDEpO3JldHVybn1mb3IoY29uc3RbZSxbcixpXV1vZiBvKXtsZXQgbjtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe249UHJvbWlzZS5yZWplY3Qocik7bi5jYXRjaCgoKCk9Pnt9KSl9ZWxzZSBuPVByb21pc2UucmVzb2x2ZShuZXcgUGFnZSh7cGRmTWFuYWdlcjphLHhyZWY6dGhpcy54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OnIscmVmOmksZ2xvYmFsSWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6dC5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0LmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnQuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dC5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0LnN5c3RlbUZvbnRDYWNoZSxub25CbGVuZE1vZGVzU2V0OnQubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Om51bGx9KSk7dGhpcy5fcGFnZVByb21pc2VzLnNldChlLG4pfXQuc2V0QWN0dWFsTnVtUGFnZXMoby5zaXplKX19Zm9udEZhbGxiYWNrKGUsdCl7cmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soZSx0KX1hc3luYyBjbGVhbnVwKGU9ITEpe3JldHVybiB0aGlzLmNhdGFsb2c/dGhpcy5jYXRhbG9nLmNsZWFudXAoZSk6KDAsdS5jbGVhckdsb2JhbENhY2hlcykoKX1fY29sbGVjdEZpZWxkT2JqZWN0cyhlLHQsYSl7Y29uc3Qgbj10aGlzLnhyZWYuZmV0Y2hJZlJlZih0KTtpZihuLmhhcygiVCIpKXtjb25zdCB0PSgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKG4uZ2V0KCJUIikpO2U9IiI9PT1lP3Q6YCR7ZX0uJHt0fWB9YS5oYXMoZSl8fGEuc2V0KGUsW10pO2EuZ2V0KGUpLnB1c2goci5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLHQsdGhpcy5wZGZNYW5hZ2VyLHRoaXMuX2xvY2FsSWRGYWN0b3J5LCEwKS50aGVuKChlPT5lPy5nZXRGaWVsZE9iamVjdCgpKSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLGkud2FybikoYF9jb2xsZWN0RmllbGRPYmplY3RzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO2lmKG4uaGFzKCJLaWRzIikpe2NvbnN0IHQ9bi5nZXQoIktpZHMiKTtmb3IoY29uc3QgciBvZiB0KXRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMoZSxyLGEpfX1nZXQgZmllbGRPYmplY3RzKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0aGlzLmNhdGFsb2cuYWNyb0Zvcm0uZ2V0KCJGaWVsZHMiKSl0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGUsdCk7Y29uc3QgYT1bXTtmb3IoY29uc3RbcixpXW9mIHQpYS5wdXNoKFByb21pc2UuYWxsKGkpLnRoZW4oKHQ9PnsodD10LmZpbHRlcigoZT0+ISFlKSkpLmxlbmd0aD4wJiYoZVtyXT10KX0pKSk7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwoYSkudGhlbigoKCk9PmUpKSl9Z2V0IGhhc0pTQWN0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiX3BhcnNlSGFzSlNBY3Rpb25zIik7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImhhc0pTQWN0aW9ucyIsZSl9YXN5bmMgX3BhcnNlSGFzSlNBY3Rpb25zKCl7Y29uc3RbZSx0XT1hd2FpdCBQcm9taXNlLmFsbChbdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImpzQWN0aW9ucyIpLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpXSk7cmV0dXJuISFlfHwhIXQmJk9iamVjdC52YWx1ZXModCkuc29tZSgoZT0+ZS5zb21lKChlPT5udWxsIT09ZS5hY3Rpb25zKSkpKX1nZXQgY2FsY3VsYXRpb25PcmRlcklkcygpe2NvbnN0IGU9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCFlPy5oYXMoIkNPIikpcmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHQ9ZS5nZXQoIkNPIik7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiB0KWUgaW5zdGFuY2VvZiBzLlJlZiYmYS5wdXNoKGUudG9TdHJpbmcoKSk7cmV0dXJuIDA9PT1hLmxlbmd0aD8oMCxpLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsaS5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLGEpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Qb3B1cEFubm90YXRpb249dC5NYXJrdXBBbm5vdGF0aW9uPXQuQW5ub3RhdGlvbkZhY3Rvcnk9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGU9dC5Bbm5vdGF0aW9uPXZvaWQgMDt0LmdldFF1YWRQb2ludHM9Z2V0UXVhZFBvaW50czt2YXIgcj1hKDIpLGk9YSgzKSxuPWEoMTEpLHM9YSg0KSxvPWEoNjYpLGM9YSg1KSxsPWEoNjApLGg9YSg3MCksdT1hKDEyKSxkPWEoNzMpLGY9YSg3NiksZz1hKDY0KSxwPWEoOCksbT1hKDc3KTt0LkFubm90YXRpb25GYWN0b3J5PWNsYXNzIEFubm90YXRpb25GYWN0b3J5e3N0YXRpYyBjcmVhdGUoZSx0LGEscixpKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxhLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxhLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksYS5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksaT90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LGEpOi0xXSkudGhlbigoKFtuLHMsbyxjLGxdKT0+YS5lbnN1cmUodGhpcywiX2NyZWF0ZSIsW2UsdCxhLHIsbixvLGMsaSxsXSkpKX1zdGF0aWMgX2NyZWF0ZShlLHQsYSxuLG8sYz1udWxsLGwsaCx1PS0xKXtjb25zdCBkPWUuZmV0Y2hJZlJlZih0KTtpZighKGQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCBmPXQgaW5zdGFuY2VvZiBzLlJlZj90LnRvU3RyaW5nKCk6YGFubm90XyR7bi5jcmVhdGVPYmpJZCgpfWA7bGV0IGc9ZC5nZXQoIlN1YnR5cGUiKTtnPWcgaW5zdGFuY2VvZiBzLk5hbWU/Zy5uYW1lOm51bGw7Y29uc3QgcD1vIGluc3RhbmNlb2Ygcy5EaWN0P286cy5EaWN0LmVtcHR5LG09e3hyZWY6ZSxyZWY6dCxkaWN0OmQsc3VidHlwZTpnLGlkOmYscGRmTWFuYWdlcjphLGFjcm9Gb3JtOnAsYXR0YWNobWVudHM6Yyx4ZmFEYXRhc2V0czpsLGNvbGxlY3RGaWVsZHM6aCxuZWVkQXBwZWFyYW5jZXM6IWgmJiEwPT09cC5nZXQoIk5lZWRBcHBlYXJhbmNlcyIpLHBhZ2VJbmRleDp1LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmEuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH07c3dpdGNoKGcpe2Nhc2UiTGluayI6cmV0dXJuIG5ldyBMaW5rQW5ub3RhdGlvbihtKTtjYXNlIlRleHQiOnJldHVybiBuZXcgVGV4dEFubm90YXRpb24obSk7Y2FzZSJXaWRnZXQiOmxldCBlPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6ZCxrZXk6IkZUIn0pO2U9ZSBpbnN0YW5jZW9mIHMuTmFtZT9lLm5hbWU6bnVsbDtzd2l0Y2goZSl7Y2FzZSJUeCI6cmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbihtKTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uKG0pO2Nhc2UiQ2giOnJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbihtKTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uKG0pfSgwLHIud2FybikoYFVuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIiR7ZX0iLCBmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLmApO3JldHVybiBuZXcgV2lkZ2V0QW5ub3RhdGlvbihtKTtjYXNlIlBvcHVwIjpyZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbihtKTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEZyZWVUZXh0QW5ub3RhdGlvbihtKTtjYXNlIkxpbmUiOnJldHVybiBuZXcgTGluZUFubm90YXRpb24obSk7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbihtKTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uKG0pO2Nhc2UiUG9seUxpbmUiOnJldHVybiBuZXcgUG9seWxpbmVBbm5vdGF0aW9uKG0pO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbihtKTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IENhcmV0QW5ub3RhdGlvbihtKTtjYXNlIkluayI6cmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uKG0pO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb24obSk7Y2FzZSJVbmRlcmxpbmUiOnJldHVybiBuZXcgVW5kZXJsaW5lQW5ub3RhdGlvbihtKTtjYXNlIlNxdWlnZ2x5IjpyZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbihtKTtjYXNlIlN0cmlrZU91dCI6cmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uKG0pO2Nhc2UiU3RhbXAiOnJldHVybiBuZXcgU3RhbXBBbm5vdGF0aW9uKG0pO2Nhc2UiRmlsZUF0dGFjaG1lbnQiOnJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKG0pO2RlZmF1bHQ6aHx8KGc/KDAsci53YXJuKShgVW5pbXBsZW1lbnRlZCBhbm5vdGF0aW9uIHR5cGUgIiR7Z30iLCBmYWxsaW5nIGJhY2sgdG8gYmFzZSBhbm5vdGF0aW9uLmApOigwLHIud2FybikoIkFubm90YXRpb24gaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgL1N1YnR5cGUuIikpO3JldHVybiBuZXcgQW5ub3RhdGlvbihtKX19c3RhdGljIGFzeW5jIF9nZXRQYWdlSW5kZXgoZSx0LGEpe3RyeXtjb25zdCByPWF3YWl0IGUuZmV0Y2hJZlJlZkFzeW5jKHQpO2lmKCEociBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuLTE7Y29uc3QgaT1yLmdldFJhdygiUCIpO2lmKCEoaSBpbnN0YW5jZW9mIHMuUmVmKSlyZXR1cm4tMTtyZXR1cm4gYXdhaXQgYS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFtpXSl9Y2F0Y2goZSl7KDAsci53YXJuKShgX2dldFBhZ2VJbmRleDogIiR7ZX0iLmApO3JldHVybi0xfX1zdGF0aWMgYXN5bmMgc2F2ZU5ld0Fubm90YXRpb25zKGUsdCxhKXtjb25zdCBpPWUueHJlZjtsZXQgbjtjb25zdCBjPVtdLGw9W107Zm9yKGNvbnN0IGggb2YgYSlzd2l0Y2goaC5hbm5vdGF0aW9uVHlwZSl7Y2FzZSByLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUOmlmKCFuKXtjb25zdCBlPW5ldyBzLkRpY3QoaSk7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlR5cGUxIikpO2Uuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO2NvbnN0IHQ9W107bj1pLmdldE5ld1RlbXBvcmFyeVJlZigpO2F3YWl0KDAsby53cml0ZU9iamVjdCkobixlLHQsbnVsbCk7Yy5wdXNoKHtyZWY6bixkYXRhOnQuam9pbigiIil9KX1sLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24oaSxoLGMse2V2YWx1YXRvcjplLHRhc2s6dCxiYXNlRm9udFJlZjpufSkpO2JyZWFrO2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6bC5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihpLGgsYykpfXJldHVybnthbm5vdGF0aW9uczphd2FpdCBQcm9taXNlLmFsbChsKSxkZXBlbmRlbmNpZXM6Y319c3RhdGljIGFzeW5jIHByaW50TmV3QW5ub3RhdGlvbnMoZSx0LGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGk9ZS54cmVmLHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpufT1lLm9wdGlvbnMscz1bXTtmb3IoY29uc3QgbyBvZiBhKXN3aXRjaChvLmFubm90YXRpb25UeXBlKXtjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6cy5wdXNoKEZyZWVUZXh0QW5ub3RhdGlvbi5jcmVhdGVOZXdQcmludEFubm90YXRpb24oaSxvLHtldmFsdWF0b3I6ZSx0YXNrOnQsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bn0pKTticmVhaztjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOnMucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihpLG8se2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOm59KSl9cmV0dXJuIFByb21pc2UuYWxsKHMpfX07ZnVuY3Rpb24gZ2V0UmdiQ29sb3IoZSx0PW5ldyBVaW50OENsYW1wZWRBcnJheSgzKSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHQ7Y29uc3QgYT10fHxuZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAxOnUuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShlLDAsYSwwKTtyZXR1cm4gYTtjYXNlIDM6dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7Y2FzZSA0OnUuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShlLDAsYSwwKTtyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBnZXRQZGZDb2xvckFycmF5KGUpe3JldHVybiBBcnJheS5mcm9tKGUsKGU9PmUvMjU1KSl9ZnVuY3Rpb24gZ2V0UXVhZFBvaW50cyhlLHQpe2NvbnN0IGE9ZS5nZXRBcnJheSgiUXVhZFBvaW50cyIpO2lmKCFBcnJheS5pc0FycmF5KGEpfHwwPT09YS5sZW5ndGh8fGEubGVuZ3RoJTg+MClyZXR1cm4gbnVsbDtjb25zdCByPVtdO2ZvcihsZXQgZT0wLGk9YS5sZW5ndGgvODtlPGk7ZSsrKXtsZXQgaT0xLzAsbj0tMS8wLHM9MS8wLG89LTEvMDtmb3IobGV0IHQ9OCplLHI9OCplKzg7dDxyO3QrPTIpe2NvbnN0IGU9YVt0XSxyPWFbdCsxXTtpPU1hdGgubWluKGUsaSk7bj1NYXRoLm1heChlLG4pO3M9TWF0aC5taW4ocixzKTtvPU1hdGgubWF4KHIsbyl9aWYobnVsbCE9PXQmJihpPHRbMF18fG4+dFsyXXx8czx0WzFdfHxvPnRbM10pKXJldHVybiBudWxsO3IucHVzaChbe3g6aSx5Om99LHt4Om4seTpvfSx7eDppLHk6c30se3g6bix5OnN9XSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtTWF0cml4KGUsdCxhKXtjb25zdFtpLG4scyxvXT1yLlV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3godCxhKTtpZihpPT09c3x8bj09PW8pcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTtjb25zdCBjPShlWzJdLWVbMF0pLyhzLWkpLGw9KGVbM10tZVsxXSkvKG8tbik7cmV0dXJuW2MsMCwwLGwsZVswXS1pKmMsZVsxXS1uKmxdfWNsYXNzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLnNldFRpdGxlKHQuZ2V0KCJUIikpO3RoaXMuc2V0Q29udGVudHModC5nZXQoIkNvbnRlbnRzIikpO3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZSh0LmdldCgiTSIpKTt0aGlzLnNldEZsYWdzKHQuZ2V0KCJGIikpO3RoaXMuc2V0UmVjdGFuZ2xlKHQuZ2V0QXJyYXkoIlJlY3QiKSk7dGhpcy5zZXRDb2xvcih0LmdldEFycmF5KCJDIikpO3RoaXMuc2V0Qm9yZGVyU3R5bGUodCk7dGhpcy5zZXRBcHBlYXJhbmNlKHQpO3RoaXMuc2V0T3B0aW9uYWxDb250ZW50KHQpO2NvbnN0IG49dC5nZXQoIk1LIik7dGhpcy5zZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQ29sb3JzKG4pO3RoaXMuc2V0Um90YXRpb24obik7dGhpcy5fc3RyZWFtcz1bXTt0aGlzLmFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UpO2NvbnN0IG89ISEodGhpcy5mbGFncyZyLkFubm90YXRpb25GbGFnLkxPQ0tFRCksYz0hISh0aGlzLmZsYWdzJnIuQW5ub3RhdGlvbkZsYWcuTE9DS0VEQ09OVEVOVFMpO3RoaXMuZGF0YT17YW5ub3RhdGlvbkZsYWdzOnRoaXMuZmxhZ3MsYm9yZGVyU3R5bGU6dGhpcy5ib3JkZXJTdHlsZSxjb2xvcjp0aGlzLmNvbG9yLGJhY2tncm91bmRDb2xvcjp0aGlzLmJhY2tncm91bmRDb2xvcixib3JkZXJDb2xvcjp0aGlzLmJvcmRlckNvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sY29udGVudHNPYmo6dGhpcy5fY29udGVudHMsaGFzQXBwZWFyYW5jZTohIXRoaXMuYXBwZWFyYW5jZSxpZDplLmlkLG1vZGlmaWNhdGlvbkRhdGU6dGhpcy5tb2RpZmljYXRpb25EYXRlLHJlY3Q6dGhpcy5yZWN0YW5nbGUsc3VidHlwZTplLnN1YnR5cGUsaGFzT3duQ2FudmFzOiExLG5vUm90YXRlOiEhKHRoaXMuZmxhZ3Mmci5Bbm5vdGF0aW9uRmxhZy5OT1JPVEFURSksbm9IVE1MOm8mJmN9O2lmKGUuY29sbGVjdEZpZWxkcyl7Y29uc3Qgbj10LmdldCgiS2lkcyIpO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2Ygbil0IGluc3RhbmNlb2Ygcy5SZWYmJmUucHVzaCh0LnRvU3RyaW5nKCkpOzAhPT1lLmxlbmd0aCYmKHRoaXMuZGF0YS5raWRJZHM9ZSl9dGhpcy5kYXRhLmFjdGlvbnM9KDAsaS5jb2xsZWN0QWN0aW9ucykoYSx0LHIuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZSk7dGhpcy5kYXRhLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUodCk7dGhpcy5kYXRhLnBhZ2VJbmRleD1lLnBhZ2VJbmRleH10aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1lLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9bnVsbDt0aGlzLl9uZWVkQXBwZWFyYW5jZXM9ITF9X2hhc0ZsYWcoZSx0KXtyZXR1cm4hIShlJnQpfV9pc1ZpZXdhYmxlKGUpe3JldHVybiF0aGlzLl9oYXNGbGFnKGUsci5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpJiYhdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuTk9WSUVXKX1faXNQcmludGFibGUoZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLlBSSU5UKSYmIXRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLklOVklTSUJMRSl9bXVzdEJlVmlld2VkKGUpe2NvbnN0IHQ9ZT8uZ2V0KHRoaXMuZGF0YS5pZCk/LmhpZGRlbjtyZXR1cm4gdm9pZCAwIT09dD8hdDp0aGlzLnZpZXdhYmxlJiYhdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLHIuQW5ub3RhdGlvbkZsYWcuSElEREVOKX1tdXN0QmVQcmludGVkKGUpe2NvbnN0IHQ9ZT8uZ2V0KHRoaXMuZGF0YS5pZCk/LnByaW50O3JldHVybiB2b2lkIDAhPT10P3Q6dGhpcy5wcmludGFibGV9Z2V0IHZpZXdhYmxlKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmKDA9PT10aGlzLmZsYWdzfHx0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpKX1nZXQgcHJpbnRhYmxlKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmKDAhPT10aGlzLmZsYWdzJiZ0aGlzLl9pc1ByaW50YWJsZSh0aGlzLmZsYWdzKSl9X3BhcnNlU3RyaW5nSGVscGVyKGUpe2NvbnN0IHQ9InN0cmluZyI9PXR5cGVvZiBlPygwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpOiIiO3JldHVybntzdHI6dCxkaXI6dCYmInJ0bCI9PT0oMCxsLmJpZGkpKHQpLmRpcj8icnRsIjoibHRyIn19c2V0RGVmYXVsdEFwcGVhcmFuY2UoZSl7Y29uc3QgdD0oMCxpLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIHQ/dDoiIjt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLG4ucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UpfXNldFRpdGxlKGUpe3RoaXMuX3RpdGxlPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfXNldENvbnRlbnRzKGUpe3RoaXMuX2NvbnRlbnRzPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfXNldE1vZGlmaWNhdGlvbkRhdGUoZSl7dGhpcy5tb2RpZmljYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9c2V0RmxhZ3MoZSl7dGhpcy5mbGFncz1OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjA/ZTowfWhhc0ZsYWcoZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxlKX1zZXRSZWN0YW5nbGUoZSl7QXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoP3RoaXMucmVjdGFuZ2xlPXIuVXRpbC5ub3JtYWxpemVSZWN0KGUpOnRoaXMucmVjdGFuZ2xlPVswLDAsMCwwXX1zZXRDb2xvcihlKXt0aGlzLmNvbG9yPWdldFJnYkNvbG9yKGUpfXNldExpbmVFbmRpbmdzKGUpe3RoaXMubGluZUVuZGluZ3M9WyJOb25lIiwiTm9uZSJdO2lmKEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aClmb3IobGV0IHQ9MDt0PDI7dCsrKXtjb25zdCBhPWVbdF07aWYoYSBpbnN0YW5jZW9mIHMuTmFtZSlzd2l0Y2goYS5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPWEubmFtZTtjb250aW51ZX0oMCxyLndhcm4pKGBJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICR7YX1gKX19c2V0Um90YXRpb24oZSl7dGhpcy5yb3RhdGlvbj0wO2lmKGUgaW5zdGFuY2VvZiBzLkRpY3Qpe2xldCB0PWUuZ2V0KCJSIil8fDA7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSYmMCE9PXQpe3QlPTM2MDt0PDAmJih0Kz0zNjApO3QlOTA9PTAmJih0aGlzLnJvdGF0aW9uPXQpfX19c2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhlKXtpZihlIGluc3RhbmNlb2Ygcy5EaWN0KXt0aGlzLmJvcmRlckNvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCk7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9Z2V0UmdiQ29sb3IoZS5nZXRBcnJheSgiQkciKSxudWxsKX1lbHNlIHRoaXMuYm9yZGVyQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbH1zZXRCb3JkZXJTdHlsZShlKXt0aGlzLmJvcmRlclN0eWxlPW5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGU7aWYoZSBpbnN0YW5jZW9mIHMuRGljdClpZihlLmhhcygiQlMiKSl7Y29uc3QgdD1lLmdldCgiQlMiKSxhPXQuZ2V0KCJUeXBlIik7aWYoIWF8fCgwLHMuaXNOYW1lKShhLCJCb3JkZXIiKSl7dGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCh0LmdldCgiVyIpLHRoaXMucmVjdGFuZ2xlKTt0aGlzLmJvcmRlclN0eWxlLnNldFN0eWxlKHQuZ2V0KCJTIikpO3RoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KHQuZ2V0QXJyYXkoIkQiKSl9fWVsc2UgaWYoZS5oYXMoIkJvcmRlciIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkJvcmRlciIpO2lmKEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPj0zKXt0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXModFswXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyh0WzFdKTt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHRbMl0sdGhpcy5yZWN0YW5nbGUpOzQ9PT10Lmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodFszXSwhMCl9fWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX1zZXRBcHBlYXJhbmNlKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO2NvbnN0IHQ9ZS5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgYT10LmdldCgiTiIpO2lmKGEgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0pe3RoaXMuYXBwZWFyYW5jZT1hO3JldHVybn1pZighKGEgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCByPWUuZ2V0KCJBUyIpO2lmKCEociBpbnN0YW5jZW9mIHMuTmFtZSYmYS5oYXMoci5uYW1lKSkpcmV0dXJuO2NvbnN0IGk9YS5nZXQoci5uYW1lKTtpIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtJiYodGhpcy5hcHBlYXJhbmNlPWkpfXNldE9wdGlvbmFsQ29udGVudChlKXt0aGlzLm9jPW51bGw7Y29uc3QgdD1lLmdldCgiT0MiKTt0IGluc3RhbmNlb2Ygcy5OYW1lPygwLHIud2FybikoInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOnQgaW5zdGFuY2VvZiBzLkRpY3QmJih0aGlzLm9jPXQpfWxvYWRSZXNvdXJjZXMoZSx0KXtyZXR1cm4gdC5kaWN0LmdldEFzeW5jKCJSZXNvdXJjZXMiKS50aGVuKCh0PT57aWYoIXQpcmV0dXJuO3JldHVybiBuZXcgZi5PYmplY3RMb2FkZXIodCxlLHQueHJlZikubG9hZCgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSl9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLGksbil7Y29uc3Qgbz10aGlzLmRhdGE7bGV0IGM9dGhpcy5hcHBlYXJhbmNlO2NvbnN0IGw9ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSk7aWYoIWMpe2lmKCFsKXJldHVybntvcExpc3Q6bmV3IGcuT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX07Yz1uZXcgcC5TdHJpbmdTdHJlYW0oIiIpO2MuZGljdD1uZXcgcy5EaWN0fWNvbnN0IGg9Yy5kaWN0LHU9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSxjKSxkPWguZ2V0QXJyYXkoIkJCb3giKXx8WzAsMCwxLDFdLGY9aC5nZXRBcnJheSgiTWF0cml4Iil8fFsxLDAsMCwxLDAsMF0sbT1nZXRUcmFuc2Zvcm1NYXRyaXgoby5yZWN0LGQsZiksYj1uZXcgZy5PcGVyYXRvckxpc3Q7bGV0IHk7dGhpcy5vYyYmKHk9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT15JiZiLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHldKTtiLmFkZE9wKHIuT1BTLmJlZ2luQW5ub3RhdGlvbixbby5pZCxvLnJlY3QsbSxmLGxdKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmMsdGFzazp0LHJlc291cmNlczp1LG9wZXJhdG9yTGlzdDpiLGZhbGxiYWNrRm9udERpY3Q6dGhpcy5fZmFsbGJhY2tGb250RGljdH0pO2IuYWRkT3Aoci5PUFMuZW5kQW5ub3RhdGlvbixbXSk7dm9pZCAwIT09eSYmYi5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKTt0aGlzLnJlc2V0KCk7cmV0dXJue29wTGlzdDpiLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczpsfX1hc3luYyBzYXZlKGUsdCxhKXtyZXR1cm4gbnVsbH1nZXQgaGFzVGV4dENvbnRlbnQoKXtyZXR1cm4hMX1hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoZSx0LGEpe2lmKCF0aGlzLmFwcGVhcmFuY2UpcmV0dXJuO2NvbnN0IHI9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiRm9udCIsIlByb3BlcnRpZXMiLCJYT2JqZWN0Il0sdGhpcy5hcHBlYXJhbmNlKSxpPVtdLG49W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlKGUsdCl7Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcyl7bi5wdXNoKHQuc3RyKTtpZih0Lmhhc0VPTCl7aS5wdXNoKG4uam9pbigiIikpO24ubGVuZ3RoPTB9fX19O2F3YWl0IGUuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTp0aGlzLmFwcGVhcmFuY2UsdGFzazp0LHJlc291cmNlczpyLGluY2x1ZGVNYXJrZWRDb250ZW50OiEwLHNpbms6cyx2aWV3Qm94OmF9KTt0aGlzLnJlc2V0KCk7bi5sZW5ndGgmJmkucHVzaChuLmpvaW4oIiIpKTtpLmxlbmd0aD4wJiYodGhpcy5kYXRhLnRleHRDb250ZW50PWkpfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJuIHRoaXMuZGF0YS5raWRJZHM/e2lkOnRoaXMuZGF0YS5pZCxhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsdHlwZToiIixraWRJZHM6dGhpcy5kYXRhLmtpZElkcyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgscm90YXRpb246dGhpcy5yb3RhdGlvbn06bnVsbH1yZXNldCgpe2Zvcihjb25zdCBlIG9mIHRoaXMuX3N0cmVhbXMpZS5yZXNldCgpfV9jb25zdHJ1Y3RGaWVsZE5hbWUoZSl7aWYoIWUuaGFzKCJUIikmJiFlLmhhcygiUGFyZW50IikpeygwLHIud2FybikoIlVua25vd24gZmllbGQgbmFtZSwgZmFsbGluZyBiYWNrIHRvIGVtcHR5IGZpZWxkIG5hbWUuIik7cmV0dXJuIiJ9aWYoIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiVCIpKTtjb25zdCB0PVtdO2UuaGFzKCJUIikmJnQudW5zaGlmdCgoMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiVCIpKSk7bGV0IGE9ZTtjb25zdCBpPW5ldyBzLlJlZlNldDtlLm9iaklkJiZpLnB1dChlLm9iaklkKTtmb3IoO2EuaGFzKCJQYXJlbnQiKTspe2E9YS5nZXQoIlBhcmVudCIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCl8fGEub2JqSWQmJmkuaGFzKGEub2JqSWQpKWJyZWFrO2Eub2JqSWQmJmkucHV0KGEub2JqSWQpO2lmKGEuaGFzKCJUIikpe2NvbnN0IGU9KDAsci5zdHJpbmdUb1BERlN0cmluZykoYS5nZXQoIlQiKSk7ZS5zdGFydHNXaXRoKCIjIil8fHQudW5zaGlmdChlKX19cmV0dXJuIHQuam9pbigiLiIpfX10LkFubm90YXRpb249QW5ub3RhdGlvbjtjbGFzcyBBbm5vdGF0aW9uQm9yZGVyU3R5bGV7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTE7dGhpcy5zdHlsZT1yLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7dGhpcy5kYXNoQXJyYXk9WzNdO3RoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz0wO3RoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9MH1zZXRXaWR0aChlLHQ9WzAsMCwwLDBdKXtpZihlIGluc3RhbmNlb2Ygcy5OYW1lKXRoaXMud2lkdGg9MDtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoZT4wKXtjb25zdCBhPSh0WzJdLXRbMF0pLzIsaT0odFszXS10WzFdKS8yO2lmKGE+MCYmaT4wJiYoZT5hfHxlPmkpKXsoMCxyLndhcm4pKGBBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogJHtlfWApO2U9MX19dGhpcy53aWR0aD1lfX1zZXRTdHlsZShlKXtpZihlIGluc3RhbmNlb2Ygcy5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1yLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1yLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkV9fXNldERhc2hBcnJheShlLHQ9ITEpe2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe2xldCBhPSEwLHI9ITA7Zm9yKGNvbnN0IHQgb2YgZSl7aWYoISgrdD49MCkpe2E9ITE7YnJlYWt9dD4wJiYocj0hMSl9aWYoYSYmIXIpe3RoaXMuZGFzaEFycmF5PWU7dCYmdGhpcy5zZXRTdHlsZShzLk5hbWUuZ2V0KCJEIikpfWVsc2UgdGhpcy53aWR0aD0wfWVsc2UgZSYmKHRoaXMud2lkdGg9MCl9c2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzPWUpfXNldFZlcnRpY2FsQ29ybmVyUmFkaXVzKGUpe051bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPWUpfX10LkFubm90YXRpb25Cb3JkZXJTdHlsZT1Bbm5vdGF0aW9uQm9yZGVyU3R5bGU7Y2xhc3MgTWFya3VwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO2lmKHQuaGFzKCJJUlQiKSl7Y29uc3QgZT10LmdldFJhdygiSVJUIik7dGhpcy5kYXRhLmluUmVwbHlUbz1lIGluc3RhbmNlb2Ygcy5SZWY/ZS50b1N0cmluZygpOm51bGw7Y29uc3QgYT10LmdldCgiUlQiKTt0aGlzLmRhdGEucmVwbHlUeXBlPWEgaW5zdGFuY2VvZiBzLk5hbWU/YS5uYW1lOnIuQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWX1pZih0aGlzLmRhdGEucmVwbHlUeXBlPT09ci5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKXtjb25zdCBlPXQuZ2V0KCJJUlQiKTt0aGlzLnNldFRpdGxlKGUuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKGUuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7aWYoZS5oYXMoIkNyZWF0aW9uRGF0ZSIpKXt0aGlzLnNldENyZWF0aW9uRGF0ZShlLmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEuY3JlYXRpb25EYXRlPW51bGw7aWYoZS5oYXMoIk0iKSl7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKGUuZ2V0KCJNIikpO3RoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPXRoaXMubW9kaWZpY2F0aW9uRGF0ZX1lbHNlIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPW51bGw7dGhpcy5kYXRhLmhhc1BvcHVwPWUuaGFzKCJQb3B1cCIpO2lmKGUuaGFzKCJDIikpe3RoaXMuc2V0Q29sb3IoZS5nZXRBcnJheSgiQyIpKTt0aGlzLmRhdGEuY29sb3I9dGhpcy5jb2xvcn1lbHNlIHRoaXMuZGF0YS5jb2xvcj1udWxsfWVsc2V7dGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlO3RoaXMuc2V0Q3JlYXRpb25EYXRlKHQuZ2V0KCJDcmVhdGlvbkRhdGUiKSk7dGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT10aGlzLmNyZWF0aW9uRGF0ZTt0aGlzLmRhdGEuaGFzUG9wdXA9dC5oYXMoIlBvcHVwIik7dC5oYXMoIkMiKXx8KHRoaXMuZGF0YS5jb2xvcj1udWxsKX10LmhhcygiUkMiKSYmKHRoaXMuZGF0YS5yaWNoVGV4dD1tLlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwodC5nZXQoIlJDIikpKX1zZXRDcmVhdGlvbkRhdGUoZSl7dGhpcy5jcmVhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZSxleHRyYTp0LHN0cm9rZUNvbG9yOmEsZmlsbENvbG9yOnIsYmxlbmRNb2RlOmksc3Ryb2tlQWxwaGE6bixmaWxsQWxwaGE6byxwb2ludHNDYWxsYmFjazpjfSl7bGV0IGw9TnVtYmVyLk1BWF9WQUxVRSxoPU51bWJlci5NQVhfVkFMVUUsdT1OdW1iZXIuTUlOX1ZBTFVFLGQ9TnVtYmVyLk1JTl9WQUxVRTtjb25zdCBmPVsicSJdO3QmJmYucHVzaCh0KTthJiZmLnB1c2goYCR7YVswXX0gJHthWzFdfSAke2FbMl19IFJHYCk7ciYmZi5wdXNoKGAke3JbMF19ICR7clsxXX0gJHtyWzJdfSByZ2ApO2xldCBnPXRoaXMuZGF0YS5xdWFkUG9pbnRzO2d8fChnPVtbe3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVsxXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVsxXX1dXSk7Zm9yKGNvbnN0IGUgb2YgZyl7Y29uc3RbdCxhLHIsaV09YyhmLGUpO2w9TWF0aC5taW4obCx0KTt1PU1hdGgubWF4KHUsYSk7aD1NYXRoLm1pbihoLHIpO2Q9TWF0aC5tYXgoZCxpKX1mLnB1c2goIlEiKTtjb25zdCBtPW5ldyBzLkRpY3QoZSksYj1uZXcgcy5EaWN0KGUpO2Iuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO2NvbnN0IHk9bmV3IHAuU3RyaW5nU3RyZWFtKGYuam9pbigiICIpKTt5LmRpY3Q9YjttLnNldCgiRm0wIix5KTtjb25zdCB3PW5ldyBzLkRpY3QoZSk7aSYmdy5zZXQoIkJNIixzLk5hbWUuZ2V0KGkpKTsibnVtYmVyIj09dHlwZW9mIG4mJncuc2V0KCJDQSIsbik7Im51bWJlciI9PXR5cGVvZiBvJiZ3LnNldCgiY2EiLG8pO2NvbnN0IFM9bmV3IHMuRGljdChlKTtTLnNldCgiR1MwIix3KTtjb25zdCB4PW5ldyBzLkRpY3QoZSk7eC5zZXQoIkV4dEdTdGF0ZSIsUyk7eC5zZXQoIlhPYmplY3QiLG0pO2NvbnN0IEM9bmV3IHMuRGljdChlKTtDLnNldCgiUmVzb3VyY2VzIix4KTtjb25zdCBrPXRoaXMuZGF0YS5yZWN0PVtsLGgsdSxkXTtDLnNldCgiQkJveCIsayk7dGhpcy5hcHBlYXJhbmNlPW5ldyBwLlN0cmluZ1N0cmVhbSgiL0dTMCBncyAvRm0wIERvIik7dGhpcy5hcHBlYXJhbmNlLmRpY3Q9Qzt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlLHkpfXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBbm5vdGF0aW9uKGUsdCxhLHIpe2NvbnN0IGk9ZS5nZXROZXdUZW1wb3JhcnlSZWYoKSxuPWF3YWl0IHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbSh0LGUscikscz1bXTtsZXQgYztpZihuKXtjb25zdCByPWUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7Yz10aGlzLmNyZWF0ZU5ld0RpY3QodCxlLHthcFJlZjpyfSk7Y29uc3QgaT1lLmVuY3J5cHQ/ZS5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLm51bSxyLmdlbik6bnVsbDthd2FpdCgwLG8ud3JpdGVPYmplY3QpKHIsbixzLGkpO2EucHVzaCh7cmVmOnIsZGF0YTpzLmpvaW4oIiIpfSl9ZWxzZSBjPXRoaXMuY3JlYXRlTmV3RGljdCh0LGUse30pO3MubGVuZ3RoPTA7Y29uc3QgbD1lLmVuY3J5cHQ/ZS5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShpLm51bSxpLmdlbik6bnVsbDthd2FpdCgwLG8ud3JpdGVPYmplY3QpKGksYyxzLGwpO3JldHVybntyZWY6aSxkYXRhOnMuam9pbigiIil9fXN0YXRpYyBhc3luYyBjcmVhdGVOZXdQcmludEFubm90YXRpb24oZSx0LGEpe2NvbnN0IHI9YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKHQsZSxhKSxpPXRoaXMuY3JlYXRlTmV3RGljdCh0LGUse2FwOnJ9KTtyZXR1cm4gbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OmkseHJlZjplLGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmEuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR9KX19dC5NYXJrdXBBbm5vdGF0aW9uPU1hcmt1cEFubm90YXRpb247Y2xhc3MgV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZSxuPXRoaXMuZGF0YTt0aGlzLnJlZj1lLnJlZjt0aGlzLl9uZWVkQXBwZWFyYW5jZXM9ZS5uZWVkQXBwZWFyYW5jZXM7bi5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLldJREdFVDt2b2lkIDA9PT1uLmZpZWxkTmFtZSYmKG4uZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KSk7dm9pZCAwPT09bi5hY3Rpb25zJiYobi5hY3Rpb25zPSgwLGkuY29sbGVjdEFjdGlvbnMpKGEsdCxyLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpKTtsZXQgbz0oMCxpLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJWIixnZXRBcnJheTohMH0pO24uZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUobyk7Y29uc3QgYz0oMCxpLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJEViIsZ2V0QXJyYXk6ITB9KTtuLmRlZmF1bHRGaWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTtpZih2b2lkIDA9PT1vJiZlLnhmYURhdGFzZXRzKXtjb25zdCB0PXRoaXMuX3RpdGxlLnN0cjtpZih0KXt0aGlzLl9oYXNWYWx1ZUZyb21YRkE9ITA7bi5maWVsZFZhbHVlPW89ZS54ZmFEYXRhc2V0cy5nZXRWYWx1ZSh0KX19dm9pZCAwPT09byYmbnVsbCE9PW4uZGVmYXVsdEZpZWxkVmFsdWUmJihuLmZpZWxkVmFsdWU9bi5kZWZhdWx0RmllbGRWYWx1ZSk7bi5hbHRlcm5hdGl2ZVRleHQ9KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIlRVIil8fCIiKTt0aGlzLnNldERlZmF1bHRBcHBlYXJhbmNlKGUpO24uaGFzQXBwZWFyYW5jZXx8PXRoaXMuX25lZWRBcHBlYXJhbmNlcyYmdm9pZCAwIT09bi5maWVsZFZhbHVlJiZudWxsIT09bi5maWVsZFZhbHVlO2NvbnN0IGw9KDAsaS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiRlQifSk7bi5maWVsZFR5cGU9bCBpbnN0YW5jZW9mIHMuTmFtZT9sLm5hbWU6bnVsbDtjb25zdCBoPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkRSIn0pLHU9ZS5hY3JvRm9ybS5nZXQoIkRSIiksZD10aGlzLmFwcGVhcmFuY2U/LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTt0aGlzLl9maWVsZFJlc291cmNlcz17bG9jYWxSZXNvdXJjZXM6aCxhY3JvRm9ybVJlc291cmNlczp1LGFwcGVhcmFuY2VSZXNvdXJjZXM6ZCxtZXJnZWRSZXNvdXJjZXM6cy5EaWN0Lm1lcmdlKHt4cmVmOmEsZGljdEFycmF5OltoLGQsdV0sbWVyZ2VTdWJEaWN0czohMH0pfTtuLmZpZWxkRmxhZ3M9KDAsaS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiRmYifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKG4uZmllbGRGbGFncyl8fG4uZmllbGRGbGFnczwwKSYmKG4uZmllbGRGbGFncz0wKTtuLnJlYWRPbmx5PXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5SRUFET05MWSk7bi5yZXF1aXJlZD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkVRVUlSRUQpO24uaGlkZGVuPXRoaXMuX2hhc0ZsYWcobi5hbm5vdGF0aW9uRmxhZ3Msci5Bbm5vdGF0aW9uRmxhZy5ISURERU4pfV9kZWNvZGVGb3JtVmFsdWUoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIoKGU9PiJzdHJpbmciPT10eXBlb2YgZSkpLm1hcCgoZT0+KDAsci5zdHJpbmdUb1BERlN0cmluZykoZSkpKTplIGluc3RhbmNlb2Ygcy5OYW1lPygwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUubmFtZSk6InN0cmluZyI9PXR5cGVvZiBlPygwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpOm51bGx9aGFzRmllbGRGbGFnKGUpe3JldHVybiEhKHRoaXMuZGF0YS5maWVsZEZsYWdzJmUpfWdldFJvdGF0aW9uTWF0cml4KGUpe2xldCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5yb3RhdGlvbjt2b2lkIDA9PT10JiYodD10aGlzLnJvdGF0aW9uKTtpZigwPT09dClyZXR1cm4gci5JREVOVElUWV9NQVRSSVg7Y29uc3QgYT10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSxuPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdO3JldHVybigwLGkuZ2V0Um90YXRpb25NYXRyaXgpKHQsYSxuKX1nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoZSl7bGV0IHQ9ZT8uZ2V0KHRoaXMuZGF0YS5pZCk/LnJvdGF0aW9uO3ZvaWQgMD09PXQmJih0PXRoaXMucm90YXRpb24pO2lmKCF0aGlzLmJhY2tncm91bmRDb2xvciYmIXRoaXMuYm9yZGVyQ29sb3IpcmV0dXJuIiI7Y29uc3QgYT10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSxyPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLGk9MD09PXR8fDE4MD09PXQ/YDAgMCAke2F9ICR7cn0gcmVgOmAwIDAgJHtyfSAke2F9IHJlYDtsZXQgcz0iIjt0aGlzLmJhY2tncm91bmRDb2xvciYmKHM9YCR7KDAsbi5nZXRQZGZDb2xvcikodGhpcy5iYWNrZ3JvdW5kQ29sb3IsITApfSAke2l9IGYgYCk7aWYodGhpcy5ib3JkZXJDb2xvcil7cys9YCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MX0gdyAkeygwLG4uZ2V0UGRmQ29sb3IpKHRoaXMuYm9yZGVyQ29sb3IsITEpfSAke2l9IFMgYH1yZXR1cm4gc31hc3luYyBnZXRPcGVyYXRvckxpc3QoZSx0LGEsaSxuKXtpZihpJiYhKHRoaXMgaW5zdGFuY2VvZiBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uKSYmIXRoaXMuZGF0YS5ub0hUTUwmJiF0aGlzLmRhdGEuaGFzT3duQ2FudmFzKXJldHVybntvcExpc3Q6bmV3IGcuT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMCxzZXBhcmF0ZUNhbnZhczohMX07aWYoIXRoaXMuX2hhc1RleHQpcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxpLG4pO2NvbnN0IHM9YXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShlLHQsYSxuKTtpZih0aGlzLmFwcGVhcmFuY2UmJm51bGw9PT1zKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LGEsaSxuKTtjb25zdCBvPW5ldyBnLk9wZXJhdG9yTGlzdDtpZighdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fG51bGw9PT1zKXJldHVybntvcExpc3Q6byxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9O2NvbnN0IGM9WzAsMCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXV0sbD1nZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsYyxbMSwwLDAsMSwwLDBdKTtsZXQgaDt0aGlzLm9jJiYoaD1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpO3ZvaWQgMCE9PWgmJm8uYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsaF0pO28uYWRkT3Aoci5PUFMuYmVnaW5Bbm5vdGF0aW9uLFt0aGlzLmRhdGEuaWQsdGhpcy5kYXRhLnJlY3QsbCx0aGlzLmdldFJvdGF0aW9uTWF0cml4KG4pLCExXSk7Y29uc3QgdT1uZXcgcC5TdHJpbmdTdHJlYW0ocyk7YXdhaXQgZS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp1LHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpvfSk7by5hZGRPcChyLk9QUy5lbmRBbm5vdGF0aW9uLFtdKTt2b2lkIDAhPT1oJiZvLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pO3JldHVybntvcExpc3Q6byxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fV9nZXRNS0RpY3QoZSl7Y29uc3QgdD1uZXcgcy5EaWN0KG51bGwpO2UmJnQuc2V0KCJSIixlKTt0aGlzLmJvcmRlckNvbG9yJiZ0LnNldCgiQkMiLGdldFBkZkNvbG9yQXJyYXkodGhpcy5ib3JkZXJDb2xvcikpO3RoaXMuYmFja2dyb3VuZENvbG9yJiZ0LnNldCgiQkciLGdldFBkZkNvbG9yQXJyYXkodGhpcy5iYWNrZ3JvdW5kQ29sb3IpKTtyZXR1cm4gdC5zaXplPjA/dDpudWxsfWFtZW5kU2F2ZWREaWN0KGUsdCl7fWFzeW5jIHNhdmUoZSx0LGEpe2NvbnN0IG49YT8uZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IGM9bj8udmFsdWUsbD1uPy5yb3RhdGlvbjtpZihjPT09dGhpcy5kYXRhLmZpZWxkVmFsdWV8fHZvaWQgMD09PWMpe2lmKCF0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJnZvaWQgMD09PWwpcmV0dXJuIG51bGw7Y3x8PXRoaXMuZGF0YS5maWVsZFZhbHVlfWlmKHZvaWQgMD09PWwmJiF0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJkFycmF5LmlzQXJyYXkoYykmJkFycmF5LmlzQXJyYXkodGhpcy5kYXRhLmZpZWxkVmFsdWUpJiZjLmxlbmd0aD09PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCYmYy5ldmVyeSgoKGUsdCk9PmU9PT10aGlzLmRhdGEuZmllbGRWYWx1ZVt0XSkpKXJldHVybiBudWxsO3ZvaWQgMD09PWwmJihsPXRoaXMucm90YXRpb24pO2xldCBoPW51bGw7aWYoIXRoaXMuX25lZWRBcHBlYXJhbmNlcyl7aD1hd2FpdCB0aGlzLl9nZXRBcHBlYXJhbmNlKGUsdCxyLlJlbmRlcmluZ0ludGVudEZsYWcuU0FWRSxhKTtpZihudWxsPT09aClyZXR1cm4gbnVsbH1sZXQgdT0hMTtpZihoPy5uZWVkQXBwZWFyYW5jZXMpe3U9ITA7aD1udWxsfWNvbnN0e3hyZWY6ZH09ZSxmPWQuZmV0Y2hJZlJlZih0aGlzLnJlZik7aWYoIShmIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4gbnVsbDtjb25zdCBnPW5ldyBzLkRpY3QoZCk7Zm9yKGNvbnN0IGUgb2YgZi5nZXRLZXlzKCkpIkFQIiE9PWUmJmcuc2V0KGUsZi5nZXRSYXcoZSkpO2NvbnN0IG09e3BhdGg6dGhpcy5kYXRhLmZpZWxkTmFtZSx2YWx1ZTpjfSxlbmNvZGVyPWU9PigwLGkuaXNBc2NpaSkoZSk/ZTooMCxpLnN0cmluZ1RvVVRGMTZTdHJpbmcpKGUsITApO2cuc2V0KCJWIixBcnJheS5pc0FycmF5KGMpP2MubWFwKGVuY29kZXIpOmVuY29kZXIoYykpO3RoaXMuYW1lbmRTYXZlZERpY3QoYSxnKTtjb25zdCBiPXRoaXMuX2dldE1LRGljdChsKTtiJiZnLnNldCgiTUsiLGIpO2NvbnN0IHk9ZC5lbmNyeXB0LHc9eT95LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKTpudWxsLFM9W10seD1be3JlZjp0aGlzLnJlZixkYXRhOiIiLHhmYTptLG5lZWRBcHBlYXJhbmNlczp1fV07aWYobnVsbCE9PWgpe2NvbnN0IGU9ZC5nZXROZXdUZW1wb3JhcnlSZWYoKSx0PW5ldyBzLkRpY3QoZCk7Zy5zZXQoIkFQIix0KTt0LnNldCgiTiIsZSk7bGV0IGk9bnVsbDt5JiYoaT15LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLm51bSxlLmdlbikpO2NvbnN0IG49dGhpcy5fZ2V0U2F2ZUZpZWxkUmVzb3VyY2VzKGQpLGM9bmV3IHAuU3RyaW5nU3RyZWFtKGgpLGw9Yy5kaWN0PW5ldyBzLkRpY3QoZCk7bC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7bC5zZXQoIlJlc291cmNlcyIsbik7bC5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKTtjb25zdCB1PXRoaXMuZ2V0Um90YXRpb25NYXRyaXgoYSk7dSE9PXIuSURFTlRJVFlfTUFUUklYJiZsLnNldCgiTWF0cml4Iix1KTthd2FpdCgwLG8ud3JpdGVPYmplY3QpKGUsYyxTLGkpO3gucHVzaCh7cmVmOmUsZGF0YTpTLmpvaW4oIiIpLHhmYTpudWxsLG5lZWRBcHBlYXJhbmNlczohMX0pO1MubGVuZ3RoPTB9Zy5zZXQoIk0iLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2F3YWl0KDAsby53cml0ZU9iamVjdCkodGhpcy5yZWYsZyxTLHcpO3hbMF0uZGF0YT1TLmpvaW4oIiIpO3JldHVybiB4fWFzeW5jIF9nZXRBcHBlYXJhbmNlKGUsdCxhLHMpe2lmKHRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkpcmV0dXJuIG51bGw7Y29uc3Qgbz1zPy5nZXQodGhpcy5kYXRhLmlkKTtsZXQgYyxsO2lmKG8pe2M9by5mb3JtYXR0ZWRWYWx1ZXx8by52YWx1ZTtsPW8ucm90YXRpb259aWYodm9pZCAwPT09bCYmdm9pZCAwPT09YyYmIXRoaXMuX25lZWRBcHBlYXJhbmNlcyYmKCF0aGlzLl9oYXNWYWx1ZUZyb21YRkF8fHRoaXMuYXBwZWFyYW5jZSkpcmV0dXJuIG51bGw7Y29uc3QgaD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhzKTtpZih2b2lkIDA9PT1jKXtjPXRoaXMuZGF0YS5maWVsZFZhbHVlO2lmKCFjKXJldHVybmAvVHggQk1DIHEgJHtofVEgRU1DYH1BcnJheS5pc0FycmF5KGMpJiYxPT09Yy5sZW5ndGgmJihjPWNbMF0pOygwLHIuYXNzZXJ0KSgic3RyaW5nIj09dHlwZW9mIGMsIkV4cGVjdGVkIGB2YWx1ZWAgdG8gYmUgYSBzdHJpbmcuIik7Yz1jLnRyaW0oKTtpZih0aGlzLmRhdGEuY29tYm8pe2NvbnN0IGU9dGhpcy5kYXRhLm9wdGlvbnMuZmluZCgoKHtleHBvcnRWYWx1ZTplfSk9PmM9PT1lKSk7Yz1lPy5kaXNwbGF5VmFsdWV8fGN9aWYoIiI9PT1jKXJldHVybmAvVHggQk1DIHEgJHtofVEgRU1DYDt2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKTtsZXQgdSxkPS0xO2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3U9Yy5zcGxpdCgvXHJcbj98XG4vKS5tYXAoKGU9PmUubm9ybWFsaXplKCJORkMiKSkpO2Q9dS5sZW5ndGh9ZWxzZSB1PVtjLnJlcGxhY2UoL1xyXG4/fFxuLywiIikubm9ybWFsaXplKCJORkMiKV07bGV0IGY9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sZz10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXTs5MCE9PWwmJjI3MCE9PWx8fChbZyxmXT1bZixnXSk7dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLG4ucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7bGV0IHAsbSxiLHk9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTtjb25zdCB3PVtdO2xldCBTPSExO2Zvcihjb25zdCBlIG9mIHUpe2NvbnN0IHQ9eS5lbmNvZGVTdHJpbmcoZSk7dC5sZW5ndGg+MSYmKFM9ITApO3cucHVzaCh0LmpvaW4oIiIpKX1pZihTJiZhJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5TQVZFKXJldHVybntuZWVkQXBwZWFyYW5jZXM6ITB9O2lmKFMmJnRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBhPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixyPW5ldyBuLkZha2VVbmljb2RlRm9udChlLnhyZWYsYSkscz1yLmNyZWF0ZUZvbnRSZXNvdXJjZXModS5qb2luKCIiKSksbz1zLmdldFJhdygiRm9udCIpO2lmKHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7Y29uc3QgZT10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250Iik7Zm9yKGNvbnN0IHQgb2Ygby5nZXRLZXlzKCkpZS5zZXQodCxvLmdldFJhdyh0KSl9ZWxzZSB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuc2V0KCJGb250IixvKTtjb25zdCBsPXIuZm9udE5hbWUubmFtZTt5PWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx7Zm9udE5hbWU6bCxmb250U2l6ZTowfSxzKTtmb3IobGV0IGU9MCx0PXcubGVuZ3RoO2U8dDtlKyspd1tlXT0oMCxpLnN0cmluZ1RvVVRGMTZTdHJpbmcpKHVbZV0pO2NvbnN0IGg9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MDt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPWw7W3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCk7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT1ofWVsc2V7dGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLHIud2FybikoIl9nZXRBcHBlYXJhbmNlOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIik7W3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCl9bGV0IHg9eS5kZXNjZW50O3g9aXNOYU4oeCk/ci5CQVNFTElORV9GQUNUT1IqYjpNYXRoLm1heChyLkJBU0VMSU5FX0ZBQ1RPUipiLE1hdGguYWJzKHgpKm0pO2NvbnN0IEM9TWF0aC5taW4oTWF0aC5mbG9vcigoZi1tKS8yKSwxKSxrPXRoaXMuZGF0YS50ZXh0QWxpZ25tZW50O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UocCx3LHksbSxnLGYsaywyLEMseCxiLHMpO2lmKHRoaXMuZGF0YS5jb21iKXJldHVybiB0aGlzLl9nZXRDb21iQXBwZWFyYW5jZShwLHksd1swXSxtLGcsZiwyLEMseCxiLHMpO2NvbnN0IHY9Qyt4O2lmKDA9PT1rfHxrPjIpcmV0dXJuYC9UeCBCTUMgcSAke2h9QlQgYCtwK2AgMSAwIDAgMSAkeygwLGkubnVtYmVyVG9TdHJpbmcpKDIpfSAkeygwLGkubnVtYmVyVG9TdHJpbmcpKHYpfSBUbSAoJHsoMCxpLmVzY2FwZVN0cmluZykod1swXSl9KSBUaiBFVCBRIEVNQ2A7cmV0dXJuYC9UeCBCTUMgcSAke2h9QlQgYCtwK2AgMSAwIDAgMSAwIDAgVG0gJHt0aGlzLl9yZW5kZXJUZXh0KHdbMF0seSxtLGcsayx7c2hpZnQ6MH0sMix2KX0gRVQgUSBFTUNgfXN0YXRpYyBhc3luYyBfZ2V0Rm9udERhdGEoZSx0LGEscil7Y29uc3QgaT1uZXcgZy5PcGVyYXRvckxpc3Qsbj17Zm9udDpudWxsLGNsb25lKCl7cmV0dXJuIHRoaXN9fSx7Zm9udE5hbWU6byxmb250U2l6ZTpjfT1hO2F3YWl0IGUuaGFuZGxlU2V0Rm9udChyLFtvJiZzLk5hbWUuZ2V0KG8pLGNdLG51bGwsaSx0LG4sbnVsbCk7cmV0dXJuIG4uZm9udH1fZ2V0VGV4dFdpZHRoKGUsdCl7cmV0dXJuIHQuY2hhcnNUb0dseXBocyhlKS5yZWR1Y2UoKChlLHQpPT5lK3Qud2lkdGgpLDApLzFlM31fY29tcHV0ZUZvbnRTaXplKGUsdCxhLGkscyl7bGV0e2ZvbnRTaXplOm99PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsYz0ob3x8MTIpKnIuTElORV9GQUNUT1IsbD1NYXRoLnJvdW5kKGUvYyk7aWYoIW8pe2NvbnN0IHJvdW5kV2l0aFR3b0RpZ2l0cz1lPT5NYXRoLmZsb29yKDEwMCplKS8xMDA7aWYoLTE9PT1zKXtjb25zdCBuPXRoaXMuX2dldFRleHRXaWR0aChhLGkpO289cm91bmRXaXRoVHdvRGlnaXRzKE1hdGgubWluKGUvci5MSU5FX0ZBQ1RPUixuPnQ/dC9uOjEvMCkpO2w9MX1lbHNle2NvbnN0IG49YS5zcGxpdCgvXHJcbj98XG4vKSxoPVtdO2Zvcihjb25zdCBlIG9mIG4pe2NvbnN0IHQ9aS5lbmNvZGVTdHJpbmcoZSkuam9pbigiIiksYT1pLmNoYXJzVG9HbHlwaHModCkscj1pLmdldENoYXJQb3NpdGlvbnModCk7aC5wdXNoKHtsaW5lOnQsZ2x5cGhzOmEscG9zaXRpb25zOnJ9KX1jb25zdCBpc1Rvb0JpZz1hPT57bGV0IHI9MDtmb3IoY29uc3QgbiBvZiBoKXtyKz10aGlzLl9zcGxpdExpbmUobnVsbCxpLGEsdCxuKS5sZW5ndGgqYTtpZihyPmUpcmV0dXJuITB9cmV0dXJuITF9O2w9TWF0aC5tYXgobCxzKTtmb3IoOzspe2M9ZS9sO289cm91bmRXaXRoVHdvRGlnaXRzKGMvci5MSU5FX0ZBQ1RPUik7aWYoIWlzVG9vQmlnKG8pKWJyZWFrO2wrK319Y29uc3R7Zm9udE5hbWU6aCxmb250Q29sb3I6dX09dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxuLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6byxmb250TmFtZTpoLGZvbnRDb2xvcjp1fSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLG8sZS9sXX1fcmVuZGVyVGV4dChlLHQsYSxyLG4scyxvLGMpe2xldCBsO2lmKDE9PT1uKXtsPShyLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEpLzJ9ZWxzZSBpZigyPT09bil7bD1yLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEtb31lbHNlIGw9bztjb25zdCBoPSgwLGkubnVtYmVyVG9TdHJpbmcpKGwtcy5zaGlmdCk7cy5zaGlmdD1sO3JldHVybmAke2h9ICR7Yz0oMCxpLm51bWJlclRvU3RyaW5nKShjKX0gVGQgKCR7KDAsaS5lc2NhcGVTdHJpbmcpKGUpfSkgVGpgfV9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZSl7Y29uc3R7bG9jYWxSZXNvdXJjZXM6dCxhcHBlYXJhbmNlUmVzb3VyY2VzOmEsYWNyb0Zvcm1SZXNvdXJjZXM6cn09dGhpcy5fZmllbGRSZXNvdXJjZXMsaT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPy5mb250TmFtZTtpZighaSlyZXR1cm4gdHx8cy5EaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3QsYV0paWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7Y29uc3QgdD1lLmdldCgiRm9udCIpO2lmKHQgaW5zdGFuY2VvZiBzLkRpY3QmJnQuaGFzKGkpKXJldHVybiBlfWlmKHIgaW5zdGFuY2VvZiBzLkRpY3Qpe2NvbnN0IGE9ci5nZXQoIkZvbnQiKTtpZihhIGluc3RhbmNlb2Ygcy5EaWN0JiZhLmhhcyhpKSl7Y29uc3Qgcj1uZXcgcy5EaWN0KGUpO3Iuc2V0KGksYS5nZXRSYXcoaSkpO2NvbnN0IG49bmV3IHMuRGljdChlKTtuLnNldCgiRm9udCIscik7cmV0dXJuIHMuRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbbix0XSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiB0fHxzLkRpY3QuZW1wdHl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gbnVsbH19Y2xhc3MgVGV4dFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLnJlYWRPbmx5JiYhdGhpcy5kYXRhLm5vSFRNTDt0aGlzLl9oYXNUZXh0PSEwO2NvbnN0IHQ9ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgdGhpcy5kYXRhLmZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT0iIik7bGV0IGE9KDAsaS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MHx8YT4yKSYmKGE9bnVsbCk7dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ9YTtsZXQgbj0oMCxpLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJNYXhMZW4ifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKG4pfHxuPDApJiYobj0wKTt0aGlzLmRhdGEubWF4TGVuPW47dGhpcy5kYXRhLm11bHRpTGluZT10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKTt0aGlzLmRhdGEuY29tYj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT10aGlzLmRhdGEubWF4TGVuO3RoaXMuZGF0YS5kb05vdFNjcm9sbD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiEhdGhpcy5hcHBlYXJhbmNlfV9nZXRDb21iQXBwZWFyYW5jZShlLHQsYSxyLG4scyxvLGMsbCxoLHUpe2NvbnN0IGQ9bi90aGlzLmRhdGEubWF4TGVuLGY9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXModSksZz1bXSxwPXQuZ2V0Q2hhclBvc2l0aW9ucyhhKTtmb3IoY29uc3RbZSx0XW9mIHApZy5wdXNoKGAoJHsoMCxpLmVzY2FwZVN0cmluZykoYS5zdWJzdHJpbmcoZSx0KSl9KSBUamApO2NvbnN0IG09Zy5qb2luKGAgJHsoMCxpLm51bWJlclRvU3RyaW5nKShkKX0gMCBUZCBgKTtyZXR1cm5gL1R4IEJNQyBxICR7Zn1CVCBgK2UrYCAxIDAgMCAxICR7KDAsaS5udW1iZXJUb1N0cmluZykobyl9ICR7KDAsaS5udW1iZXJUb1N0cmluZykoYytsKX0gVG0gJHttfSBFVCBRIEVNQ2B9X2dldE11bHRpbGluZUFwcGVhcmFuY2UoZSx0LGEscixuLHMsbyxjLGwsaCx1LGQpe2NvbnN0IGY9W10sZz1uLTIqYyxwPXtzaGlmdDowfTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspe2NvbnN0IGk9dFtlXSxzPXRoaXMuX3NwbGl0TGluZShpLGEscixnKTtmb3IobGV0IHQ9MCxpPXMubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9c1t0XSxkPTA9PT1lJiYwPT09dD8tbC0odS1oKTotdTtmLnB1c2godGhpcy5fcmVuZGVyVGV4dChpLGEscixuLG8scCxjLGQpKX19Y29uc3QgbT10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhkKSxiPWYuam9pbigiXG4iKTtyZXR1cm5gL1R4IEJNQyBxICR7bX1CVCBgK2UrYCAxIDAgMCAxIDAgJHsoMCxpLm51bWJlclRvU3RyaW5nKShzKX0gVG0gJHtifSBFVCBRIEVNQ2B9X3NwbGl0TGluZShlLHQsYSxyLGk9e30pe2U9aS5saW5lfHxlO2NvbnN0IG49aS5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihuLmxlbmd0aDw9MSlyZXR1cm5bZV07Y29uc3Qgcz1pLnBvc2l0aW9uc3x8dC5nZXRDaGFyUG9zaXRpb25zKGUpLG89YS8xZTMsYz1bXTtsZXQgbD0tMSxoPS0xLHU9LTEsZD0wLGY9MDtmb3IobGV0IHQ9MCxhPW4ubGVuZ3RoO3Q8YTt0Kyspe2NvbnN0W2EsaV09c1t0XSxnPW5bdF0scD1nLndpZHRoKm87aWYoIiAiPT09Zy51bmljb2RlKWlmKGYrcD5yKXtjLnB1c2goZS5zdWJzdHJpbmcoZCxhKSk7ZD1hO2Y9cDtsPS0xO3U9LTF9ZWxzZXtmKz1wO2w9YTtoPWk7dT10fWVsc2UgaWYoZitwPnIpaWYoLTEhPT1sKXtjLnB1c2goZS5zdWJzdHJpbmcoZCxoKSk7ZD1oO3Q9dSsxO2w9LTE7Zj0wfWVsc2V7Yy5wdXNoKGUuc3Vic3RyaW5nKGQsYSkpO2Q9YTtmPXB9ZWxzZSBmKz1wfWQ8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhkLGUubGVuZ3RoKSk7cmV0dXJuIGN9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlLGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWV8fCIiLG11bHRpbGluZTp0aGlzLmRhdGEubXVsdGlMaW5lLHBhc3N3b3JkOnRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCksY2hhckxpbWl0OnRoaXMuZGF0YS5tYXhMZW4sY29tYjp0aGlzLmRhdGEuY29tYixlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6InRleHQifX19Y2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMuZGF0YS5jaGVja0JveD0hdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTt0aGlzLmRhdGEucmFkaW9CdXR0b249dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTt0aGlzLmRhdGEucHVzaEJ1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTik7dGhpcy5kYXRhLmlzVG9vbHRpcE9ubHk9ITE7aWYodGhpcy5kYXRhLmNoZWNrQm94KXRoaXMuX3Byb2Nlc3NDaGVja0JveChlKTtlbHNlIGlmKHRoaXMuZGF0YS5yYWRpb0J1dHRvbil0aGlzLl9wcm9jZXNzUmFkaW9CdXR0b24oZSk7ZWxzZSBpZih0aGlzLmRhdGEucHVzaEJ1dHRvbil7dGhpcy5kYXRhLmhhc093bkNhbnZhcz0hMDt0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihlKX1lbHNlKDAsci53YXJuKSgiSW52YWxpZCBmaWVsZCBmbGFncyBmb3IgYnV0dG9uIHdpZGdldCBhbm5vdGF0aW9uIil9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLGksbil7aWYodGhpcy5kYXRhLnB1c2hCdXR0b24pcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSwhMSxuKTtsZXQgcz1udWxsLG89bnVsbDtpZihuKXtjb25zdCBlPW4uZ2V0KHRoaXMuZGF0YS5pZCk7cz1lP2UudmFsdWU6bnVsbDtvPWU/ZS5yb3RhdGlvbjpudWxsfWlmKG51bGw9PT1zJiZ0aGlzLmFwcGVhcmFuY2UpcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxpLG4pO251bGw9PXMmJihzPXRoaXMuZGF0YS5jaGVja0JveD90aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7Y29uc3QgYz1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlO2lmKGMpe2NvbnN0IHM9dGhpcy5hcHBlYXJhbmNlLGw9Yy5kaWN0LmdldEFycmF5KCJNYXRyaXgiKXx8ci5JREVOVElUWV9NQVRSSVg7byYmYy5kaWN0LnNldCgiTWF0cml4Iix0aGlzLmdldFJvdGF0aW9uTWF0cml4KG4pKTt0aGlzLmFwcGVhcmFuY2U9Yztjb25zdCBoPXN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxpLG4pO3RoaXMuYXBwZWFyYW5jZT1zO2MuZGljdC5zZXQoIk1hdHJpeCIsbCk7cmV0dXJuIGh9cmV0dXJue29wTGlzdDpuZXcgZy5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX1hc3luYyBzYXZlKGUsdCxhKXtyZXR1cm4gdGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuX3NhdmVDaGVja2JveChlLHQsYSk6dGhpcy5kYXRhLnJhZGlvQnV0dG9uP3RoaXMuX3NhdmVSYWRpb0J1dHRvbihlLHQsYSk6bnVsbH1hc3luYyBfc2F2ZUNoZWNrYm94KGUsdCxhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBpPWEuZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IG49aT8ucm90YXRpb24sYz1pPy52YWx1ZTtpZih2b2lkIDA9PT1uKXtpZih2b2lkIDA9PT1jKXJldHVybiBudWxsO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlPT09YylyZXR1cm4gbnVsbH1jb25zdCBsPWUueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGwgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO3ZvaWQgMD09PW4mJihuPXRoaXMucm90YXRpb24pO3ZvaWQgMD09PWMmJihjPXRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlKTtjb25zdCBoPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6Yz90aGlzLmRhdGEuZXhwb3J0VmFsdWU6IiJ9LHU9cy5OYW1lLmdldChjP3RoaXMuZGF0YS5leHBvcnRWYWx1ZToiT2ZmIik7bC5zZXQoIlYiLHUpO2wuc2V0KCJBUyIsdSk7bC5zZXQoIk0iLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2NvbnN0IGQ9dGhpcy5fZ2V0TUtEaWN0KG4pO2QmJmwuc2V0KCJNSyIsZCk7Y29uc3QgZj1lLnhyZWYuZW5jcnlwdDtsZXQgZz1udWxsO2YmJihnPWYuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKTtjb25zdCBwPVtgJHt0aGlzLnJlZi5udW19ICR7dGhpcy5yZWYuZ2VufSBvYmpcbmBdO2F3YWl0KDAsby53cml0ZURpY3QpKGwscCxnKTtwLnB1c2goIlxuZW5kb2JqXG4iKTtyZXR1cm5be3JlZjp0aGlzLnJlZixkYXRhOnAuam9pbigiIikseGZhOmh9XX1hc3luYyBfc2F2ZVJhZGlvQnV0dG9uKGUsdCxhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBpPWEuZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IG49aT8ucm90YXRpb24sYz1pPy52YWx1ZTtpZih2b2lkIDA9PT1uKXtpZih2b2lkIDA9PT1jKXJldHVybiBudWxsO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlPT09YylyZXR1cm4gbnVsbH1jb25zdCBsPWUueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGwgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO3ZvaWQgMD09PWMmJihjPXRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlKTt2b2lkIDA9PT1uJiYobj10aGlzLnJvdGF0aW9uKTtjb25zdCBoPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6Yz90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LHU9cy5OYW1lLmdldChjP3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIik7bGV0IGQ9bnVsbDtjb25zdCBmPWUueHJlZi5lbmNyeXB0O2lmKGMpaWYodGhpcy5wYXJlbnQgaW5zdGFuY2VvZiBzLlJlZil7Y29uc3QgdD1lLnhyZWYuZmV0Y2godGhpcy5wYXJlbnQpO2xldCBhPW51bGw7ZiYmKGE9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpO3Quc2V0KCJWIix1KTtkPVtgJHt0aGlzLnBhcmVudC5udW19ICR7dGhpcy5wYXJlbnQuZ2VufSBvYmpcbmBdO2F3YWl0KDAsby53cml0ZURpY3QpKHQsZCxhKTtkLnB1c2goIlxuZW5kb2JqXG4iKX1lbHNlIHRoaXMucGFyZW50IGluc3RhbmNlb2Ygcy5EaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLHUpO2wuc2V0KCJBUyIsdSk7bC5zZXQoIk0iLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2NvbnN0IGc9dGhpcy5fZ2V0TUtEaWN0KG4pO2cmJmwuc2V0KCJNSyIsZyk7bGV0IHA9bnVsbDtmJiYocD1mLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSk7Y29uc3QgbT1bYCR7dGhpcy5yZWYubnVtfSAke3RoaXMucmVmLmdlbn0gb2JqXG5gXTthd2FpdCgwLG8ud3JpdGVEaWN0KShsLG0scCk7bS5wdXNoKCJcbmVuZG9ialxuIik7Y29uc3QgYj1be3JlZjp0aGlzLnJlZixkYXRhOm0uam9pbigiIikseGZhOmh9XTtudWxsIT09ZCYmYi5wdXNoKHtyZWY6dGhpcy5wYXJlbnQsZGF0YTpkLmpvaW4oIiIpLHhmYTpudWxsfSk7cmV0dXJuIGJ9X2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLHQpe2NvbnN0IGE9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbj10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxvPVswLDAsYSxuXSxjPS44Kk1hdGgubWluKGEsbik7bGV0IGwsaDtpZigiY2hlY2siPT09dCl7bD17d2lkdGg6Ljc1NSpjLGhlaWdodDouNzA1KmN9O2g9IjMifWVsc2UgaWYoImRpc2MiPT09dCl7bD17d2lkdGg6Ljc5MSpjLGhlaWdodDouNzA1KmN9O2g9ImwifWVsc2UoMCxyLnVucmVhY2hhYmxlKShgX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZSAtIHVuc3VwcG9ydGVkIHR5cGU6ICR7dH1gKTtjb25zdCB1PWBxIEJUIC9QZGZKc1phRGIgJHtjfSBUZiAwIGcgJHsoMCxpLm51bWJlclRvU3RyaW5nKSgoYS1sLndpZHRoKS8yKX0gJHsoMCxpLm51bWJlclRvU3RyaW5nKSgobi1sLmhlaWdodCkvMil9IFRkICgke2h9KSBUaiBFVCBRYCxkPW5ldyBzLkRpY3QoZS54cmVmKTtkLnNldCgiRm9ybVR5cGUiLDEpO2Quc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO2Quc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJYT2JqZWN0IikpO2Quc2V0KCJCQm94IixvKTtkLnNldCgiTWF0cml4IixbMSwwLDAsMSwwLDBdKTtkLnNldCgiTGVuZ3RoIix1Lmxlbmd0aCk7Y29uc3QgZj1uZXcgcy5EaWN0KGUueHJlZiksZz1uZXcgcy5EaWN0KGUueHJlZik7Zy5zZXQoIlBkZkpzWmFEYiIsdGhpcy5mYWxsYmFja0ZvbnREaWN0KTtmLnNldCgiRm9udCIsZyk7ZC5zZXQoIlJlc291cmNlcyIsZik7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1uZXcgcC5TdHJpbmdTdHJlYW0odSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZS5kaWN0PWQ7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpfV9wcm9jZXNzQ2hlY2tCb3goZSl7Y29uc3QgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKCEodCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGE9dC5nZXQoIk4iKTtpZighKGEgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCByPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShlLmRpY3QuZ2V0KCJBUyIpKTsic3RyaW5nIj09dHlwZW9mIHImJih0aGlzLmRhdGEuZmllbGRWYWx1ZT1yKTtjb25zdCBpPW51bGwhPT10aGlzLmRhdGEuZmllbGRWYWx1ZSYmIk9mZiIhPT10aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZToiWWVzIixuPWEuZ2V0S2V5cygpO2lmKDA9PT1uLmxlbmd0aCluLnB1c2goIk9mZiIsaSk7ZWxzZSBpZigxPT09bi5sZW5ndGgpIk9mZiI9PT1uWzBdP24ucHVzaChpKTpuLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYobi5pbmNsdWRlcyhpKSl7bi5sZW5ndGg9MDtuLnB1c2goIk9mZiIsaSl9ZWxzZXtjb25zdCBlPW4uZmluZCgoZT0+Ik9mZiIhPT1lKSk7bi5sZW5ndGg9MDtuLnB1c2goIk9mZiIsZSl9bi5pbmNsdWRlcyh0aGlzLmRhdGEuZmllbGRWYWx1ZSl8fCh0aGlzLmRhdGEuZmllbGRWYWx1ZT0iT2ZmIik7dGhpcy5kYXRhLmV4cG9ydFZhbHVlPW5bMV07Y29uc3Qgbz1hLmdldCh0aGlzLmRhdGEuZXhwb3J0VmFsdWUpO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U9byBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbT9vOm51bGw7Y29uc3QgbD1hLmdldCgiT2ZmIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPWwgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/bDpudWxsO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJjaGVjayIpO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSk7dGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3R9X3Byb2Nlc3NSYWRpb0J1dHRvbihlKXt0aGlzLmRhdGEuZmllbGRWYWx1ZT10aGlzLmRhdGEuYnV0dG9uVmFsdWU9bnVsbDtjb25zdCB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKHQgaW5zdGFuY2VvZiBzLkRpY3Qpe3RoaXMucGFyZW50PWUuZGljdC5nZXRSYXcoIlBhcmVudCIpO2NvbnN0IGE9dC5nZXQoIlYiKTthIGluc3RhbmNlb2Ygcy5OYW1lJiYodGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGEpKX1jb25zdCBhPWUuZGljdC5nZXQoIkFQIik7aWYoIShhIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3Qgcj1hLmdldCgiTiIpO2lmKCEociBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2Zvcihjb25zdCBlIG9mIHIuZ2V0S2V5cygpKWlmKCJPZmYiIT09ZSl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShlKTticmVha31jb25zdCBpPXIuZ2V0KHRoaXMuZGF0YS5idXR0b25WYWx1ZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1pIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtP2k6bnVsbDtjb25zdCBuPXIuZ2V0KCJPZmYiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9biBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbT9uOm51bGw7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT90aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk6dGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsImRpc2MiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0fV9wcm9jZXNzUHVzaEJ1dHRvbihlKXtpZihlLmRpY3QuaGFzKCJBIil8fGUuZGljdC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpe3RoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSFlLmRpY3QuaGFzKCJBIikmJiFlLmRpY3QuaGFzKCJBQSIpO2guQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmUuYXR0YWNobWVudHN9KX1lbHNlKDAsci53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfWdldEZpZWxkT2JqZWN0KCl7bGV0IGUsdD0iYnV0dG9uIjtpZih0aGlzLmRhdGEuY2hlY2tCb3gpe3Q9ImNoZWNrYm94IjtlPXRoaXMuZGF0YS5leHBvcnRWYWx1ZX1lbHNlIGlmKHRoaXMuZGF0YS5yYWRpb0J1dHRvbil7dD0icmFkaW9idXR0b24iO2U9dGhpcy5kYXRhLmJ1dHRvblZhbHVlfXJldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV8fCJPZmYiLGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZXhwb3J0VmFsdWVzOmUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxoaWRkZW46dGhpcy5kYXRhLmhpZGRlbixhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbix0eXBlOnR9fWdldCBmYWxsYmFja0ZvbnREaWN0KCl7Y29uc3QgZT1uZXcgcy5EaWN0O2Uuc2V0KCJCYXNlRm9udCIscy5OYW1lLmdldCgiWmFwZkRpbmdiYXRzIikpO2Uuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKTtlLnNldCgiRW5jb2RpbmciLHMuTmFtZS5nZXQoIlphcGZEaW5nYmF0c0VuY29kaW5nIikpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJmYWxsYmFja0ZvbnREaWN0IixlKX19Y2xhc3MgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmluZGljZXM9dC5nZXRBcnJheSgiSSIpO3RoaXMuaGFzSW5kaWNlcz1BcnJheS5pc0FycmF5KHRoaXMuaW5kaWNlcykmJnRoaXMuaW5kaWNlcy5sZW5ndGg+MDt0aGlzLmRhdGEub3B0aW9ucz1bXTtjb25zdCBuPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6Ik9wdCJ9KTtpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1hLmZldGNoSWZSZWYobltlXSkscj1BcnJheS5pc0FycmF5KHQpO3RoaXMuZGF0YS5vcHRpb25zW2VdPXtleHBvcnRWYWx1ZTp0aGlzLl9kZWNvZGVGb3JtVmFsdWUocj9hLmZldGNoSWZSZWYodFswXSk6dCksZGlzcGxheVZhbHVlOnRoaXMuX2RlY29kZUZvcm1WYWx1ZShyP2EuZmV0Y2hJZlJlZih0WzFdKTp0KX19aWYodGhpcy5oYXNJbmRpY2VzKXt0aGlzLmRhdGEuZmllbGRWYWx1ZT1bXTtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDtmb3IoY29uc3QgdCBvZiB0aGlzLmluZGljZXMpTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCYmdDxlJiZ0aGlzLmRhdGEuZmllbGRWYWx1ZS5wdXNoKHRoaXMuZGF0YS5vcHRpb25zW3RdLmV4cG9ydFZhbHVlKX1lbHNlInN0cmluZyI9PXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZT1bdGhpcy5kYXRhLmZpZWxkVmFsdWVdOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9W10pO3RoaXMuZGF0YS5jb21ibz10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQk8pO3RoaXMuZGF0YS5tdWx0aVNlbGVjdD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElTRUxFQ1QpO3RoaXMuX2hhc1RleHQ9ITB9Z2V0RmllbGRPYmplY3QoKXtjb25zdCBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19YW1lbmRTYXZlZERpY3QoZSx0KXtpZighdGhpcy5oYXNJbmRpY2VzKXJldHVybjtsZXQgYT1lPy5nZXQodGhpcy5kYXRhLmlkKT8udmFsdWU7QXJyYXkuaXNBcnJheShhKXx8KGE9W2FdKTtjb25zdCByPVtdLHtvcHRpb25zOml9PXRoaXMuZGF0YTtmb3IobGV0IGU9MCx0PTAsbj1pLmxlbmd0aDtlPG47ZSsrKWlmKGlbZV0uZXhwb3J0VmFsdWU9PT1hW3RdKXtyLnB1c2goZSk7dCs9MX10LnNldCgiSSIscil9YXN5bmMgX2dldEFwcGVhcmFuY2UoZSx0LGEsaSl7aWYodGhpcy5kYXRhLmNvbWJvKXJldHVybiBzdXBlci5fZ2V0QXBwZWFyYW5jZShlLHQsYSxpKTtsZXQgcyxvO2NvbnN0IGM9aT8uZ2V0KHRoaXMuZGF0YS5pZCk7aWYoYyl7bz1jLnJvdGF0aW9uO3M9Yy52YWx1ZX1pZih2b2lkIDA9PT1vJiZ2b2lkIDA9PT1zJiYhdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXJldHVybiBudWxsO3ZvaWQgMD09PXM/cz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KHMpfHwocz1bc10pO2xldCBsPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLGg9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF07OTAhPT1vJiYyNzAhPT1vfHwoW2gsbF09W2wsaF0pO2NvbnN0IHU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLGQ9W107Zm9yKGxldCBlPTA7ZTx1O2UrKyl7Y29uc3R7ZXhwb3J0VmFsdWU6dH09dGhpcy5kYXRhLm9wdGlvbnNbZV07cy5pbmNsdWRlcyh0KSYmZC5wdXNoKGUpfXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxuLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2NvbnN0IGY9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTtsZXQgZyx7Zm9udFNpemU6cH09dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTtpZihwKWc9dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U7ZWxzZXtjb25zdCBlPShsLTEpL3U7bGV0IHQsYT0tMTtmb3IoY29uc3R7ZGlzcGxheVZhbHVlOmV9b2YgdGhpcy5kYXRhLm9wdGlvbnMpe2NvbnN0IHI9dGhpcy5fZ2V0VGV4dFdpZHRoKGUsZik7aWYocj5hKXthPXI7dD1lfX1bZyxwXT10aGlzLl9jb21wdXRlRm9udFNpemUoZSxoLTQsdCxmLC0xKX1jb25zdCBtPXAqci5MSU5FX0ZBQ1RPUixiPShtLXApLzIseT1NYXRoLmZsb29yKGwvbSk7bGV0IHc7aWYoMT09PWQubGVuZ3RoKXtjb25zdCBlPWRbMF07dz1lLWUleX1lbHNlIHc9ZC5sZW5ndGg/ZFswXTowO2NvbnN0IFM9TWF0aC5taW4odyt5KzEsdSkseD1bIi9UeCBCTUMgcSIsYDEgMSAke2h9ICR7bH0gcmUgVyBuYF07aWYoZC5sZW5ndGgpe3gucHVzaCgiMC42MDAwMDYgMC43NTY4NjYgMC44NTQ5MDQgcmciKTtmb3IoY29uc3QgZSBvZiBkKXc8PWUmJmU8UyYmeC5wdXNoKGAxICR7bC0oZS13KzEpKm19ICR7aH0gJHttfSByZSBmYCl9eC5wdXNoKCJCVCIsZyxgMSAwIDAgMSAwICR7bH0gVG1gKTtjb25zdCBDPXtzaGlmdDowfTtmb3IobGV0IGU9dztlPFM7ZSsrKXtjb25zdHtkaXNwbGF5VmFsdWU6dH09dGhpcy5kYXRhLm9wdGlvbnNbZV0sYT1lPT09dz9iOjA7eC5wdXNoKHRoaXMuX3JlbmRlclRleHQodCxmLHAsaCwwLEMsMiwtbSthKSl9eC5wdXNoKCJFVCBRIEVNQyIpO3JldHVybiB4LmpvaW4oIlxuIil9fWNsYXNzIFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5maWVsZFZhbHVlPW51bGw7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGV9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOm51bGwscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHR5cGU6InNpZ25hdHVyZSJ9fX1jbGFzcyBUZXh0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLm5vUm90YXRlPSEwO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5URVhUO2lmKHRoaXMuZGF0YS5oYXNBcHBlYXJhbmNlKXRoaXMuZGF0YS5uYW1lPSJOb0ljb24iO2Vsc2V7dGhpcy5kYXRhLnJlY3RbMV09dGhpcy5kYXRhLnJlY3RbM10tMjI7dGhpcy5kYXRhLnJlY3RbMl09dGhpcy5kYXRhLnJlY3RbMF0rMjI7dGhpcy5kYXRhLm5hbWU9dC5oYXMoIk5hbWUiKT90LmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUifWlmKHQuaGFzKCJTdGF0ZSIpKXt0aGlzLmRhdGEuc3RhdGU9dC5nZXQoIlN0YXRlIil8fG51bGw7dGhpcy5kYXRhLnN0YXRlTW9kZWw9dC5nZXQoIlN0YXRlTW9kZWwiKXx8bnVsbH1lbHNle3RoaXMuZGF0YS5zdGF0ZT1udWxsO3RoaXMuZGF0YS5zdGF0ZU1vZGVsPW51bGx9fX1jbGFzcyBMaW5rQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuTElOSztjb25zdCB0PWdldFF1YWRQb2ludHMoZS5kaWN0LHRoaXMucmVjdGFuZ2xlKTt0JiYodGhpcy5kYXRhLnF1YWRQb2ludHM9dCk7dGhpcy5kYXRhLmJvcmRlckNvbG9yfHw9dGhpcy5kYXRhLmNvbG9yO2guQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmUuYXR0YWNobWVudHN9KX19Y2xhc3MgUG9wdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnR9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuUE9QVVA7bGV0IGE9dC5nZXQoIlBhcmVudCIpO2lmKCFhKXsoMCxyLndhcm4pKCJQb3B1cCBhbm5vdGF0aW9uIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnQgYW5ub3RhdGlvbi4iKTtyZXR1cm59Y29uc3QgaT1hLmdldCgiU3VidHlwZSIpO3RoaXMuZGF0YS5wYXJlbnRUeXBlPWkgaW5zdGFuY2VvZiBzLk5hbWU/aS5uYW1lOm51bGw7Y29uc3Qgbj10LmdldFJhdygiUGFyZW50Iik7dGhpcy5kYXRhLnBhcmVudElkPW4gaW5zdGFuY2VvZiBzLlJlZj9uLnRvU3RyaW5nKCk6bnVsbDtjb25zdCBvPWEuZ2V0QXJyYXkoIlJlY3QiKTtBcnJheS5pc0FycmF5KG8pJiY0PT09by5sZW5ndGg/dGhpcy5kYXRhLnBhcmVudFJlY3Q9ci5VdGlsLm5vcm1hbGl6ZVJlY3Qobyk6dGhpcy5kYXRhLnBhcmVudFJlY3Q9WzAsMCwwLDBdO2NvbnN0IGM9YS5nZXQoIlJUIik7KDAscy5pc05hbWUpKGMsci5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKSYmKGE9YS5nZXQoIklSVCIpKTtpZihhLmhhcygiTSIpKXt0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoYS5nZXQoIk0iKSk7dGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9dGhpcy5tb2RpZmljYXRpb25EYXRlfWVsc2UgdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbDtpZihhLmhhcygiQyIpKXt0aGlzLnNldENvbG9yKGEuZ2V0QXJyYXkoIkMiKSk7dGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3J9ZWxzZSB0aGlzLmRhdGEuY29sb3I9bnVsbDtpZighdGhpcy52aWV3YWJsZSl7Y29uc3QgZT1hLmdldCgiRiIpO3RoaXMuX2lzVmlld2FibGUoZSkmJnRoaXMuc2V0RmxhZ3MoZSl9dGhpcy5zZXRUaXRsZShhLmdldCgiVCIpKTt0aGlzLmRhdGEudGl0bGVPYmo9dGhpcy5fdGl0bGU7dGhpcy5zZXRDb250ZW50cyhhLmdldCgiQ29udGVudHMiKSk7dGhpcy5kYXRhLmNvbnRlbnRzT2JqPXRoaXMuX2NvbnRlbnRzO2EuaGFzKCJSQyIpJiYodGhpcy5kYXRhLnJpY2hUZXh0PW0uWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChhLmdldCgiUkMiKSkpfX10LlBvcHVwQW5ub3RhdGlvbj1Qb3B1cEFubm90YXRpb247Y2xhc3MgRnJlZVRleHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTtjb25zdHt4cmVmOnR9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ7dGhpcy5zZXREZWZhdWx0QXBwZWFyYW5jZShlKTtpZighdGhpcy5hcHBlYXJhbmNlJiZ0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3QgYT1lLmRpY3QuZ2V0KCJDQSIpLHI9bmV3IG4uRmFrZVVuaWNvZGVGb250KHQsInNhbnMtc2VyaWYiKSxpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dGhpcy5hcHBlYXJhbmNlPXIuY3JlYXRlQXBwZWFyYW5jZSh0aGlzLl9jb250ZW50cy5zdHIsdGhpcy5yZWN0YW5nbGUsdGhpcy5yb3RhdGlvbixpLmZvbnRTaXplfHwxMCxpLmZvbnRDb2xvcixhKTt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlLG4uRmFrZVVuaWNvZGVGb250LnRvVW5pY29kZVN0cmVhbSl9ZWxzZSB0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZHx8KDAsci53YXJuKSgiRnJlZVRleHRBbm5vdGF0aW9uOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIil9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuISF0aGlzLmFwcGVhcmFuY2V9c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHthcFJlZjphLGFwOm99KXtjb25zdHtjb2xvcjpjLGZvbnRTaXplOmwscmVjdDpoLHJvdGF0aW9uOnUsdXNlcjpkLHZhbHVlOmZ9PWUsZz1uZXcgcy5EaWN0KHQpO2cuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJBbm5vdCIpKTtnLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRnJlZVRleHQiKSk7Zy5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7Zy5zZXQoIlJlY3QiLGgpO2NvbnN0IHA9YC9IZWx2ICR7bH0gVGYgJHsoMCxuLmdldFBkZkNvbG9yKShjLCEwKX1gO2cuc2V0KCJEQSIscCk7Zy5zZXQoIkNvbnRlbnRzIiwoMCxpLmlzQXNjaWkpKGYpP2Y6KDAsaS5zdHJpbmdUb1VURjE2U3RyaW5nKShmLCEwKSk7Zy5zZXQoIkYiLDQpO2cuc2V0KCJCb3JkZXIiLFswLDAsMF0pO2cuc2V0KCJSb3RhdGUiLHUpO2QmJmcuc2V0KCJUIiwoMCxpLmlzQXNjaWkpKGQpP2Q6KDAsaS5zdHJpbmdUb1VURjE2U3RyaW5nKShkLCEwKSk7aWYoYXx8byl7Y29uc3QgZT1uZXcgcy5EaWN0KHQpO2cuc2V0KCJBUCIsZSk7YT9lLnNldCgiTiIsYSk6ZS5zZXQoIk4iLG8pfXJldHVybiBnfXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGUsdCxhKXtjb25zdHtiYXNlRm9udFJlZjpvLGV2YWx1YXRvcjpjLHRhc2s6bH09YSx7Y29sb3I6aCxmb250U2l6ZTp1LHJlY3Q6ZCxyb3RhdGlvbjpmLHZhbHVlOmd9PWUsbT1uZXcgcy5EaWN0KHQpLGI9bmV3IHMuRGljdCh0KTtpZihvKWIuc2V0KCJIZWx2IixvKTtlbHNle2NvbnN0IGU9bmV3IHMuRGljdCh0KTtlLnNldCgiQmFzZUZvbnQiLHMuTmFtZS5nZXQoIkhlbHZldGljYSIpKTtlLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRm9udCIpKTtlLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiVHlwZTEiKSk7ZS5zZXQoIkVuY29kaW5nIixzLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7Yi5zZXQoIkhlbHYiLGUpfW0uc2V0KCJGb250IixiKTtjb25zdCB5PWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGMsbCx7Zm9udE5hbWU6IkhlbHZldGljYSIsZm9udFNpemU6dX0sbSksW3csUyx4LENdPWQ7bGV0IGs9eC13LHY9Qy1TO2YlMTgwIT0wJiYoW2ssdl09W3Ysa10pO2NvbnN0IEY9Zy5zcGxpdCgiXG4iKSxPPXUvMWUzO2xldCBUPS0xLzA7Y29uc3QgTT1bXTtmb3IobGV0IGUgb2YgRil7Y29uc3QgdD15LmVuY29kZVN0cmluZyhlKTtpZih0Lmxlbmd0aD4xKXJldHVybiBudWxsO2U9dC5qb2luKCIiKTtNLnB1c2goZSk7bGV0IGE9MDtjb25zdCByPXkuY2hhcnNUb0dseXBocyhlKTtmb3IoY29uc3QgZSBvZiByKWErPWUud2lkdGgqTztUPU1hdGgubWF4KFQsYSl9bGV0IEU9MTtUPmsmJihFPWsvVCk7bGV0IEQ9MTtjb25zdCBOPXIuTElORV9GQUNUT1IqdSxSPXIuTElORV9ERVNDRU5UX0ZBQ1RPUip1LEw9TipGLmxlbmd0aDtMPnYmJihEPXYvTCk7Y29uc3QgXz11Kk1hdGgubWluKEUsRCksJD1bInEiLGAwIDAgJHsoMCxpLm51bWJlclRvU3RyaW5nKShrKX0gJHsoMCxpLm51bWJlclRvU3RyaW5nKSh2KX0gcmUgVyBuYCwiQlQiLGAxIDAgMCAxIDAgJHsoMCxpLm51bWJlclRvU3RyaW5nKSh2K1IpfSBUbSAwIFRjICR7KDAsbi5nZXRQZGZDb2xvcikoaCwhMCl9YCxgL0hlbHYgJHsoMCxpLm51bWJlclRvU3RyaW5nKShfKX0gVGZgXSxqPSgwLGkubnVtYmVyVG9TdHJpbmcpKE4pO2Zvcihjb25zdCBlIG9mIE0pJC5wdXNoKGAwIC0ke2p9IFRkICgkeygwLGkuZXNjYXBlU3RyaW5nKShlKX0pIFRqYCk7JC5wdXNoKCJFVCIsIlEiKTtjb25zdCBVPSQuam9pbigiXG4iKSxYPW5ldyBzLkRpY3QodCk7WC5zZXQoIkZvcm1UeXBlIiwxKTtYLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRm9ybSIpKTtYLnNldCgiVHlwZSIscy5OYW1lLmdldCgiWE9iamVjdCIpKTtYLnNldCgiQkJveCIsWzAsMCxrLHZdKTtYLnNldCgiUmVzb3VyY2VzIixtKTtpZihmKXtjb25zdCBlPSgwLGkuZ2V0Um90YXRpb25NYXRyaXgpKGYsayx2KTtYLnNldCgiTWF0cml4IixlKX1jb25zdCBIPW5ldyBwLlN0cmluZ1N0cmVhbShVKTtILmRpY3Q9WDtyZXR1cm4gSH19Y2xhc3MgTGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuTElORTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTtjb25zdCBpPXQuZ2V0QXJyYXkoIkwiKTt0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzPXIuVXRpbC5ub3JtYWxpemVSZWN0KGkpO3RoaXMuc2V0TGluZUVuZGluZ3ModC5nZXRBcnJheSgiTEUiKSk7dGhpcy5kYXRhLmxpbmVFbmRpbmdzPXRoaXMubGluZUVuZGluZ3M7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxuPXQuZ2V0KCJDQSIpLHM9Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKSxvPXM/Z2V0UGRmQ29sb3JBcnJheShzKTpudWxsLGM9bz9uOm51bGwsbD10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLGg9MipsLHU9W3RoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0taCx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzFdLWgsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1syXStoLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10raF07ci5VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSx1KXx8KHRoaXMucmVjdGFuZ2xlPXUpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6YCR7bH0gd2Asc3Ryb2tlQ29sb3I6ZSxmaWxsQ29sb3I6byxzdHJva2VBbHBoYTpuLGZpbGxBbHBoYTpjLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke2lbMF19ICR7aVsxXX0gbWAsYCR7aVsyXX0gJHtpWzNdfSBsYCwiUyIpO3JldHVyblt0WzBdLngtbCx0WzFdLngrbCx0WzNdLnktbCx0WzFdLnkrbF19fSl9fX1jbGFzcyBTcXVhcmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlNRVUFSRTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLHI9dC5nZXQoIkNBIiksaT1nZXRSZ2JDb2xvcih0LmdldEFycmF5KCJJQyIpLG51bGwpLG49aT9nZXRQZGZDb2xvckFycmF5KGkpOm51bGwscz1uP3I6bnVsbDtpZigwPT09dGhpcy5ib3JkZXJTdHlsZS53aWR0aCYmIW4pcmV0dXJuO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6YCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2Asc3Ryb2tlQ29sb3I6ZSxmaWxsQ29sb3I6bixzdHJva2VBbHBoYTpyLGZpbGxBbHBoYTpzLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgYT10WzJdLngrdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLHI9dFsyXS55K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtdGhpcy5ib3JkZXJTdHlsZS53aWR0aCxzPXRbMV0ueS10WzNdLnktdGhpcy5ib3JkZXJTdHlsZS53aWR0aDtlLnB1c2goYCR7YX0gJHtyfSAke2l9ICR7c30gcmVgKTtuP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19Y2xhc3MgQ2lyY2xlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5DSVJDTEU7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxyPXQuZ2V0KCJDQSIpLGk9Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKSxuPWk/Z2V0UGRmQ29sb3JBcnJheShpKTpudWxsLHM9bj9yOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFuKXJldHVybjtjb25zdCBvPTQvMypNYXRoLnRhbihNYXRoLlBJLzgpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6YCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2Asc3Ryb2tlQ29sb3I6ZSxmaWxsQ29sb3I6bixzdHJva2VBbHBoYTpyLGZpbGxBbHBoYTpzLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgYT10WzBdLngrdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLHI9dFswXS55LXRoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10aGlzLmJvcmRlclN0eWxlLndpZHRoLzIscz10WzNdLnkrdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLGM9YSsoaS1hKS8yLGw9cisocy1yKS8yLGg9KGktYSkvMipvLHU9KHMtcikvMipvO2UucHVzaChgJHtjfSAke3N9IG1gLGAke2MraH0gJHtzfSAke2l9ICR7bCt1fSAke2l9ICR7bH0gY2AsYCR7aX0gJHtsLXV9ICR7YytofSAke3J9ICR7Y30gJHtyfSBjYCxgJHtjLWh9ICR7cn0gJHthfSAke2wtdX0gJHthfSAke2x9IGNgLGAke2F9ICR7bCt1fSAke2MtaH0gJHtzfSAke2N9ICR7c30gY2AsImgiKTtuP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19Y2xhc3MgUG9seWxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlBPTFlMSU5FO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS52ZXJ0aWNlcz1bXTtpZighKHRoaXMgaW5zdGFuY2VvZiBQb2x5Z29uQW5ub3RhdGlvbikpe3RoaXMuc2V0TGluZUVuZGluZ3ModC5nZXRBcnJheSgiTEUiKSk7dGhpcy5kYXRhLmxpbmVFbmRpbmdzPXRoaXMubGluZUVuZGluZ3N9Y29uc3QgaT10LmdldEFycmF5KCJWZXJ0aWNlcyIpO2lmKEFycmF5LmlzQXJyYXkoaSkpe2ZvcihsZXQgZT0wLHQ9aS5sZW5ndGg7ZTx0O2UrPTIpdGhpcy5kYXRhLnZlcnRpY2VzLnB1c2goe3g6aVtlXSx5OmlbZSsxXX0pO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0saT10LmdldCgiQ0EiKSxuPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEscz0yKm4sbz1bMS8wLDEvMCwtMS8wLC0xLzBdO2Zvcihjb25zdCBlIG9mIHRoaXMuZGF0YS52ZXJ0aWNlcyl7b1swXT1NYXRoLm1pbihvWzBdLGUueC1zKTtvWzFdPU1hdGgubWluKG9bMV0sZS55LXMpO29bMl09TWF0aC5tYXgob1syXSxlLngrcyk7b1szXT1NYXRoLm1heChvWzNdLGUueStzKX1yLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLG8pfHwodGhpcy5yZWN0YW5nbGU9byk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6YSxleHRyYTpgJHtufSB3YCxzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOmkscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPXRoaXMuZGF0YS52ZXJ0aWNlcztmb3IobGV0IHQ9MCxyPWEubGVuZ3RoO3Q8cjt0KyspZS5wdXNoKGAke2FbdF0ueH0gJHthW3RdLnl9ICR7MD09PXQ/Im0iOiJsIn1gKTtlLnB1c2goIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19fX1jbGFzcyBQb2x5Z29uQW5ub3RhdGlvbiBleHRlbmRzIFBvbHlsaW5lQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OfX1jbGFzcyBDYXJldEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkNBUkVUfX1jbGFzcyBJbmtBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLklOSzt0aGlzLmRhdGEuaW5rTGlzdHM9W107Y29uc3QgaT10LmdldEFycmF5KCJJbmtMaXN0Iik7aWYoQXJyYXkuaXNBcnJheShpKSl7Zm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7KytlKXt0aGlzLmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKGxldCB0PTAscj1pW2VdLmxlbmd0aDt0PHI7dCs9Mil0aGlzLmRhdGEuaW5rTGlzdHNbZV0ucHVzaCh7eDphLmZldGNoSWZSZWYoaVtlXVt0XSkseTphLmZldGNoSWZSZWYoaVtlXVt0KzFdKX0pfWlmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0saT10LmdldCgiQ0EiKSxuPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEscz0yKm4sbz1bMS8wLDEvMCwtMS8wLC0xLzBdO2Zvcihjb25zdCBlIG9mIHRoaXMuZGF0YS5pbmtMaXN0cylmb3IoY29uc3QgdCBvZiBlKXtvWzBdPU1hdGgubWluKG9bMF0sdC54LXMpO29bMV09TWF0aC5taW4ob1sxXSx0Lnktcyk7b1syXT1NYXRoLm1heChvWzJdLHQueCtzKTtvWzNdPU1hdGgubWF4KG9bM10sdC55K3MpfXIuVXRpbC5pbnRlcnNlY3QodGhpcy5yZWN0YW5nbGUsbyl8fCh0aGlzLnJlY3RhbmdsZT1vKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke259IHdgLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6aSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2Zvcihjb25zdCB0IG9mIHRoaXMuZGF0YS5pbmtMaXN0cyl7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSsrKWUucHVzaChgJHt0W2FdLnh9ICR7dFthXS55fSAkezA9PT1hPyJtIjoibCJ9YCk7ZS5wdXNoKCJTIil9cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX1zdGF0aWMgY3JlYXRlTmV3RGljdChlLHQse2FwUmVmOmEsYXA6aX0pe2NvbnN0e3BhdGhzOm4scmVjdDpvLHJvdGF0aW9uOmN9PWUsbD1uZXcgcy5EaWN0KHQpO2wuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJBbm5vdCIpKTtsLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiSW5rIikpO2wuc2V0KCJDcmVhdGlvbkRhdGUiLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2wuc2V0KCJSZWN0IixvKTtsLnNldCgiSW5rTGlzdCIsbi5tYXAoKGU9PmUucG9pbnRzKSkpO2wuc2V0KCJGIiw0KTtsLnNldCgiQm9yZGVyIixbMCwwLDBdKTtsLnNldCgiUm90YXRlIixjKTtjb25zdCBoPW5ldyBzLkRpY3QodCk7bC5zZXQoIkFQIixoKTthP2guc2V0KCJOIixhKTpoLnNldCgiTiIsaSk7cmV0dXJuIGx9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LGEpe2NvbnN0e2NvbG9yOnIscmVjdDpvLHJvdGF0aW9uOmMscGF0aHM6bCx0aGlja25lc3M6aCxvcGFjaXR5OnV9PWUsW2QsZixnLG1dPW87bGV0IGI9Zy1kLHk9bS1mO2MlMTgwIT0wJiYoW2IseV09W3ksYl0pO2NvbnN0IHc9W2Ake2h9IHcgMSBKIDEgamAsYCR7KDAsbi5nZXRQZGZDb2xvcikociwhMSl9YF07MSE9PXUmJncucHVzaCgiL1IwIGdzIik7Y29uc3QgUz1bXTtmb3IoY29uc3R7YmV6aWVyOmV9b2YgbCl7Uy5sZW5ndGg9MDtTLnB1c2goYCR7KDAsaS5udW1iZXJUb1N0cmluZykoZVswXSl9ICR7KDAsaS5udW1iZXJUb1N0cmluZykoZVsxXSl9IG1gKTtmb3IobGV0IHQ9MixhPWUubGVuZ3RoO3Q8YTt0Kz02KXtjb25zdCBhPWUuc2xpY2UodCx0KzYpLm1hcChpLm51bWJlclRvU3RyaW5nKS5qb2luKCIgIik7Uy5wdXNoKGAke2F9IGNgKX1TLnB1c2goIlMiKTt3LnB1c2goUy5qb2luKCJcbiIpKX1jb25zdCB4PXcuam9pbigiXG4iKSxDPW5ldyBzLkRpY3QodCk7Qy5zZXQoIkZvcm1UeXBlIiwxKTtDLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRm9ybSIpKTtDLnNldCgiVHlwZSIscy5OYW1lLmdldCgiWE9iamVjdCIpKTtDLnNldCgiQkJveCIsWzAsMCxiLHldKTtDLnNldCgiTGVuZ3RoIix4Lmxlbmd0aCk7aWYoYyl7Y29uc3QgZT0oMCxpLmdldFJvdGF0aW9uTWF0cml4KShjLGIseSk7Qy5zZXQoIk1hdHJpeCIsZSl9aWYoMSE9PXUpe2NvbnN0IGU9bmV3IHMuRGljdCh0KSxhPW5ldyBzLkRpY3QodCkscj1uZXcgcy5EaWN0KHQpO3Iuc2V0KCJDQSIsdSk7ci5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKTthLnNldCgiUjAiLHIpO2Uuc2V0KCJFeHRHU3RhdGUiLGEpO0Muc2V0KCJSZXNvdXJjZXMiLGUpfWNvbnN0IGs9bmV3IHAuU3RyaW5nU3RyZWFtKHgpO2suZGljdD1DO3JldHVybiBrfX1jbGFzcyBIaWdobGlnaHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2NvbnN0IGU9dGhpcy5hcHBlYXJhbmNlPy5kaWN0LmdldCgiUmVzb3VyY2VzIik7aWYoIXRoaXMuYXBwZWFyYW5jZXx8IWU/LmhhcygiRXh0R1N0YXRlIikpe3RoaXMuYXBwZWFyYW5jZSYmKDAsci53YXJuKSgiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLiIpO2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlsxLDEsMF0saT10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGZpbGxDb2xvcjplLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTppLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke3RbMF0ueH0gJHt0WzBdLnl9IG1gLGAke3RbMV0ueH0gJHt0WzFdLnl9IGxgLGAke3RbM10ueH0gJHt0WzNdLnl9IGxgLGAke3RbMl0ueH0gJHt0WzJdLnl9IGxgLCJmIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgdGhpcy5kYXRhLmhhc1BvcHVwPSExfX1jbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlVOREVSTElORTtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOiJbXSAwIGQgMC41NzEgdyIsc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTpyLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke3RbMl0ueH0gJHt0WzJdLnkrMS4zfSBtYCxgJHt0WzNdLnh9ICR7dFszXS55KzEuM30gbGAsIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEuaGFzUG9wdXA9ITF9fWNsYXNzIFNxdWlnZ2x5QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPSh0WzBdLnktdFsyXS55KS82O2xldCByPWEsaT10WzJdLng7Y29uc3Qgbj10WzJdLnkscz10WzNdLng7ZS5wdXNoKGAke2l9ICR7bityfSBtYCk7ZG97aSs9MjtyPTA9PT1yP2E6MDtlLnB1c2goYCR7aX0gJHtuK3J9IGxgKX13aGlsZShpPHMpO2UucHVzaCgiUyIpO3JldHVyblt0WzJdLngscyxuLTIqYSxuKzIqYV19fSl9fWVsc2UgdGhpcy5kYXRhLmhhc1BvcHVwPSExfX1jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goKHRbMF0ueCt0WzJdLngpLzIrIiAiKyh0WzBdLnkrdFsyXS55KS8yKyIgbSIsKHRbMV0ueCt0WzNdLngpLzIrIiAiKyh0WzFdLnkrdFszXS55KS8yKyIgbCIsIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEuaGFzUG9wdXA9ITF9fWNsYXNzIFN0YW1wQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1RBTVA7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGV9fWNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZSxpPW5ldyBkLkZpbGVTcGVjKHQuZ2V0KCJGUyIpLGEpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5maWxlPWkuc2VyaWFsaXphYmxlO2NvbnN0IG49dC5nZXQoIk5hbWUiKTt0aGlzLmRhdGEubmFtZT1uIGluc3RhbmNlb2Ygcy5OYW1lPygwLHIuc3RyaW5nVG9QREZTdHJpbmcpKG4ubmFtZSk6IlB1c2hQaW4ifX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5GYWtlVW5pY29kZUZvbnQ9dm9pZCAwO3QuY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2U9ZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2Uoe2ZvbnRTaXplOmUsZm9udE5hbWU6dCxmb250Q29sb3I6YX0pe3JldHVybmAvJHsoMCxpLmVzY2FwZVBERk5hbWUpKHQpfSAke2V9IFRmICR7Z2V0UGRmQ29sb3IoYSwhMCl9YH07dC5nZXRQZGZDb2xvcj1nZXRQZGZDb2xvcjt0LnBhcnNlRGVmYXVsdEFwcGVhcmFuY2U9ZnVuY3Rpb24gcGFyc2VEZWZhdWx0QXBwZWFyYW5jZShlKXtyZXR1cm4gbmV3IERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yKGUpLnBhcnNlKCl9O3ZhciByPWEoNCksaT1hKDMpLG49YSgyKSxzPWEoMTIpLG89YSgxMyksYz1hKDgpO2NsYXNzIERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yIGV4dGVuZHMgby5FdmFsdWF0b3JQcmVwcm9jZXNzb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIobmV3IGMuU3RyaW5nU3RyZWFtKGUpKX1wYXJzZSgpe2NvbnN0IGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDs7KXtlLmFyZ3MubGVuZ3RoPTA7aWYoIXRoaXMucmVhZChlKSlicmVhaztpZigwIT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKWNvbnRpbnVlO2NvbnN0e2ZuOmEsYXJnczppfT1lO3N3aXRjaCgwfGEpe2Nhc2Ugbi5PUFMuc2V0Rm9udDpjb25zdFtlLGFdPWk7ZSBpbnN0YW5jZW9mIHIuTmFtZSYmKHQuZm9udE5hbWU9ZS5uYW1lKTsibnVtYmVyIj09dHlwZW9mIGEmJmE+MCYmKHQuZm9udFNpemU9YSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRGaWxsUkdCQ29sb3I6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oaSwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0RmlsbEdyYXk6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGksMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIG4uT1BTLnNldEZpbGxDb2xvclNwYWNlOnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShpLDAsdC5mb250Q29sb3IsMCl9fX1jYXRjaChlKXsoMCxuLndhcm4pKGBwYXJzZURlZmF1bHRBcHBlYXJhbmNlIC0gaWdub3JpbmcgZXJyb3JzOiAiJHtlfSIuYCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGdldFBkZkNvbG9yKGUsdCl7aWYoZVswXT09PWVbMV0mJmVbMV09PT1lWzJdKXtjb25zdCBhPWVbMF0vMjU1O3JldHVybmAkeygwLGkubnVtYmVyVG9TdHJpbmcpKGEpfSAke3Q/ImciOiJHIn1gfXJldHVybiBBcnJheS5mcm9tKGUsKGU9PigwLGkubnVtYmVyVG9TdHJpbmcpKGUvMjU1KSkpLmpvaW4oIiAiKSsiICIrKHQ/InJnIjoiUkciKX1jbGFzcyBGYWtlVW5pY29kZUZvbnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnhyZWY9ZTt0aGlzLndpZHRocz1udWxsO3RoaXMuZmlyc3RDaGFyPTEvMDt0aGlzLmxhc3RDaGFyPS0xLzA7dGhpcy5mb250RmFtaWx5PXQ7Y29uc3QgYT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSk7dGhpcy5jdHhNZWFzdXJlPWEuZ2V0Q29udGV4dCgiMmQiKTtGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWR8fChGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWQ9MSk7dGhpcy5mb250TmFtZT1yLk5hbWUuZ2V0KGBJbnZhbGlkUERGanNGb250XyR7dH1fJHtGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWQrK31gKX1nZXQgdG9Vbmljb2RlUmVmKCl7aWYoIUZha2VVbmljb2RlRm9udC5fdG9Vbmljb2RlUmVmKXtjb25zdCBlPSIvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW5cbjEyIGRpY3QgYmVnaW5cbmJlZ2luY21hcFxuL0NJRFN5c3RlbUluZm9cbjw8IC9SZWdpc3RyeSAoQWRvYmUpXG4vT3JkZXJpbmcgKFVDUykgL1N1cHBsZW1lbnQgMCA+PiBkZWZcbi9DTWFwTmFtZSAvQWRvYmUtSWRlbnRpdHktVUNTIGRlZlxuL0NNYXBUeXBlIDIgZGVmXG4xIGJlZ2luY29kZXNwYWNlcmFuZ2VcbjwwMDAwPiA8RkZGRj5cbmVuZGNvZGVzcGFjZXJhbmdlXG4xIGJlZ2luYmZyYW5nZVxuPDAwMDA+IDxGRkZGPiA8MDAwMD5cbmVuZGJmcmFuZ2VcbmVuZGNtYXAgQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wIGVuZCBlbmQiLHQ9RmFrZVVuaWNvZGVGb250LnRvVW5pY29kZVN0cmVhbT1uZXcgYy5TdHJpbmdTdHJlYW0oZSksYT1uZXcgci5EaWN0KHRoaXMueHJlZik7dC5kaWN0PWE7YS5zZXQoIkxlbmd0aCIsZS5sZW5ndGgpO0Zha2VVbmljb2RlRm9udC5fdG9Vbmljb2RlUmVmPXRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKHQpfXJldHVybiBGYWtlVW5pY29kZUZvbnQuX3RvVW5pY29kZVJlZn1nZXQgZm9udERlc2NyaXB0b3JSZWYoKXtpZighRmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZil7Y29uc3QgZT1uZXcgci5EaWN0KHRoaXMueHJlZik7ZS5zZXQoIlR5cGUiLHIuTmFtZS5nZXQoIkZvbnREZXNjcmlwdG9yIikpO2Uuc2V0KCJGb250TmFtZSIsdGhpcy5mb250TmFtZSk7ZS5zZXQoIkZvbnRGYW1pbHkiLCJNeXJpYWRQcm8gUmVndWxhciIpO2Uuc2V0KCJGb250QkJveCIsWzAsMCwwLDBdKTtlLnNldCgiRm9udFN0cmV0Y2giLHIuTmFtZS5nZXQoIk5vcm1hbCIpKTtlLnNldCgiRm9udFdlaWdodCIsNDAwKTtlLnNldCgiSXRhbGljQW5nbGUiLDApO0Zha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9cmV0dXJuIEZha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWZ9Z2V0IGRlc2NlbmRhbnRGb250UmVmKCl7Y29uc3QgZT1uZXcgci5EaWN0KHRoaXMueHJlZik7ZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKTtlLnNldCgiVHlwZSIsci5OYW1lLmdldCgiRm9udCIpKTtlLnNldCgiU3VidHlwZSIsci5OYW1lLmdldCgiQ0lERm9udFR5cGUwIikpO2Uuc2V0KCJDSURUb0dJRE1hcCIsci5OYW1lLmdldCgiSWRlbnRpdHkiKSk7ZS5zZXQoIkZpcnN0Q2hhciIsdGhpcy5maXJzdENoYXIpO2Uuc2V0KCJMYXN0Q2hhciIsdGhpcy5sYXN0Q2hhcik7ZS5zZXQoIkZvbnREZXNjcmlwdG9yIix0aGlzLmZvbnREZXNjcmlwdG9yUmVmKTtlLnNldCgiRFciLDFlMyk7Y29uc3QgdD1bXSxhPVsuLi50aGlzLndpZHRocy5lbnRyaWVzKCldLnNvcnQoKTtsZXQgaT1udWxsLG49bnVsbDtmb3IoY29uc3RbZSxyXW9mIGEpaWYoaSlpZihlPT09aStuLmxlbmd0aCluLnB1c2gocik7ZWxzZXt0LnB1c2goaSxuKTtpPWU7bj1bcl19ZWxzZXtpPWU7bj1bcl19aSYmdC5wdXNoKGksbik7ZS5zZXQoIlciLHQpO2NvbnN0IHM9bmV3IHIuRGljdCh0aGlzLnhyZWYpO3Muc2V0KCJPcmRlcmluZyIsIklkZW50aXR5Iik7cy5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKTtzLnNldCgiU3VwcGxlbWVudCIsMCk7ZS5zZXQoIkNJRFN5c3RlbUluZm8iLHMpO3JldHVybiB0aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZihlKX1nZXQgYmFzZUZvbnRSZWYoKXtjb25zdCBlPW5ldyByLkRpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpO2Uuc2V0KCJUeXBlIixyLk5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixyLk5hbWUuZ2V0KCJUeXBlMCIpKTtlLnNldCgiRW5jb2RpbmciLHIuTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7ZS5zZXQoIkRlc2NlbmRhbnRGb250cyIsW3RoaXMuZGVzY2VuZGFudEZvbnRSZWZdKTtlLnNldCgiVG9Vbmljb2RlIix0aGlzLnRvVW5pY29kZVJlZik7cmV0dXJuIHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPW5ldyByLkRpY3QodGhpcy54cmVmKSx0PW5ldyByLkRpY3QodGhpcy54cmVmKTt0LnNldCh0aGlzLmZvbnROYW1lLm5hbWUsdGhpcy5iYXNlRm9udFJlZik7ZS5zZXQoIkZvbnQiLHQpO3JldHVybiBlfV9jcmVhdGVDb250ZXh0KCl7dGhpcy53aWR0aHM9bmV3IE1hcDt0aGlzLmN0eE1lYXN1cmUuZm9udD1gMTAwMHB4ICR7dGhpcy5mb250RmFtaWx5fWA7cmV0dXJuIHRoaXMuY3R4TWVhc3VyZX1jcmVhdGVGb250UmVzb3VyY2VzKGUpe2NvbnN0IHQ9dGhpcy5fY3JlYXRlQ29udGV4dCgpO2Zvcihjb25zdCBhIG9mIGUuc3BsaXQoL1xyXG4/fFxuLykpZm9yKGNvbnN0IGUgb2YgYS5zcGxpdCgiIikpe2NvbnN0IGE9ZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMud2lkdGhzLmhhcyhhKSljb250aW51ZTtjb25zdCByPXQubWVhc3VyZVRleHQoZSksaT1NYXRoLmNlaWwoci53aWR0aCk7dGhpcy53aWR0aHMuc2V0KGEsaSk7dGhpcy5maXJzdENoYXI9TWF0aC5taW4oYSx0aGlzLmZpcnN0Q2hhcik7dGhpcy5sYXN0Q2hhcj1NYXRoLm1heChhLHRoaXMubGFzdENoYXIpfXJldHVybiB0aGlzLnJlc291cmNlc31jcmVhdGVBcHBlYXJhbmNlKGUsdCxhLHMsbyxsKXtjb25zdCBoPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSx1PVtdO2xldCBkPS0xLzA7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvXHJcbj98XG4vKSl7dS5wdXNoKHQpO2NvbnN0IGU9aC5tZWFzdXJlVGV4dCh0KS53aWR0aDtkPU1hdGgubWF4KGQsZSk7Zm9yKGNvbnN0IGUgb2YgdC5zcGxpdCgiIikpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApO2xldCBhPXRoaXMud2lkdGhzLmdldCh0KTtpZih2b2lkIDA9PT1hKXtjb25zdCByPWgubWVhc3VyZVRleHQoZSk7YT1NYXRoLmNlaWwoci53aWR0aCk7dGhpcy53aWR0aHMuc2V0KHQsYSk7dGhpcy5maXJzdENoYXI9TWF0aC5taW4odCx0aGlzLmZpcnN0Q2hhcik7dGhpcy5sYXN0Q2hhcj1NYXRoLm1heCh0LHRoaXMubGFzdENoYXIpfX19ZCo9cy8xZTM7Y29uc3RbZixnLHAsbV09dDtsZXQgYj1wLWYseT1tLWc7YSUxODAhPTAmJihbYix5XT1beSxiXSk7bGV0IHc9MTtkPmImJih3PWIvZCk7bGV0IFM9MTtjb25zdCB4PW4uTElORV9GQUNUT1IqcyxDPW4uTElORV9ERVNDRU5UX0ZBQ1RPUipzLGs9eCp1Lmxlbmd0aDtrPnkmJihTPXkvayk7Y29uc3Qgdj1zKk1hdGgubWluKHcsUyksRj1bInEiLGAwIDAgJHsoMCxpLm51bWJlclRvU3RyaW5nKShiKX0gJHsoMCxpLm51bWJlclRvU3RyaW5nKSh5KX0gcmUgVyBuYCwiQlQiLGAxIDAgMCAxIDAgJHsoMCxpLm51bWJlclRvU3RyaW5nKSh5K0MpfSBUbSAwIFRjICR7Z2V0UGRmQ29sb3IobywhMCl9YCxgLyR7dGhpcy5mb250TmFtZS5uYW1lfSAkeygwLGkubnVtYmVyVG9TdHJpbmcpKHYpfSBUZmBdLHtyZXNvdXJjZXM6T309dGhpcztpZigxIT09KGw9Im51bWJlciI9PXR5cGVvZiBsJiZsPj0wJiZsPD0xP2w6MSkpe0YucHVzaCgiL1IwIGdzIik7Y29uc3QgZT1uZXcgci5EaWN0KHRoaXMueHJlZiksdD1uZXcgci5EaWN0KHRoaXMueHJlZik7dC5zZXQoImNhIixsKTt0LnNldCgiQ0EiLGwpO3Quc2V0KCJUeXBlIixyLk5hbWUuZ2V0KCJFeHRHU3RhdGUiKSk7ZS5zZXQoIlIwIix0KTtPLnNldCgiRXh0R1N0YXRlIixlKX1jb25zdCBUPSgwLGkubnVtYmVyVG9TdHJpbmcpKHgpO2Zvcihjb25zdCBlIG9mIHUpRi5wdXNoKGAwIC0ke1R9IFRkIDwkeygwLGkuc3RyaW5nVG9VVEYxNkhleFN0cmluZykoZSl9PiBUamApO0YucHVzaCgiRVQiLCJRIik7Y29uc3QgTT1GLmpvaW4oIlxuIiksRT1uZXcgci5EaWN0KHRoaXMueHJlZik7RS5zZXQoIlN1YnR5cGUiLHIuTmFtZS5nZXQoIkZvcm0iKSk7RS5zZXQoIlR5cGUiLHIuTmFtZS5nZXQoIlhPYmplY3QiKSk7RS5zZXQoIkJCb3giLFswLDAsYix5XSk7RS5zZXQoIkxlbmd0aCIsTS5sZW5ndGgpO0Uuc2V0KCJSZXNvdXJjZXMiLE8pO2lmKGEpe2NvbnN0IGU9KDAsaS5nZXRSb3RhdGlvbk1hdHJpeCkoYSxiLHkpO0Uuc2V0KCJNYXRyaXgiLGUpfWNvbnN0IEQ9bmV3IGMuU3RyaW5nU3RyZWFtKE0pO0QuZGljdD1FO3JldHVybiBEfX10LkZha2VVbmljb2RlRm9udD1GYWtlVW5pY29kZUZvbnR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Db2xvclNwYWNlPXZvaWQgMDt2YXIgcj1hKDIpLGk9YSg0KSxuPWEoNSkscz1hKDMpO2NsYXNzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmNvbnN0cnVjdG9yPT09Q29sb3JTcGFjZSYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuIik7dGhpcy5uYW1lPWU7dGhpcy5udW1Db21wcz10fWdldFJnYihlLHQpe2NvbnN0IGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3RoaXMuZ2V0UmdiSXRlbShlLHQsYSwwKTtyZXR1cm4gYX1nZXRSZ2JJdGVtKGUsdCxhLGkpeygwLHIudW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JJdGVtIil9Z2V0UmdiQnVmZmVyKGUsdCxhLGksbixzLG8peygwLHIudW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JCdWZmZXIiKX1nZXRPdXRwdXRMZW5ndGgoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0T3V0cHV0TGVuZ3RoIil9aXNQYXNzdGhyb3VnaChlKXtyZXR1cm4hMX1pc0RlZmF1bHREZWNvZGUoZSx0KXtyZXR1cm4gQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUoZSx0aGlzLm51bUNvbXBzKX1maWxsUmdiKGUsdCxhLHIsaSxuLHMsbyxjKXtjb25zdCBsPXQqYTtsZXQgaD1udWxsO2NvbnN0IHU9MTw8cyxkPWEhPT1pfHx0IT09cjtpZih0aGlzLmlzUGFzc3Rocm91Z2gocykpaD1vO2Vsc2UgaWYoMT09PXRoaXMubnVtQ29tcHMmJmw+dSYmIkRldmljZUdyYXkiIT09dGhpcy5uYW1lJiYiRGV2aWNlUkdCIiE9PXRoaXMubmFtZSl7Y29uc3QgdD1zPD04P25ldyBVaW50OEFycmF5KHUpOm5ldyBVaW50MTZBcnJheSh1KTtmb3IobGV0IGU9MDtlPHU7ZSsrKXRbZV09ZTtjb25zdCBhPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKnUpO3RoaXMuZ2V0UmdiQnVmZmVyKHQsMCx1LGEsMCxzLDApO2lmKGQpe2g9bmV3IFVpbnQ4QXJyYXkoMypsKTtsZXQgZT0wO2ZvcihsZXQgdD0wO3Q8bDsrK3Qpe2NvbnN0IHI9MypvW3RdO2hbZSsrXT1hW3JdO2hbZSsrXT1hW3IrMV07aFtlKytdPWFbcisyXX19ZWxzZXtsZXQgdD0wO2ZvcihsZXQgcj0wO3I8bDsrK3Ipe2NvbnN0IGk9MypvW3JdO2VbdCsrXT1hW2ldO2VbdCsrXT1hW2krMV07ZVt0KytdPWFbaSsyXTt0Kz1jfX19ZWxzZSBpZihkKXtoPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmwpO3RoaXMuZ2V0UmdiQnVmZmVyKG8sMCxsLGgsMCxzLDApfWVsc2UgdGhpcy5nZXRSZ2JCdWZmZXIobywwLHIqbixlLDAscyxjKTtpZihoKWlmKGQpIWZ1bmN0aW9uIHJlc2l6ZVJnYkltYWdlKGUsdCxhLHIsaSxuLHMpe3M9MSE9PXM/MDpzO2NvbnN0IG89YS9pLGM9ci9uO2xldCBsLGg9MDtjb25zdCB1PW5ldyBVaW50MTZBcnJheShpKSxkPTMqYTtmb3IobGV0IGU9MDtlPGk7ZSsrKXVbZV09MypNYXRoLmZsb29yKGUqbyk7Zm9yKGxldCBhPTA7YTxuO2ErKyl7Y29uc3Qgcj1NYXRoLmZsb29yKGEqYykqZDtmb3IobGV0IGE9MDthPGk7YSsrKXtsPXIrdVthXTt0W2grK109ZVtsKytdO3RbaCsrXT1lW2wrK107dFtoKytdPWVbbCsrXTtoKz1zfX19KGgsZSx0LGEscixpLGMpO2Vsc2V7bGV0IHQ9MCxhPTA7Zm9yKGxldCBpPTAscz1yKm47aTxzO2krKyl7ZVt0KytdPWhbYSsrXTtlW3QrK109aFthKytdO2VbdCsrXT1oW2ErK107dCs9Y319fWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9c3RhdGljIF9jYWNoZShlLHQsYSxyKXtpZighYSl0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgInBhcnNlZENvbG9yU3BhY2UiIGFyZ3VtZW50LicpO2xldCBuLHM7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtzPWU7ZT10LmZldGNoKGUpfWUgaW5zdGFuY2VvZiBpLk5hbWUmJihuPWUubmFtZSk7KG58fHMpJiZhLnNldChuLHMscil9c3RhdGljIGdldENhY2hlZChlLHQsYSl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLmdldENhY2hlZCAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtjb25zdCByPWEuZ2V0QnlSZWYoZSk7aWYocilyZXR1cm4gcjt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBpLk5hbWUpe2NvbnN0IHQ9YS5nZXRCeU5hbWUoZS5uYW1lKTtpZih0KXJldHVybiB0fXJldHVybiBudWxsfXN0YXRpYyBhc3luYyBwYXJzZUFzeW5jKHtjczplLHhyZWY6dCxyZXNvdXJjZXM6YT1udWxsLHBkZkZ1bmN0aW9uRmFjdG9yeTpyLGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KXtjb25zdCBuPXRoaXMuX3BhcnNlKGUsdCxhLHIpO3RoaXMuX2NhY2hlKGUsdCxpLG4pO3JldHVybiBufXN0YXRpYyBwYXJzZSh7Y3M6ZSx4cmVmOnQscmVzb3VyY2VzOmE9bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6cixsb2NhbENvbG9yU3BhY2VDYWNoZTppfSl7Y29uc3Qgbj10aGlzLmdldENhY2hlZChlLHQsaSk7aWYobilyZXR1cm4gbjtjb25zdCBzPXRoaXMuX3BhcnNlKGUsdCxhLHIpO3RoaXMuX2NhY2hlKGUsdCxpLHMpO3JldHVybiBzfXN0YXRpYyBfcGFyc2UoZSx0LGE9bnVsbCxuKXtpZigoZT10LmZldGNoSWZSZWYoZSkpaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJHIjpjYXNlIkRldmljZUdyYXkiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtjYXNlIlJHQiI6Y2FzZSJEZXZpY2VSR0IiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2Nhc2UiQ01ZSyI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4gbmV3IFBhdHRlcm5DUyhudWxsKTtkZWZhdWx0OmlmKGEgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IHI9YS5nZXQoIkNvbG9yU3BhY2UiKTtpZihyIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBzPXIuZ2V0KGUubmFtZSk7aWYocyl7aWYocyBpbnN0YW5jZW9mIGkuTmFtZSlyZXR1cm4gdGhpcy5fcGFyc2Uocyx0LGEsbik7ZT1zO2JyZWFrfX19dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVucmVjb2duaXplZCBDb2xvclNwYWNlOiAke2UubmFtZX1gKX1pZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCBpPXQuZmV0Y2hJZlJlZihlWzBdKS5uYW1lO2xldCBzLG8sdSxkLGYsZztzd2l0Y2goaSl7Y2FzZSJHIjpjYXNlIkRldmljZUdyYXkiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtjYXNlIlJHQiI6Y2FzZSJEZXZpY2VSR0IiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2Nhc2UiQ01ZSyI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7Y2FzZSJDYWxHcmF5IjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtkPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtmPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtnPXMuZ2V0KCJHYW1tYSIpO3JldHVybiBuZXcgYyhkLGYsZyk7Y2FzZSJDYWxSR0IiOnM9dC5mZXRjaElmUmVmKGVbMV0pO2Q9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpO2Y9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO2c9cy5nZXRBcnJheSgiR2FtbWEiKTtjb25zdCBwPXMuZ2V0QXJyYXkoIk1hdHJpeCIpO3JldHVybiBuZXcgbChkLGYsZyxwKTtjYXNlIklDQ0Jhc2VkIjpjb25zdCBtPXQuZmV0Y2hJZlJlZihlWzFdKS5kaWN0O289bS5nZXQoIk4iKTtjb25zdCBiPW0uZ2V0KCJBbHRlcm5hdGUiKTtpZihiKXtjb25zdCBlPXRoaXMuX3BhcnNlKGIsdCxhLG4pO2lmKGUubnVtQ29tcHM9PT1vKXJldHVybiBlOygwLHIud2FybikoIklDQ0Jhc2VkIGNvbG9yIHNwYWNlOiBJZ25vcmluZyBpbmNvcnJlY3QgL0FsdGVybmF0ZSBlbnRyeS4iKX1pZigxPT09bylyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7aWYoMz09PW8pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7aWYoND09PW8pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2JyZWFrO2Nhc2UiUGF0dGVybiI6dT1lWzFdfHxudWxsO3UmJih1PXRoaXMuX3BhcnNlKHUsdCxhLG4pKTtyZXR1cm4gbmV3IFBhdHRlcm5DUyh1KTtjYXNlIkkiOmNhc2UiSW5kZXhlZCI6dT10aGlzLl9wYXJzZShlWzFdLHQsYSxuKTtjb25zdCB5PXQuZmV0Y2hJZlJlZihlWzJdKSsxLHc9dC5mZXRjaElmUmVmKGVbM10pO3JldHVybiBuZXcgSW5kZXhlZENTKHUseSx3KTtjYXNlIlNlcGFyYXRpb24iOmNhc2UiRGV2aWNlTiI6Y29uc3QgUz10LmZldGNoSWZSZWYoZVsxXSk7bz1BcnJheS5pc0FycmF5KFMpP1MubGVuZ3RoOjE7dT10aGlzLl9wYXJzZShlWzJdLHQsYSxuKTtjb25zdCB4PW4uY3JlYXRlKGVbM10pO3JldHVybiBuZXcgQWx0ZXJuYXRlQ1Mobyx1LHgpO2Nhc2UiTGFiIjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtkPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtmPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtjb25zdCBDPXMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBoKGQsZixDKTtkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke2l9YCl9fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7ZX1gKX1zdGF0aWMgaXNEZWZhdWx0RGVjb2RlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITA7aWYoMip0IT09ZS5sZW5ndGgpeygwLHIud2FybikoIlRoZSBkZWNvZGUgbWFwIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGgiKTtyZXR1cm4hMH1mb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kz0yKWlmKDAhPT1lW3RdfHwxIT09ZVt0KzFdKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBnZXQgc2luZ2xldG9ucygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJzaW5nbGV0b25zIix7Z2V0IGdyYXkoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZ3JheSIsbmV3IERldmljZUdyYXlDUyl9LGdldCByZ2IoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywicmdiIixuZXcgRGV2aWNlUmdiQ1MpfSxnZXQgY215aygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJjbXlrIixuZXcgbyl9fSl9fXQuQ29sb3JTcGFjZT1Db2xvclNwYWNlO2NsYXNzIEFsdGVybmF0ZUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkFsdGVybmF0ZSIsZSk7dGhpcy5iYXNlPXQ7dGhpcy50aW50Rm49YTt0aGlzLnRtcEJ1Zj1uZXcgRmxvYXQzMkFycmF5KHQubnVtQ29tcHMpfWdldFJnYkl0ZW0oZSx0LGEscil7Y29uc3QgaT10aGlzLnRtcEJ1Zjt0aGlzLnRpbnRGbihlLHQsaSwwKTt0aGlzLmJhc2UuZ2V0UmdiSXRlbShpLDAsYSxyKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz10aGlzLnRpbnRGbixjPXRoaXMuYmFzZSxsPTEvKCgxPDxuKS0xKSxoPWMubnVtQ29tcHMsdT1jLnVzZXNaZXJvVG9PbmVSYW5nZSxkPShjLmlzUGFzc3Rocm91Z2goOCl8fCF1KSYmMD09PXM7bGV0IGY9ZD9pOjA7Y29uc3QgZz1kP3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqYSkscD10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheShwKSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7bGV0IHksdztmb3IoeT0wO3k8YTt5Kyspe2Zvcih3PTA7dzxwO3crKyltW3ddPWVbdCsrXSpsO28obSwwLGIsMCk7aWYodSlmb3Iodz0wO3c8aDt3KyspZ1tmKytdPTI1NSpiW3ddO2Vsc2V7Yy5nZXRSZ2JJdGVtKGIsMCxnLGYpO2YrPWh9fWR8fGMuZ2V0UmdiQnVmZmVyKGcsMCxhLHIsaSw4LHMpfWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fWNsYXNzIFBhdHRlcm5DUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoIlBhdHRlcm4iLG51bGwpO3RoaXMuYmFzZT1lfWlzRGVmYXVsdERlY29kZShlLHQpeygwLHIudW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1jbGFzcyBJbmRleGVkQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiSW5kZXhlZCIsMSk7dGhpcy5iYXNlPWU7dGhpcy5oaWdoVmFsPXQ7Y29uc3QgaT1lLm51bUNvbXBzKnQ7dGhpcy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoaSk7aWYoYSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSl7Y29uc3QgZT1hLmdldEJ5dGVzKGkpO3RoaXMubG9va3VwLnNldChlKX1lbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW5kZXhlZENTIC0gdW5yZWNvZ25pemVkIGxvb2t1cCB0YWJsZTogJHthfWApO2ZvcihsZXQgZT0wO2U8aTsrK2UpdGhpcy5sb29rdXBbZV09MjU1JmEuY2hhckNvZGVBdChlKX19Z2V0UmdiSXRlbShlLHQsYSxyKXtjb25zdCBpPXRoaXMuYmFzZS5udW1Db21wcyxuPWVbdF0qaTt0aGlzLmJhc2UuZ2V0UmdiQnVmZmVyKHRoaXMubG9va3VwLG4sMSxhLHIsOCwwKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz10aGlzLmJhc2UsYz1vLm51bUNvbXBzLGw9by5nZXRPdXRwdXRMZW5ndGgoYyxzKSxoPXRoaXMubG9va3VwO2ZvcihsZXQgbj0wO248YTsrK24pe2NvbnN0IGE9ZVt0KytdKmM7by5nZXRSZ2JCdWZmZXIoaCxhLDEscixpLDgscyk7aSs9bH19Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9aXNEZWZhdWx0RGVjb2RlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITA7aWYoMiE9PWUubGVuZ3RoKXsoMCxyLndhcm4pKCJEZWNvZGUgbWFwIGxlbmd0aCBpcyBub3QgY29ycmVjdCIpO3JldHVybiEwfWlmKCFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDEpeygwLHIud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpO3JldHVybiEwfXJldHVybiAwPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xfX1jbGFzcyBEZXZpY2VHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZUdyYXkiLDEpfWdldFJnYkl0ZW0oZSx0LGEscil7Y29uc3QgaT0yNTUqZVt0XTthW3JdPWFbcisxXT1hW3IrMl09aX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz0yNTUvKCgxPDxuKS0xKTtsZXQgYz10LGw9aTtmb3IobGV0IHQ9MDt0PGE7Kyt0KXtjb25zdCB0PW8qZVtjKytdO3JbbCsrXT10O3JbbCsrXT10O3JbbCsrXT10O2wrPXN9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpfX1jbGFzcyBEZXZpY2VSZ2JDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoKXtzdXBlcigiRGV2aWNlUkdCIiwzKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2Fbcl09MjU1KmVbdF07YVtyKzFdPTI1NSplW3QrMV07YVtyKzJdPTI1NSplW3QrMl19Z2V0UmdiQnVmZmVyKGUsdCxhLHIsaSxuLHMpe2lmKDg9PT1uJiYwPT09cyl7ci5zZXQoZS5zdWJhcnJheSh0LHQrMyphKSxpKTtyZXR1cm59Y29uc3Qgbz0yNTUvKCgxPDxuKS0xKTtsZXQgYz10LGw9aTtmb3IobGV0IHQ9MDt0PGE7Kyt0KXtyW2wrK109byplW2MrK107cltsKytdPW8qZVtjKytdO3JbbCsrXT1vKmVbYysrXTtsKz1zfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9aXNQYXNzdGhyb3VnaChlKXtyZXR1cm4gOD09PWV9fWNvbnN0IG89ZnVuY3Rpb24gRGV2aWNlQ215a0NTQ2xvc3VyZSgpe2Z1bmN0aW9uIGNvbnZlcnRUb1JnYihlLHQsYSxyLGkpe2NvbnN0IG49ZVt0XSphLHM9ZVt0KzFdKmEsbz1lW3QrMl0qYSxjPWVbdCszXSphO3JbaV09MjU1K24qKC00LjM4NzMzMjM4NDYwOTk4OCpuKzU0LjQ4NjE1MTk0MTg5MTc2KnMrMTguODIyOTA1MDIxNjUzMDIqbysyMTIuMjU2NjI0NTE2Mzk1ODUqYy0yODUuMjMzMTAyNjEzNzAwNCkrcyooMS43MTQ5NzYzNDc3MzYyMTM0KnMtNS42MDk2NzM2OTA0MDQ3MzE1Km8rLTE3Ljg3Mzg3MDg2MTQxNTQ0NCpjLTUuNDk3MDA2NDI3MTk2MzY2KStvKigtMi41MjE3MzQwMTMxNjgzMDMzKm8tMjEuMjQ4OTIzMzM3MzUzMDczKmMrMTcuNTExOTI3MDg0MTgxMykrYyooLTIxLjg2MTIyMTQ3NDYzNjA1KmMtMTg5LjQ4MTgwODM1OTIyNzQ3KTtyW2krMV09MjU1K24qKDguODQxMDQxNDIyMDM2MTQ5Km4rNjAuMTE4MDI3MDQ1NTk3MzY2KnMrNi44NzE0MjU1OTIwNDkwMDcqbyszMS4xNTkxMDAxMzAwNTU5MjIqYy03OS4yOTcwODQ0ODE2NTQ4KStzKigtMTUuMzEwMzYxMzA2OTY3ODE3KnMrMTcuNTc1MjUxMjYxMTA5NDgyKm8rMTMxLjM1MjUwOTEyNDkzOTc2KmMtMTkwLjk0NTMzMDI1ODg5NTEpK28qKDQuNDQ0MzM5MTAyODUyNzM5Km8rOS44NjMyODYxNDkzNDA1KmMtMjQuODY3NDE1ODI1NTU4NzgpK2MqKC0yMC43MzczMjU0NzExODEwMzQqYy0xODcuODA0NTM3MDk3MTk1NzgpO3JbaSsyXT0yNTUrbiooLjg4NDI1MjI0MzAwMDMyOTYqbis4LjA3ODY3NzUwMzExMjkyOCpzKzMwLjg5OTc4MzA5NzAzNzI5Km8tLjIzODgzMjM4Njg5MTc4OTM0KmMtMTQuMTgzNTc2Nzk5NjczMjg2KStzKigxMC40OTU5MzI3MzQzMjA3MipzKzYzLjAyMzc4NDk0NzU0MDUyKm8rNTAuNjA2OTU3NjU2MzYwNzM0KmMtMTEyLjIzODg0MjUzNzE5MjQ4KStvKiguMDMyOTYwNDExMTQ4NzMyMTcqbysxMTUuNjAzODQ0NDk2NDY2NDEqYy0xOTMuNTgyMDkzNTY4NjE1MDUpK2MqKC0yMi4zMzgxNjgwNzMwOTg4NipjLTE4MC4xMjYxMzk3NDcwODM2Nyl9cmV0dXJuIGNsYXNzIERldmljZUNteWtDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoKXtzdXBlcigiRGV2aWNlQ01ZSyIsNCl9Z2V0UmdiSXRlbShlLHQsYSxyKXtjb252ZXJ0VG9SZ2IoZSx0LDEsYSxyKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz0xLygoMTw8biktMSk7Zm9yKGxldCBuPTA7bjxhO24rKyl7Y29udmVydFRvUmdiKGUsdCxvLHIsaSk7dCs9NDtpKz0zK3N9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlLzQqKDMrdCl8MH19fSgpLGM9ZnVuY3Rpb24gQ2FsR3JheUNTQ2xvc3VyZSgpe2Z1bmN0aW9uIGNvbnZlcnRUb1JnYihlLHQsYSxyLGksbil7Y29uc3Qgcz0odFthXSpuKSoqZS5HLG89ZS5ZVypzLGM9TWF0aC5tYXgoMjk1LjgqbyoqLjMzMzMzMzMzMzMzMzMzMzMtNDAuOCwwKTtyW2ldPWM7cltpKzFdPWM7cltpKzJdPWN9cmV0dXJuIGNsYXNzIENhbEdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJDYWxHcmF5IiwxKTtpZighZSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbEdyYXkiKTt0fHw9WzAsMCwwXTthfHw9MTt0aGlzLlhXPWVbMF07dGhpcy5ZVz1lWzFdO3RoaXMuWlc9ZVsyXTt0aGlzLlhCPXRbMF07dGhpcy5ZQj10WzFdO3RoaXMuWkI9dFsyXTt0aGlzLkc9YTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKHRoaXMuWEI8MHx8dGhpcy5ZQjwwfHx0aGlzLlpCPDApeygwLHIuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLlhCPXRoaXMuWUI9dGhpcy5aQj0wfTA9PT10aGlzLlhCJiYwPT09dGhpcy5ZQiYmMD09PXRoaXMuWkJ8fCgwLHIud2FybikoYCR7dGhpcy5uYW1lfSwgQmxhY2tQb2ludDogWEI6ICR7dGhpcy5YQn0sIFlCOiAke3RoaXMuWUJ9LCBaQjogJHt0aGlzLlpCfSwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLmApO2lmKHRoaXMuRzwxKXsoMCxyLmluZm8pKGBJbnZhbGlkIEdhbW1hOiAke3RoaXMuR30gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HPTF9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz0xLygoMTw8biktMSk7Zm9yKGxldCBuPTA7bjxhOysrbil7Y29udmVydFRvUmdiKHRoaXMsZSx0LHIsaSxvKTt0Kz0xO2krPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fX0oKSxsPWZ1bmN0aW9uIENhbFJHQkNTQ2xvc3VyZSgpe2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheShbLjg5NTEsLjI2NjQsLS4xNjE0LC0uNzUwMiwxLjcxMzUsLjAzNjcsLjAzODksLS4wNjg1LDEuMDI5Nl0pLHQ9bmV3IEZsb2F0MzJBcnJheShbLjk4Njk5MjksLS4xNDcwNTQzLC4xNTk5NjI3LC40MzIzMDUzLC41MTgzNjAzLC4wNDkyOTEyLC0uMDA4NTI4NywuMDQwMDQyOCwuOTY4NDg2N10pLGE9bmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLC0xLjUzNzEzODUsLS40OTg1MzE0LC0uOTY5MjY2LDEuODc2MDEwOCwuMDQxNTU2LC4wNTU2NDM0LC0uMjA0MDI1OSwxLjA1NzIyNTJdKSxpPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSksbj1uZXcgRmxvYXQzMkFycmF5KDMpLHM9bmV3IEZsb2F0MzJBcnJheSgzKSxvPW5ldyBGbG9hdDMyQXJyYXkoMyksYz0oMjQvMTE2KSoqMy84O2Z1bmN0aW9uIG1hdHJpeFByb2R1Y3QoZSx0LGEpe2FbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl07YVsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXTthWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIHNSR0JUcmFuc2ZlckZ1bmN0aW9uKGUpe3JldHVybiBlPD0uMDAzMTMwOD9hZGp1c3RUb1JhbmdlKDAsMSwxMi45MiplKTplPj0uOTk1NTQ1MjU/MTphZGp1c3RUb1JhbmdlKDAsMSwxLjA1NSplKiooMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGFkanVzdFRvUmFuZ2UoZSx0LGEpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQsYSkpfWZ1bmN0aW9uIGRlY29kZUwoZSl7cmV0dXJuIGU8MD8tZGVjb2RlTCgtZSk6ZT44PygoZSsxNikvMTE2KSoqMzplKmN9ZnVuY3Rpb24gY29udmVydFRvUmdiKHIsYyxsLGgsdSxkKXtjb25zdCBmPWFkanVzdFRvUmFuZ2UoMCwxLGNbbF0qZCksZz1hZGp1c3RUb1JhbmdlKDAsMSxjW2wrMV0qZCkscD1hZGp1c3RUb1JhbmdlKDAsMSxjW2wrMl0qZCksbT0xPT09Zj8xOmYqKnIuR1IsYj0xPT09Zz8xOmcqKnIuR0cseT0xPT09cD8xOnAqKnIuR0Isdz1yLk1YQSptK3IuTVhCKmIrci5NWEMqeSxTPXIuTVlBKm0rci5NWUIqYityLk1ZQyp5LHg9ci5NWkEqbStyLk1aQipiK3IuTVpDKnksQz1zO0NbMF09dztDWzFdPVM7Q1syXT14O2NvbnN0IGs9bzshZnVuY3Rpb24gbm9ybWFsaXplV2hpdGVQb2ludFRvRmxhdChhLHIsaSl7aWYoMT09PWFbMF0mJjE9PT1hWzJdKXtpWzBdPXJbMF07aVsxXT1yWzFdO2lbMl09clsyXTtyZXR1cm59Y29uc3Qgcz1pO21hdHJpeFByb2R1Y3QoZSxyLHMpO2NvbnN0IG89bjshZnVuY3Rpb24gY29udmVydFRvRmxhdChlLHQsYSl7YVswXT0xKnRbMF0vZVswXTthWzFdPTEqdFsxXS9lWzFdO2FbMl09MSp0WzJdL2VbMl19KGEscyxvKTttYXRyaXhQcm9kdWN0KHQsbyxpKX0oci53aGl0ZVBvaW50LEMsayk7Y29uc3Qgdj1zOyFmdW5jdGlvbiBjb21wZW5zYXRlQmxhY2tQb2ludChlLHQsYSl7aWYoMD09PWVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXSl7YVswXT10WzBdO2FbMV09dFsxXTthWzJdPXRbMl07cmV0dXJufWNvbnN0IHI9ZGVjb2RlTCgwKSxpPSgxLXIpLygxLWRlY29kZUwoZVswXSkpLG49MS1pLHM9KDEtcikvKDEtZGVjb2RlTChlWzFdKSksbz0xLXMsYz0oMS1yKS8oMS1kZWNvZGVMKGVbMl0pKSxsPTEtYzthWzBdPXRbMF0qaStuO2FbMV09dFsxXSpzK287YVsyXT10WzJdKmMrbH0oci5ibGFja1BvaW50LGssdik7Y29uc3QgRj1vOyFmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoYSxyLGkpe2NvbnN0IHM9aTttYXRyaXhQcm9kdWN0KGUscixzKTtjb25zdCBvPW47IWZ1bmN0aW9uIGNvbnZlcnRUb0Q2NShlLHQsYSl7YVswXT0uOTUwNDcqdFswXS9lWzBdO2FbMV09MSp0WzFdL2VbMV07YVsyXT0xLjA4ODgzKnRbMl0vZVsyXX0oYSxzLG8pO21hdHJpeFByb2R1Y3QodCxvLGkpfShpLHYsRik7Y29uc3QgTz1zO21hdHJpeFByb2R1Y3QoYSxGLE8pO2hbdV09MjU1KnNSR0JUcmFuc2ZlckZ1bmN0aW9uKE9bMF0pO2hbdSsxXT0yNTUqc1JHQlRyYW5zZmVyRnVuY3Rpb24oT1sxXSk7aFt1KzJdPTI1NSpzUkdCVHJhbnNmZXJGdW5jdGlvbihPWzJdKX1yZXR1cm4gY2xhc3MgQ2FsUkdCQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhLGkpe3N1cGVyKCJDYWxSR0IiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsUkdCIik7dHx8PW5ldyBGbG9hdDMyQXJyYXkoMyk7YXx8PW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSk7aXx8PW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMSwwLDAsMCwxXSk7Y29uc3Qgbj1lWzBdLHM9ZVsxXSxvPWVbMl07dGhpcy53aGl0ZVBvaW50PWU7Y29uc3QgYz10WzBdLGw9dFsxXSxoPXRbMl07dGhpcy5ibGFja1BvaW50PXQ7dGhpcy5HUj1hWzBdO3RoaXMuR0c9YVsxXTt0aGlzLkdCPWFbMl07dGhpcy5NWEE9aVswXTt0aGlzLk1ZQT1pWzFdO3RoaXMuTVpBPWlbMl07dGhpcy5NWEI9aVszXTt0aGlzLk1ZQj1pWzRdO3RoaXMuTVpCPWlbNV07dGhpcy5NWEM9aVs2XTt0aGlzLk1ZQz1pWzddO3RoaXMuTVpDPWlbOF07aWYobjwwfHxvPDB8fDEhPT1zKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9LCBubyBmYWxsYmFjayBhdmFpbGFibGVgKTtpZihjPDB8fGw8MHx8aDwwKXsoMCxyLmluZm8pKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSBbJHtjfSwgJHtsfSwgJHtofV0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuYmxhY2tQb2ludD1uZXcgRmxvYXQzMkFycmF5KDMpfWlmKHRoaXMuR1I8MHx8dGhpcy5HRzwwfHx0aGlzLkdCPDApeygwLHIuaW5mbykoYEludmFsaWQgR2FtbWEgWyR7dGhpcy5HUn0sICR7dGhpcy5HR30sICR7dGhpcy5HQn1dIGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuR1I9dGhpcy5HRz10aGlzLkdCPTF9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixpLG4scyl7Y29uc3Qgbz0xLygoMTw8biktMSk7Zm9yKGxldCBuPTA7bjxhOysrbil7Y29udmVydFRvUmdiKHRoaXMsZSx0LHIsaSxvKTt0Kz0zO2krPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX19KCksaD1mdW5jdGlvbiBMYWJDU0Nsb3N1cmUoKXtmdW5jdGlvbiBmbl9nKGUpe2xldCB0O3Q9ZT49Ni8yOT9lKiozOjEwOC84NDEqKGUtNC8yOSk7cmV0dXJuIHR9ZnVuY3Rpb24gZGVjb2RlKGUsdCxhLHIpe3JldHVybiBhK2UqKHItYSkvdH1mdW5jdGlvbiBjb252ZXJ0VG9SZ2IoZSx0LGEscixpLG4pe2xldCBzPXRbYV0sbz10W2ErMV0sYz10W2ErMl07aWYoITEhPT1yKXtzPWRlY29kZShzLHIsMCwxMDApO289ZGVjb2RlKG8scixlLmFtaW4sZS5hbWF4KTtjPWRlY29kZShjLHIsZS5ibWluLGUuYm1heCl9bz5lLmFtYXg/bz1lLmFtYXg6bzxlLmFtaW4mJihvPWUuYW1pbik7Yz5lLmJtYXg/Yz1lLmJtYXg6YzxlLmJtaW4mJihjPWUuYm1pbik7Y29uc3QgbD0ocysxNikvMTE2LGg9bCtvLzUwMCx1PWwtYy8yMDAsZD1lLlhXKmZuX2coaCksZj1lLllXKmZuX2cobCksZz1lLlpXKmZuX2codSk7bGV0IHAsbSxiO2lmKGUuWlc8MSl7cD0zLjEzMzkqZCstMS42MTcqZistLjQ5MDYqZzttPS0uOTc4NSpkKzEuOTE2KmYrLjAzMzMqZztiPS4wNzIqZCstLjIyOSpmKzEuNDA1NypnfWVsc2V7cD0zLjI0MDYqZCstMS41MzcyKmYrLS40OTg2Kmc7bT0tLjk2ODkqZCsxLjg3NTgqZisuMDQxNSpnO2I9LjA1NTcqZCstLjIwNCpmKzEuMDU3Kmd9aVtuXT0yNTUqTWF0aC5zcXJ0KHApO2lbbisxXT0yNTUqTWF0aC5zcXJ0KG0pO2lbbisyXT0yNTUqTWF0aC5zcXJ0KGIpfXJldHVybiBjbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJMYWIiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgTGFiIik7dHx8PVswLDAsMF07YXx8PVstMTAwLDEwMCwtMTAwLDEwMF07dGhpcy5YVz1lWzBdO3RoaXMuWVc9ZVsxXTt0aGlzLlpXPWVbMl07dGhpcy5hbWluPWFbMF07dGhpcy5hbWF4PWFbMV07dGhpcy5ibWluPWFbMl07dGhpcy5ibWF4PWFbM107dGhpcy5YQj10WzBdO3RoaXMuWUI9dFsxXTt0aGlzLlpCPXRbMl07aWYodGhpcy5YVzwwfHx0aGlzLlpXPDB8fDEhPT10aGlzLllXKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7aWYodGhpcy5YQjwwfHx0aGlzLllCPDB8fHRoaXMuWkI8MCl7KDAsci5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpO3RoaXMuWEI9dGhpcy5ZQj10aGlzLlpCPTB9aWYodGhpcy5hbWluPnRoaXMuYW1heHx8dGhpcy5ibWluPnRoaXMuYm1heCl7KDAsci5pbmZvKSgiSW52YWxpZCBSYW5nZSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzIik7dGhpcy5hbWluPS0xMDA7dGhpcy5hbWF4PTEwMDt0aGlzLmJtaW49LTEwMDt0aGlzLmJtYXg9MTAwfX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnZlcnRUb1JnYih0aGlzLGUsdCwhMSxhLHIpfWdldFJnYkJ1ZmZlcihlLHQsYSxyLGksbixzKXtjb25zdCBvPSgxPDxuKS0xO2ZvcihsZXQgbj0wO248YTtuKyspe2NvbnZlcnRUb1JnYih0aGlzLGUsdCxvLHIsaSk7dCs9MztpKz0zK3N9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpLzN8MH1pc0RlZmF1bHREZWNvZGUoZSx0KXtyZXR1cm4hMH1nZXQgdXNlc1plcm9Ub09uZVJhbmdlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInVzZXNaZXJvVG9PbmVSYW5nZSIsITEpfX19KCl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QYXJ0aWFsRXZhbHVhdG9yPXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPXZvaWQgMDt2YXIgcj1hKDIpLGk9YSgxNCksbj1hKDQpLHM9YSgzNCksbz1hKDM3KSxjPWEoNDEpLGw9YSg1MCksaD1hKDUxKSx1PWEoNDIpLGQ9YSg1NyksZj1hKDE2KSxnPWEoNTkpLHA9YSg4KSxtPWEoNSksYj1hKDYwKSx5PWEoMTIpLHc9YSgxOCksUz1hKDM4KSx4PWEoNjEpLEM9YSgzOSksaz1hKDMpLHY9YSg0NSksRj1hKDQwKSxPPWEoNjIpLFQ9YSg2MyksTT1hKDY0KSxFPWEoNjUpO2NvbnN0IEQ9T2JqZWN0LmZyZWV6ZSh7bWF4SW1hZ2VTaXplOi0xLGRpc2FibGVGb250RmFjZTohMSxpZ25vcmVFcnJvcnM6ITEsaXNFdmFsU3VwcG9ydGVkOiEwLGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOiExLGNhbnZhc01heEFyZWFJbkJ5dGVzOi0xLGZvbnRFeHRyYVByb3BlcnRpZXM6ITEsdXNlU3lzdGVtRm9udHM6ITAsY01hcFVybDpudWxsLHN0YW5kYXJkRm9udERhdGFVcmw6bnVsbH0pLE49MSxSPTIsTD1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBub3JtYWxpemVCbGVuZE1vZGUoZSx0PSExKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPW5vcm1hbGl6ZUJsZW5kTW9kZSh0LCEwKTtpZihlKXJldHVybiBlfSgwLHIud2FybikoYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGUgQXJyYXk6ICR7ZX1gKTtyZXR1cm4ic291cmNlLW92ZXIifWlmKCEoZSBpbnN0YW5jZW9mIG4uTmFtZSkpcmV0dXJuIHQ/bnVsbDoic291cmNlLW92ZXIiO3N3aXRjaChlLm5hbWUpe2Nhc2UiTm9ybWFsIjpjYXNlIkNvbXBhdGlibGUiOnJldHVybiJzb3VyY2Utb3ZlciI7Y2FzZSJNdWx0aXBseSI6cmV0dXJuIm11bHRpcGx5IjtjYXNlIlNjcmVlbiI6cmV0dXJuInNjcmVlbiI7Y2FzZSJPdmVybGF5IjpyZXR1cm4ib3ZlcmxheSI7Y2FzZSJEYXJrZW4iOnJldHVybiJkYXJrZW4iO2Nhc2UiTGlnaHRlbiI6cmV0dXJuImxpZ2h0ZW4iO2Nhc2UiQ29sb3JEb2RnZSI6cmV0dXJuImNvbG9yLWRvZGdlIjtjYXNlIkNvbG9yQnVybiI6cmV0dXJuImNvbG9yLWJ1cm4iO2Nhc2UiSGFyZExpZ2h0IjpyZXR1cm4iaGFyZC1saWdodCI7Y2FzZSJTb2Z0TGlnaHQiOnJldHVybiJzb2Z0LWxpZ2h0IjtjYXNlIkRpZmZlcmVuY2UiOnJldHVybiJkaWZmZXJlbmNlIjtjYXNlIkV4Y2x1c2lvbiI6cmV0dXJuImV4Y2x1c2lvbiI7Y2FzZSJIdWUiOnJldHVybiJodWUiO2Nhc2UiU2F0dXJhdGlvbiI6cmV0dXJuInNhdHVyYXRpb24iO2Nhc2UiQ29sb3IiOnJldHVybiJjb2xvciI7Y2FzZSJMdW1pbm9zaXR5IjpyZXR1cm4ibHVtaW5vc2l0eSJ9aWYodClyZXR1cm4gbnVsbDsoMCxyLndhcm4pKGBVbnN1cHBvcnRlZCBibGVuZCBtb2RlOiAke2UubmFtZX1gKTtyZXR1cm4ic291cmNlLW92ZXIifWZ1bmN0aW9uIGluY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KGUpe2UuZm49PT1yLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QmJmUuYXJnc1swXT8uY291bnQ+MCYmZS5hcmdzWzBdLmNvdW50Kyt9Y2xhc3MgVGltZVNsb3RNYW5hZ2Vye3N0YXRpYyBUSU1FX1NMT1RfRFVSQVRJT05fTVM9MjA7c3RhdGljIENIRUNLX1RJTUVfRVZFUlk9MTAwO2NvbnN0cnVjdG9yKCl7dGhpcy5yZXNldCgpfWNoZWNrKCl7aWYoKyt0aGlzLmNoZWNrZWQ8VGltZVNsb3RNYW5hZ2VyLkNIRUNLX1RJTUVfRVZFUlkpcmV0dXJuITE7dGhpcy5jaGVja2VkPTA7cmV0dXJuIHRoaXMuZW5kVGltZTw9RGF0ZS5ub3coKX1yZXNldCgpe3RoaXMuZW5kVGltZT1EYXRlLm5vdygpK1RpbWVTbG90TWFuYWdlci5USU1FX1NMT1RfRFVSQVRJT05fTVM7dGhpcy5jaGVja2VkPTB9fWNsYXNzIFBhcnRpYWxFdmFsdWF0b3J7Y29uc3RydWN0b3Ioe3hyZWY6ZSxoYW5kbGVyOnQscGFnZUluZGV4OmEsaWRGYWN0b3J5OnIsZm9udENhY2hlOmksYnVpbHRJbkNNYXBDYWNoZTpuLHN0YW5kYXJkRm9udERhdGFDYWNoZTpzLGdsb2JhbEltYWdlQ2FjaGU6byxzeXN0ZW1Gb250Q2FjaGU6YyxvcHRpb25zOmw9bnVsbH0pe3RoaXMueHJlZj1lO3RoaXMuaGFuZGxlcj10O3RoaXMucGFnZUluZGV4PWE7dGhpcy5pZEZhY3Rvcnk9cjt0aGlzLmZvbnRDYWNoZT1pO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1uO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPXM7dGhpcy5nbG9iYWxJbWFnZUNhY2hlPW87dGhpcy5zeXN0ZW1Gb250Q2FjaGU9Yzt0aGlzLm9wdGlvbnM9bHx8RDt0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITE7dGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlPW5ldyBnLlJlZ2lvbmFsSW1hZ2VDYWNoZTt0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQ9dGhpcy5mZXRjaEJ1aWx0SW5DTWFwLmJpbmQodGhpcyk7Ty5JbWFnZVJlc2l6ZXIuc2V0TWF4QXJlYSh0aGlzLm9wdGlvbnMuY2FudmFzTWF4QXJlYUluQnl0ZXMpfWdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCl7Y29uc3QgZT1uZXcgZC5QREZGdW5jdGlvbkZhY3Rvcnkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLm9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkfSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIl9wZGZGdW5jdGlvbkZhY3RvcnkiLGUpfWNsb25lKGU9bnVsbCl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKHRoaXMpO3Qub3B0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zLGUpO3JldHVybiB0fWhhc0JsZW5kTW9kZXMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiBuLkRpY3QpKXJldHVybiExO2lmKGUub2JqSWQmJnQuaGFzKGUub2JqSWQpKXJldHVybiExO2NvbnN0IGE9bmV3IG4uUmVmU2V0KHQpO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IGk9W2VdLHM9dGhpcy54cmVmO2Zvcig7aS5sZW5ndGg7KXtjb25zdCBlPWkuc2hpZnQoKSx0PWUuZ2V0KCJFeHRHU3RhdGUiKTtpZih0IGluc3RhbmNlb2Ygbi5EaWN0KWZvcihsZXQgZSBvZiB0LmdldFJhd1ZhbHVlcygpKXtpZihlIGluc3RhbmNlb2Ygbi5SZWYpe2lmKGEuaGFzKGUpKWNvbnRpbnVlO3RyeXtlPXMuZmV0Y2goZSl9Y2F0Y2godCl7YS5wdXQoZSk7KDAsci5pbmZvKShgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBuLkRpY3QpKWNvbnRpbnVlO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IHQ9ZS5nZXQoIkJNIik7aWYodCBpbnN0YW5jZW9mIG4uTmFtZSl7aWYoIk5vcm1hbCIhPT10Lm5hbWUpcmV0dXJuITB9ZWxzZSBpZih2b2lkIDAhPT10JiZBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIG4uTmFtZSYmIk5vcm1hbCIhPT1lLm5hbWUpcmV0dXJuITB9Y29uc3Qgbz1lLmdldCgiWE9iamVjdCIpO2lmKG8gaW5zdGFuY2VvZiBuLkRpY3QpZm9yKGxldCBlIG9mIG8uZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBuLlJlZil7aWYoYS5oYXMoZSkpY29udGludWU7dHJ5e2U9cy5mZXRjaChlKX1jYXRjaCh0KXthLnB1dChlKTsoMCxyLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgWE9iamVjdDogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKWNvbnRpbnVlO2UuZGljdC5vYmpJZCYmYS5wdXQoZS5kaWN0Lm9iaklkKTtjb25zdCB0PWUuZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKHQgaW5zdGFuY2VvZiBuLkRpY3QmJighdC5vYmpJZHx8IWEuaGFzKHQub2JqSWQpKSl7aS5wdXNoKHQpO3Qub2JqSWQmJmEucHV0KHQub2JqSWQpfX19Zm9yKGNvbnN0IGUgb2YgYSl0LnB1dChlKTtyZXR1cm4hMX1hc3luYyBmZXRjaEJ1aWx0SW5DTWFwKGUpe2NvbnN0IHQ9dGhpcy5idWlsdEluQ01hcENhY2hlLmdldChlKTtpZih0KXJldHVybiB0O2xldCBhO2lmKG51bGwhPT10aGlzLm9wdGlvbnMuY01hcFVybCl7Y29uc3QgdD1gJHt0aGlzLm9wdGlvbnMuY01hcFVybH0ke2V9LmJjbWFwYCxpPWF3YWl0IGZldGNoKHQpO2lmKCFpLm9rKXRocm93IG5ldyBFcnJvcihgZmV0Y2hCdWlsdEluQ01hcDogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7dH0iIHdpdGggIiR7aS5zdGF0dXNUZXh0fSIuYCk7YT17Y01hcERhdGE6bmV3IFVpbnQ4QXJyYXkoYXdhaXQgaS5hcnJheUJ1ZmZlcigpKSxjb21wcmVzc2lvblR5cGU6ci5DTWFwQ29tcHJlc3Npb25UeXBlLkJJTkFSWX19ZWxzZSBhPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoQnVpbHRJbkNNYXAiLHtuYW1lOmV9KTthLmNvbXByZXNzaW9uVHlwZSE9PXIuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FJiZ0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9YXN5bmMgZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpe2NvbnN0IHQ9dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuZ2V0KGUpO2lmKHQpcmV0dXJuIG5ldyBwLlN0cmVhbSh0KTtpZih0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJiJTeW1ib2wiIT09ZSYmIlphcGZEaW5nYmF0cyIhPT1lKXJldHVybiBudWxsO2NvbnN0IGE9KDAsYy5nZXRGb250TmFtZVRvRmlsZU1hcCkoKVtlXTtsZXQgaTtpZihudWxsIT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2NvbnN0IGU9YCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHthfWAsdD1hd2FpdCBmZXRjaChlKTt0Lm9rP2k9YXdhaXQgdC5hcnJheUJ1ZmZlcigpOigwLHIud2FybikoYGZldGNoU3RhbmRhcmRGb250RGF0YTogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7ZX0iIHdpdGggIiR7dC5zdGF0dXNUZXh0fSIuYCl9ZWxzZSB0cnl7aT1hd2FpdCB0aGlzLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGZXRjaFN0YW5kYXJkRm9udERhdGEiLHtmaWxlbmFtZTphfSl9Y2F0Y2goZSl7KDAsci53YXJuKShgZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJHthfSIgd2l0aCAiJHtlfSIuYCl9aWYoIWkpcmV0dXJuIG51bGw7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuc2V0KGUsaSk7cmV0dXJuIG5ldyBwLlN0cmVhbShpKX1hc3luYyBidWlsZEZvcm1YT2JqZWN0KGUsdCxhLGkscyxvLGMpe2NvbnN0IGw9dC5kaWN0LGg9bC5nZXRBcnJheSgiTWF0cml4Iik7bGV0IHUsZCxmPWwuZ2V0QXJyYXkoIkJCb3giKTtmPUFycmF5LmlzQXJyYXkoZikmJjQ9PT1mLmxlbmd0aD9yLlV0aWwubm9ybWFsaXplUmVjdChmKTpudWxsO2wuaGFzKCJPQyIpJiYodT1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGwuZ2V0KCJPQyIpLGUpKTt2b2lkIDAhPT11JiZpLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHVdKTtjb25zdCBnPWwuZ2V0KCJHcm91cCIpO2lmKGcpe2Q9e21hdHJpeDpoLGJib3g6ZixzbWFzazphLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfTtjb25zdCB0PWcuZ2V0KCJTIik7bGV0IHM9bnVsbDtpZigoMCxuLmlzTmFtZSkodCwiVHJhbnNwYXJlbmN5Iikpe2QuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITE7ZC5rbm9ja291dD1nLmdldCgiSyIpfHwhMTtpZihnLmhhcygiQ1MiKSl7Y29uc3QgdD1nLmdldFJhdygiQ1MiKSxhPXkuQ29sb3JTcGFjZS5nZXRDYWNoZWQodCx0aGlzLnhyZWYsYyk7cz1hfHxhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7Y3M6dCxyZXNvdXJjZXM6ZSxsb2NhbENvbG9yU3BhY2VDYWNoZTpjfSl9fWlmKGE/LmJhY2tkcm9wKXtzfHw9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO2EuYmFja2Ryb3A9cy5nZXRSZ2IoYS5iYWNrZHJvcCwwKX1pLmFkZE9wKHIuT1BTLmJlZ2luR3JvdXAsW2RdKX1jb25zdCBwPWc/W2gsbnVsbF06W2gsZl07aS5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW4scCk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8ZSxvcGVyYXRvckxpc3Q6aSxpbml0aWFsU3RhdGU6b30pLnRoZW4oKGZ1bmN0aW9uKCl7aS5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKTtnJiZpLmFkZE9wKHIuT1BTLmVuZEdyb3VwLFtkXSk7dm9pZCAwIT09dSYmaS5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKX1fc2VuZEltZ0RhdGEoZSx0LGE9ITEpe2NvbnN0IHI9dD9bdC5iaXRtYXB8fHQuZGF0YS5idWZmZXJdOm51bGw7cmV0dXJuIHRoaXMucGFyc2luZ1R5cGUzRm9udHx8YT90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbZSwiSW1hZ2UiLHRdLHIpOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtlLHRoaXMucGFnZUluZGV4LCJJbWFnZSIsdF0scil9YXN5bmMgYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmUsaW1hZ2U6dCxpc0lubGluZTphPSExLG9wZXJhdG9yTGlzdDppLGNhY2hlS2V5Om4sbG9jYWxJbWFnZUNhY2hlOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6b30pe2NvbnN0IGM9dC5kaWN0LGw9Yy5vYmpJZCxoPWMuZ2V0KCJXIiwiV2lkdGgiKSx1PWMuZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoIWh8fCJudW1iZXIiIT10eXBlb2YgaHx8IXV8fCJudW1iZXIiIT10eXBlb2YgdSl7KDAsci53YXJuKSgiSW1hZ2UgZGltZW5zaW9ucyBhcmUgbWlzc2luZywgb3Igbm90IG51bWJlcnMuIik7cmV0dXJufWNvbnN0IGQ9dGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtpZigtMSE9PWQmJmgqdT5kKXtjb25zdCBlPSJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuIjtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXsoMCxyLndhcm4pKGUpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoZSl9bGV0IGY7Yy5oYXMoIk9DIikmJihmPWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoYy5nZXQoIk9DIiksZSkpO2xldCBnLHA7aWYoYy5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExKXtjb25zdCBlPWMuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSxhPWgrNz4+MyxvPXQuZ2V0Qnl0ZXMoYSp1KSxkPWMuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpe2c9RS5QREZJbWFnZS5jcmVhdGVSYXdNYXNrKHtpbWdBcnJheTpvLHdpZHRoOmgsaGVpZ2h0OnUsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06dCBpbnN0YW5jZW9mIHcuRGVjb2RlU3RyZWFtLGludmVyc2VEZWNvZGU6ZD8uWzBdPjAsaW50ZXJwb2xhdGU6ZX0pO2cuY2FjaGVkPSEhbjtwPVtnXTtpLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxwLGYpO2lmKG4pe2NvbnN0IGU9e2ZuOnIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxhcmdzOnAsb3B0aW9uYWxDb250ZW50OmZ9O3Muc2V0KG4sbCxlKTtsJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsbCxlKX1yZXR1cm59Zz1hd2FpdCBFLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5Om8sd2lkdGg6aCxoZWlnaHQ6dSxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTp0IGluc3RhbmNlb2Ygdy5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTpkPy5bMF0+MCxpbnRlcnBvbGF0ZTplLGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH0pO2lmKGcuaXNTaW5nbGVPcGFxdWVQaXhlbCl7aS5hZGRJbWFnZU9wcyhyLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2ssW10sZik7aWYobil7Y29uc3QgZT17Zm46ci5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLGFyZ3M6W10sb3B0aW9uYWxDb250ZW50OmZ9O3Muc2V0KG4sbCxlKTtsJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsbCxlKX1yZXR1cm59Y29uc3QgbT1gbWFza18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YDtpLmFkZERlcGVuZGVuY3kobSk7dGhpcy5fc2VuZEltZ0RhdGEobSxnKTtwPVt7ZGF0YTptLHdpZHRoOmcud2lkdGgsaGVpZ2h0OmcuaGVpZ2h0LGludGVycG9sYXRlOmcuaW50ZXJwb2xhdGUsY291bnQ6MX1dO2kuYWRkSW1hZ2VPcHMoci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LHAsZik7aWYobil7Y29uc3QgZT17Zm46ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn07cy5zZXQobixsLGUpO2wmJnRoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCxsLGUpfXJldHVybn1jb25zdCBtPWMuZ2V0KCJTTSIsIlNNYXNrIil8fCExLGI9Yy5nZXQoIk1hc2siKXx8ITE7aWYoYSYmIW0mJiFiJiZoK3U8MjAwKXtjb25zdCBuPW5ldyBFLlBERkltYWdlKHt4cmVmOnRoaXMueHJlZixyZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmEscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSk7Zz1hd2FpdCBuLmNyZWF0ZUltYWdlRGF0YSghMCwhMSk7aS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD10aGlzLm9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7aS5hZGRJbWFnZU9wcyhyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxbZ10sZik7cmV0dXJufWxldCB5PWBpbWdfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWAsUz0hMTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpeT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke3l9YDtlbHNlIGlmKGwpe1M9dGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNob3VsZENhY2hlKGwsdGhpcy5wYWdlSW5kZXgpO1MmJih5PWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7eX1gKX1pLmFkZERlcGVuZGVuY3koeSk7cD1beSxoLHVdO0UuUERGSW1hZ2UuYnVpbGRJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOmUsaW1hZ2U6dCxpc0lubGluZTphLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6b30pLnRoZW4oKGFzeW5jIGU9PntnPWF3YWl0IGUuY3JlYXRlSW1hZ2VEYXRhKCExLHRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCk7aWYobiYmbCYmUyl7bGV0IGU9MDtlPWcuYml0bWFwP2cud2lkdGgqZy5oZWlnaHQqNDpnLmRhdGEubGVuZ3RoO3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGRCeXRlU2l6ZShsLGUpfXJldHVybiB0aGlzLl9zZW5kSW1nRGF0YSh5LGcsUyl9KSkuY2F0Y2goKGU9PnsoMCxyLndhcm4pKGBVbmFibGUgdG8gZGVjb2RlIGltYWdlICIke3l9IjogIiR7ZX0iLmApO3JldHVybiB0aGlzLl9zZW5kSW1nRGF0YSh5LG51bGwsUyl9KSk7aS5hZGRJbWFnZU9wcyhyLk9QUy5wYWludEltYWdlWE9iamVjdCxwLGYpO2lmKG4pe2NvbnN0IGU9e2ZuOnIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn07cy5zZXQobixsLGUpO2lmKGwpe3RoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCxsLGUpO2lmKFMpeygwLHIuYXNzZXJ0KSghYSwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YShsLHtvYmpJZDp5LGZuOnIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6ZixieXRlU2l6ZTowfSl9fX19aGFuZGxlU01hc2soZSx0LGEscixpLG4pe2NvbnN0IHM9ZS5nZXQoIkciKSxvPXtzdWJ0eXBlOmUuZ2V0KCJTIikubmFtZSxiYWNrZHJvcDplLmdldCgiQkMiKX0sYz1lLmdldCgiVFIiKTtpZigoMCxkLmlzUERGRnVuY3Rpb24pKGMpKXtjb25zdCBlPXRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUoYyksdD1uZXcgVWludDhBcnJheSgyNTYpLGE9bmV3IEZsb2F0MzJBcnJheSgxKTtmb3IobGV0IHI9MDtyPDI1NjtyKyspe2FbMF09ci8yNTU7ZShhLDAsYSwwKTt0W3JdPTI1NSphWzBdfDB9by50cmFuc2Zlck1hcD10fXJldHVybiB0aGlzLmJ1aWxkRm9ybVhPYmplY3QodCxzLG8sYSxyLGkuc3RhdGUuY2xvbmUoKSxuKX1oYW5kbGVUcmFuc2ZlckZ1bmN0aW9uKGUpe2xldCB0O2lmKEFycmF5LmlzQXJyYXkoZSkpdD1lO2Vsc2V7aWYoISgwLGQuaXNQREZGdW5jdGlvbikoZSkpcmV0dXJuIG51bGw7dD1bZV19Y29uc3QgYT1bXTtsZXQgcj0wLGk9MDtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO3IrKztpZigoMCxuLmlzTmFtZSkodCwiSWRlbnRpdHkiKSl7YS5wdXNoKG51bGwpO2NvbnRpbnVlfWlmKCEoMCxkLmlzUERGRnVuY3Rpb24pKHQpKXJldHVybiBudWxsO2NvbnN0IHM9dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSh0KSxvPW5ldyBVaW50OEFycmF5KDI1NiksYz1uZXcgRmxvYXQzMkFycmF5KDEpO2ZvcihsZXQgZT0wO2U8MjU2O2UrKyl7Y1swXT1lLzI1NTtzKGMsMCxjLDApO29bZV09MjU1KmNbMF18MH1hLnB1c2gobyk7aSsrfXJldHVybiAxIT09ciYmNCE9PXJ8fDA9PT1pP251bGw6YX1oYW5kbGVUaWxpbmdUeXBlKGUsdCxhLGkscyxvLGMsaCl7Y29uc3QgdT1uZXcgTS5PcGVyYXRvckxpc3QsZD1uLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbcy5nZXQoIlJlc291cmNlcyIpLGFdfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06aSx0YXNrOmMscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0OnV9KS50aGVuKChmdW5jdGlvbigpe2NvbnN0IGE9dS5nZXRJUigpLHI9KDAsbC5nZXRUaWxpbmdQYXR0ZXJuSVIpKGEscyx0KTtvLmFkZERlcGVuZGVuY2llcyh1LmRlcGVuZGVuY2llcyk7by5hZGRPcChlLHIpO3Mub2JqSWQmJmguc2V0KG51bGwscy5vYmpJZCx7b3BlcmF0b3JMaXN0SVI6YSxkaWN0OnN9KX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGhhbmRsZVRpbGluZ1R5cGUgLSBpZ25vcmluZyBwYXR0ZXJuOiAiJHtlfSIuYCl9fSkpfWhhbmRsZVNldEZvbnQoZSx0LGEscixpLG8sYz1udWxsLGw9bnVsbCl7Y29uc3QgaD10Py5bMF1pbnN0YW5jZW9mIG4uTmFtZT90WzBdLm5hbWU6bnVsbDtyZXR1cm4gdGhpcy5sb2FkRm9udChoLGEsZSxjLGwpLnRoZW4oKHQ9PnQuZm9udC5pc1R5cGUzRm9udD90LmxvYWRUeXBlM0RhdGEodGhpcyxlLGkpLnRoZW4oKGZ1bmN0aW9uKCl7ci5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyk7cmV0dXJuIHR9KSkuY2F0Y2goKGU9Pm5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udChgVHlwZTMgZm9udCBsb2FkIGVycm9yOiAke2V9YCksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSkpOnQpKS50aGVuKChlPT57by5mb250PWUuZm9udDtlLnNlbmQodGhpcy5oYW5kbGVyKTtyZXR1cm4gZS5sb2FkZWROYW1lfSkpfWhhbmRsZVRleHQoZSx0KXtjb25zdCBhPXQuZm9udCxpPWEuY2hhcnNUb0dseXBocyhlKTtpZihhLmRhdGEpeyghISh0LnRleHRSZW5kZXJpbmdNb2RlJnIuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyl8fCJQYXR0ZXJuIj09PXQuZmlsbENvbG9yU3BhY2UubmFtZXx8YS5kaXNhYmxlRm9udEZhY2V8fHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpJiZQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKGEsaSx0aGlzLmhhbmRsZXIsdGhpcy5vcHRpb25zKX1yZXR1cm4gaX1lbnN1cmVTdGF0ZUZvbnQoZSl7aWYoZS5mb250KXJldHVybjtjb25zdCB0PW5ldyByLkZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgdDsoMCxyLndhcm4pKGBlbnN1cmVTdGF0ZUZvbnQ6ICIke3R9Ii5gKX1hc3luYyBzZXRHU3RhdGUoe3Jlc291cmNlczplLGdTdGF0ZTp0LG9wZXJhdG9yTGlzdDphLGNhY2hlS2V5OmksdGFzazpzLHN0YXRlTWFuYWdlcjpvLGxvY2FsR1N0YXRlQ2FjaGU6Yyxsb2NhbENvbG9yU3BhY2VDYWNoZTpsfSl7Y29uc3QgaD10Lm9iaklkO2xldCB1PSEwO2NvbnN0IGQ9W107bGV0IGY9UHJvbWlzZS5yZXNvbHZlKCk7Zm9yKGNvbnN0IGkgb2YgdC5nZXRLZXlzKCkpe2NvbnN0IGM9dC5nZXQoaSk7c3dpdGNoKGkpe2Nhc2UiVHlwZSI6YnJlYWs7Y2FzZSJMVyI6Y2FzZSJMQyI6Y2FzZSJMSiI6Y2FzZSJNTCI6Y2FzZSJEIjpjYXNlIlJJIjpjYXNlIkZMIjpjYXNlIkNBIjpjYXNlImNhIjpkLnB1c2goW2ksY10pO2JyZWFrO2Nhc2UiRm9udCI6dT0hMTtmPWYudGhlbigoKCk9PnRoaXMuaGFuZGxlU2V0Rm9udChlLG51bGwsY1swXSxhLHMsby5zdGF0ZSkudGhlbigoZnVuY3Rpb24oZSl7YS5hZGREZXBlbmRlbmN5KGUpO2QucHVzaChbaSxbZSxjWzFdXV0pfSkpKSk7YnJlYWs7Y2FzZSJCTSI6ZC5wdXNoKFtpLG5vcm1hbGl6ZUJsZW5kTW9kZShjKV0pO2JyZWFrO2Nhc2UiU01hc2siOmlmKCgwLG4uaXNOYW1lKShjLCJOb25lIikpe2QucHVzaChbaSwhMV0pO2JyZWFrfWlmKGMgaW5zdGFuY2VvZiBuLkRpY3Qpe3U9ITE7Zj1mLnRoZW4oKCgpPT50aGlzLmhhbmRsZVNNYXNrKGMsZSxhLHMsbyxsKSkpO2QucHVzaChbaSwhMF0pfWVsc2UoMCxyLndhcm4pKCJVbnN1cHBvcnRlZCBTTWFzayB0eXBlIik7YnJlYWs7Y2FzZSJUUiI6Y29uc3QgdD10aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24oYyk7ZC5wdXNoKFtpLHRdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsci5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2kpO2JyZWFrO2RlZmF1bHQ6KDAsci5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIraSl9fXJldHVybiBmLnRoZW4oKGZ1bmN0aW9uKCl7ZC5sZW5ndGg+MCYmYS5hZGRPcChyLk9QUy5zZXRHU3RhdGUsW2RdKTt1JiZjLnNldChpLGgsZCl9KSl9bG9hZEZvbnQoZSx0LGEsaT1udWxsLG89bnVsbCl7Y29uc3QgZXJyb3JGb250PWFzeW5jKCk9Pm5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udChgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KTtsZXQgYztpZih0KXQgaW5zdGFuY2VvZiBuLlJlZiYmKGM9dCk7ZWxzZXtjb25zdCB0PWEuZ2V0KCJGb250Iik7dCYmKGM9dC5nZXRSYXcoZSkpfWlmKGMpe2lmKHRoaXMucGFyc2luZ1R5cGUzRm9udCYmdGhpcy50eXBlM0ZvbnRSZWZzLmhhcyhjKSlyZXR1cm4gZXJyb3JGb250KCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGMpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoYyk7dD10aGlzLnhyZWYuZmV0Y2hJZlJlZihjKX1pZighKHQgaW5zdGFuY2VvZiBuLkRpY3QpKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyYmIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7KDAsci53YXJuKShgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKTtyZXR1cm4gZXJyb3JGb250KCl9KDAsci53YXJuKShgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZSAtLSBhdHRlbXB0aW5nIHRvIGZhbGxiYWNrIHRvIGEgZGVmYXVsdCBmb250LmApO3Q9aXx8UGFydGlhbEV2YWx1YXRvci5mYWxsYmFja0ZvbnREaWN0fWlmKHQuY2FjaGVLZXkmJnRoaXMuZm9udENhY2hlLmhhcyh0LmNhY2hlS2V5KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHQuY2FjaGVLZXkpO2NvbnN0IGw9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7bGV0IGg7dHJ5e2g9dGhpcy5wcmVFdmFsdWF0ZUZvbnQodCk7aC5jc3NGb250SW5mbz1vfWNhdGNoKGUpeygwLHIud2FybikoYGxvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogIiR7ZX0iLmApO3JldHVybiBlcnJvckZvbnQoKX1jb25zdHtkZXNjcmlwdG9yOnUsaGFzaDpkfT1oLGY9YyBpbnN0YW5jZW9mIG4uUmVmO2xldCBnO2lmKGQmJnUgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IGU9dS5mb250QWxpYXNlc3x8PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZVtkXSl7Y29uc3QgdD1lW2RdLmFsaWFzUmVmO2lmKGYmJnQmJnRoaXMuZm9udENhY2hlLmhhcyh0KSl7dGhpcy5mb250Q2FjaGUucHV0QWxpYXMoYyx0KTtyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGMpfX1lbHNlIGVbZF09e2ZvbnRJRDp0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKX07ZiYmKGVbZF0uYWxpYXNSZWY9Yyk7Zz1lW2RdLmZvbnRJRH1lbHNlIGc9dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCk7KDAsci5hc3NlcnQpKGc/LnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKTtpZihmKXRoaXMuZm9udENhY2hlLnB1dChjLGwucHJvbWlzZSk7ZWxzZXt0LmNhY2hlS2V5PWBjYWNoZUtleV8ke2d9YDt0aGlzLmZvbnRDYWNoZS5wdXQodC5jYWNoZUtleSxsLnByb21pc2UpfXQubG9hZGVkTmFtZT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke2d9YDt0aGlzLnRyYW5zbGF0ZUZvbnQoaCkudGhlbigoZT0+e2wucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6dC5sb2FkZWROYW1lLGZvbnQ6ZSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSkuY2F0Y2goKGU9PnsoMCxyLndhcm4pKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7bC5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDpuZXcgcy5FcnJvckZvbnQoZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTplKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSk7cmV0dXJuIGwucHJvbWlzZX1idWlsZFBhdGgoZSx0LGEsaT0hMSl7Y29uc3Qgbj1lLmxlbmd0aC0xO2F8fChhPVtdKTtpZihuPDB8fGUuZm5BcnJheVtuXSE9PXIuT1BTLmNvbnN0cnVjdFBhdGgpe2lmKGkpeygwLHIud2FybikoYEVuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIiR7dH0iIGluc2lkZSBvZiBhIHRleHQgb2JqZWN0LmApO2UuYWRkT3Aoci5PUFMuc2F2ZSxudWxsKX1sZXQgbjtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107bj1bTWF0aC5taW4oYVswXSxlKSxNYXRoLm1heChhWzBdLGUpLE1hdGgubWluKGFbMV0sdCksTWF0aC5tYXgoYVsxXSx0KV07YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86bj1bYVswXSxhWzBdLGFbMV0sYVsxXV07YnJlYWs7ZGVmYXVsdDpuPVsxLzAsLTEvMCwxLzAsLTEvMF19ZS5hZGRPcChyLk9QUy5jb25zdHJ1Y3RQYXRoLFtbdF0sYSxuXSk7aSYmZS5hZGRPcChyLk9QUy5yZXN0b3JlLG51bGwpfWVsc2V7Y29uc3QgaT1lLmFyZ3NBcnJheVtuXTtpWzBdLnB1c2godCk7aVsxXS5wdXNoKC4uLmEpO2NvbnN0IHM9aVsyXTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107c1swXT1NYXRoLm1pbihzWzBdLGFbMF0sZSk7c1sxXT1NYXRoLm1heChzWzFdLGFbMF0sZSk7c1syXT1NYXRoLm1pbihzWzJdLGFbMV0sdCk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0sdCk7YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86c1swXT1NYXRoLm1pbihzWzBdLGFbMF0pO3NbMV09TWF0aC5tYXgoc1sxXSxhWzBdKTtzWzJdPU1hdGgubWluKHNbMl0sYVsxXSk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0pfX19cGFyc2VDb2xvclNwYWNlKHtjczplLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmF9KXtyZXR1cm4geS5Db2xvclNwYWNlLnBhcnNlQXN5bmMoe2NzOmUseHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOnQscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTphfSkuY2F0Y2goKGU9PntpZihlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXsoMCxyLndhcm4pKGBwYXJzZUNvbG9yU3BhY2UgLSBpZ25vcmluZyBDb2xvclNwYWNlOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9dGhyb3cgZX0pKX1wYXJzZVNoYWRpbmcoe3NoYWRpbmc6ZSxyZXNvdXJjZXM6dCxsb2NhbENvbG9yU3BhY2VDYWNoZTphLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpyfSl7bGV0IGk9ci5nZXQoZSk7aWYoIWkpe2NvbnN0IG49bC5QYXR0ZXJuLnBhcnNlU2hhZGluZyhlLHRoaXMueHJlZix0LHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxhKS5nZXRJUigpO2k9YHBhdHRlcm5fJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7dGhpcy5wYXJzaW5nVHlwZTNGb250JiYoaT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke2l9YCk7ci5zZXQoZSxpKTt0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW2ksIlBhdHRlcm4iLG5dKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbaSx0aGlzLnBhZ2VJbmRleCwiUGF0dGVybiIsbl0pfXJldHVybiBpfWhhbmRsZUNvbG9yTihlLHQsYSxpLHMsbyxjLGgsdSxkKXtjb25zdCBmPWEucG9wKCk7aWYoZiBpbnN0YW5jZW9mIG4uTmFtZSl7Y29uc3QgZz1zLmdldFJhdyhmLm5hbWUpLHA9ZyBpbnN0YW5jZW9mIG4uUmVmJiZ1LmdldEJ5UmVmKGcpO2lmKHApdHJ5e2NvbnN0IHI9aS5iYXNlP2kuYmFzZS5nZXRSZ2IoYSwwKTpudWxsLG49KDAsbC5nZXRUaWxpbmdQYXR0ZXJuSVIpKHAub3BlcmF0b3JMaXN0SVIscC5kaWN0LHIpO2UuYWRkT3AodCxuKTtyZXR1cm59Y2F0Y2goZSl7fWNvbnN0IGI9dGhpcy54cmVmLmZldGNoSWZSZWYoZyk7aWYoYil7Y29uc3Qgbj1iIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2IuZGljdDpiLHM9bi5nZXQoIlBhdHRlcm5UeXBlIik7aWYocz09PU4pe2NvbnN0IHI9aS5iYXNlP2kuYmFzZS5nZXRSZ2IoYSwwKTpudWxsO3JldHVybiB0aGlzLmhhbmRsZVRpbGluZ1R5cGUodCxyLG8sYixuLGUsYyx1KX1pZihzPT09Uil7Y29uc3QgYT1uLmdldCgiU2hhZGluZyIpLHI9bi5nZXRBcnJheSgiTWF0cml4IiksaT10aGlzLnBhcnNlU2hhZGluZyh7c2hhZGluZzphLHJlc291cmNlczpvLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmgsbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlOmR9KTtlLmFkZE9wKHQsWyJTaGFkaW5nIixpLHJdKTtyZXR1cm59dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVyblR5cGU6ICR7c31gKX19dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVybk5hbWU6ICR7Zn1gKX1fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLHQsYSl7aWYoKyt0PjEwKXsoMCxyLndhcm4pKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtyZXR1cm59Y29uc3QgaT1lLmxlbmd0aCxzPXRoaXMueHJlZi5mZXRjaElmUmVmKGVbMF0pO2lmKCEoaTwyKSYmcyBpbnN0YW5jZW9mIG4uTmFtZSl7c3dpdGNoKHMubmFtZSl7Y2FzZSJBbmQiOmNhc2UiT3IiOmNhc2UiTm90IjphLnB1c2gocy5uYW1lKTticmVhaztkZWZhdWx0OigwLHIud2FybikoYEludmFsaWQgb3BlcmF0b3IgJHtzLm5hbWV9IGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbmApO3JldHVybn1mb3IobGV0IHI9MTtyPGk7cisrKXtjb25zdCBpPWVbcl0scz10aGlzLnhyZWYuZmV0Y2hJZlJlZihpKTtpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBlPVtdO2EucHVzaChlKTt0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKHMsdCxlKX1lbHNlIGkgaW5zdGFuY2VvZiBuLlJlZiYmYS5wdXNoKGkudG9TdHJpbmcoKSl9fWVsc2UoMCxyLndhcm4pKCJJbnZhbGlkIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpfWFzeW5jIHBhcnNlTWFya2VkQ29udGVudFByb3BzKGUsdCl7bGV0IGE7aWYoZSBpbnN0YW5jZW9mIG4uTmFtZSl7YT10LmdldCgiUHJvcGVydGllcyIpLmdldChlLm5hbWUpfWVsc2V7aWYoIShlIGluc3RhbmNlb2Ygbi5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTthPWV9Y29uc3QgaT1hLmdldCgiVHlwZSIpLm5hbWU7aWYoIk9DRyI9PT1pKXJldHVybnt0eXBlOmksaWQ6YS5vYmpJZH07aWYoIk9DTUQiPT09aSl7Y29uc3QgZT1hLmdldCgiVkUiKTtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PVtdO3RoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oZSwwLHQpO2lmKHQubGVuZ3RoPjApcmV0dXJue3R5cGU6Ik9DTUQiLGV4cHJlc3Npb246dH19Y29uc3QgdD1hLmdldCgiT0NHcyIpO2lmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IGU9W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoY29uc3QgYSBvZiB0KWUucHVzaChhLnRvU3RyaW5nKCkpO2Vsc2UgZS5wdXNoKHQub2JqSWQpO3JldHVybnt0eXBlOmksaWRzOmUscG9saWN5OmEuZ2V0KCJQIilpbnN0YW5jZW9mIG4uTmFtZT9hLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9fWlmKHQgaW5zdGFuY2VvZiBuLlJlZilyZXR1cm57dHlwZTppLGlkOnQudG9TdHJpbmcoKX19cmV0dXJuIG51bGx9Z2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06ZSx0YXNrOnQscmVzb3VyY2VzOmEsb3BlcmF0b3JMaXN0OmksaW5pdGlhbFN0YXRlOnM9bnVsbCxmYWxsYmFja0ZvbnREaWN0Om89bnVsbH0pe2F8fD1uLkRpY3QuZW1wdHk7c3x8PW5ldyBFdmFsU3RhdGU7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCdnZXRPcGVyYXRvckxpc3Q6IG1pc3NpbmcgIm9wZXJhdG9yTGlzdCIgcGFyYW1ldGVyJyk7Y29uc3QgYz10aGlzLGw9dGhpcy54cmVmO2xldCBoPSExO2NvbnN0IHU9bmV3IGcuTG9jYWxJbWFnZUNhY2hlLGQ9bmV3IGcuTG9jYWxDb2xvclNwYWNlQ2FjaGUsZj1uZXcgZy5Mb2NhbEdTdGF0ZUNhY2hlLHA9bmV3IGcuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsYj1uZXcgTWFwLHc9YS5nZXQoIlhPYmplY3QiKXx8bi5EaWN0LmVtcHR5LFM9YS5nZXQoIlBhdHRlcm4iKXx8bi5EaWN0LmVtcHR5LHg9bmV3IFN0YXRlTWFuYWdlcihzKSxDPW5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3IoZSxsLHgpLGs9bmV3IFRpbWVTbG90TWFuYWdlcjtmdW5jdGlvbiBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKGUpe2ZvcihsZXQgZT0wLHQ9Qy5zYXZlZFN0YXRlc0RlcHRoO2U8dDtlKyspaS5hZGRPcChyLk9QUy5yZXN0b3JlLFtdKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uIHByb21pc2VCb2R5KGUscyl7Y29uc3QgbmV4dD1mdW5jdGlvbih0KXtQcm9taXNlLmFsbChbdCxpLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7cHJvbWlzZUJvZHkoZSxzKX1jYXRjaChlKXtzKGUpfX0pLHMpfTt0LmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtrLnJlc2V0KCk7Y29uc3QgZz17fTtsZXQgdixGLE8sVCxNLEU7Zm9yKDshKHY9ay5jaGVjaygpKTspe2cuYXJncz1udWxsO2lmKCFDLnJlYWQoZykpYnJlYWs7bGV0IGU9Zy5hcmdzLHM9Zy5mbjtzd2l0Y2goMHxzKXtjYXNlIHIuT1BTLnBhaW50WE9iamVjdDpFPWVbMF1pbnN0YW5jZW9mIG4uTmFtZTtNPWVbMF0ubmFtZTtpZihFKXtjb25zdCB0PXUuZ2V0QnlOYW1lKE0pO2lmKHQpe2kuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxzKXtpZighRSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7bGV0IG89dy5nZXRSYXcoTSk7aWYobyBpbnN0YW5jZW9mIG4uUmVmKXtjb25zdCB0PXUuZ2V0QnlSZWYobyl8fGMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5nZXRCeVJlZihvKTtpZih0KXtpLmFkZEltYWdlT3BzKHQuZm4sdC5hcmdzLHQub3B0aW9uYWxDb250ZW50KTtpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudCh0KTtlKCk7cmV0dXJufWNvbnN0IGE9Yy5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEobyxjLnBhZ2VJbmRleCk7aWYoYSl7aS5hZGREZXBlbmRlbmN5KGEub2JqSWQpO2kuYWRkSW1hZ2VPcHMoYS5mbixhLmFyZ3MsYS5vcHRpb25hbENvbnRlbnQpO2UoKTtyZXR1cm59bz1sLmZldGNoKG8pfWlmKCEobyBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7Y29uc3QgaD1vLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoIShoIGluc3RhbmNlb2Ygbi5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIiE9PWgubmFtZSlpZigiSW1hZ2UiIT09aC5uYW1lKXtpZigiUFMiIT09aC5uYW1lKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICR7aC5uYW1lfWApOygwLHIuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIik7ZSgpfWVsc2UgYy5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6YSxpbWFnZTpvLG9wZXJhdG9yTGlzdDppLGNhY2hlS2V5Ok0sbG9jYWxJbWFnZUNhY2hlOnUsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oZSxzKTtlbHNle3guc2F2ZSgpO2MuYnVpbGRGb3JtWE9iamVjdChhLG8sbnVsbCxpLHQseC5zdGF0ZS5jbG9uZSgpLGQpLnRoZW4oKGZ1bmN0aW9uKCl7eC5yZXN0b3JlKCk7ZSgpfSkscyl9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIWMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRGb250OnZhciBEPWVbMV07bmV4dChjLmhhbmRsZVNldEZvbnQoYSxlLG51bGwsaSx0LHguc3RhdGUsbykudGhlbigoZnVuY3Rpb24oZSl7aS5hZGREZXBlbmRlbmN5KGUpO2kuYWRkT3Aoci5PUFMuc2V0Rm9udCxbZSxEXSl9KSkpO3JldHVybjtjYXNlIHIuT1BTLmJlZ2luVGV4dDpoPSEwO2JyZWFrO2Nhc2Ugci5PUFMuZW5kVGV4dDpoPSExO2JyZWFrO2Nhc2Ugci5PUFMuZW5kSW5saW5lSW1hZ2U6dmFyIE49ZVswXS5jYWNoZUtleTtpZihOKXtjb25zdCB0PXUuZ2V0QnlOYW1lKE4pO2lmKHQpe2kuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChjLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczphLGltYWdlOmVbMF0saXNJbmxpbmU6ITAsb3BlcmF0b3JMaXN0OmksY2FjaGVLZXk6Tixsb2NhbEltYWdlQ2FjaGU6dSxsb2NhbENvbG9yU3BhY2VDYWNoZTpkfSkpO3JldHVybjtjYXNlIHIuT1BTLnNob3dUZXh0OmlmKCF4LnN0YXRlLmZvbnQpe2MuZW5zdXJlU3RhdGVGb250KHguc3RhdGUpO2NvbnRpbnVlfWVbMF09Yy5oYW5kbGVUZXh0KGVbMF0seC5zdGF0ZSk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZigheC5zdGF0ZS5mb250KXtjLmVuc3VyZVN0YXRlRm9udCh4LnN0YXRlKTtjb250aW51ZX12YXIgUj1bXSxfPXguc3RhdGU7Zm9yKGNvbnN0IHQgb2YgZVswXSkic3RyaW5nIj09dHlwZW9mIHQ/Ui5wdXNoKC4uLmMuaGFuZGxlVGV4dCh0LF8pKToibnVtYmVyIj09dHlwZW9mIHQmJlIucHVzaCh0KTtlWzBdPVI7cz1yLk9QUy5zaG93VGV4dDticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIXguc3RhdGUuZm9udCl7Yy5lbnN1cmVTdGF0ZUZvbnQoeC5zdGF0ZSk7Y29udGludWV9aS5hZGRPcChyLk9QUy5uZXh0TGluZSk7ZVswXT1jLmhhbmRsZVRleHQoZVswXSx4LnN0YXRlKTtzPXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6aWYoIXguc3RhdGUuZm9udCl7Yy5lbnN1cmVTdGF0ZUZvbnQoeC5zdGF0ZSk7Y29udGludWV9aS5hZGRPcChyLk9QUy5uZXh0TGluZSk7aS5hZGRPcChyLk9QUy5zZXRXb3JkU3BhY2luZyxbZS5zaGlmdCgpXSk7aS5hZGRPcChyLk9QUy5zZXRDaGFyU3BhY2luZyxbZS5zaGlmdCgpXSk7ZVswXT1jLmhhbmRsZVRleHQoZVswXSx4LnN0YXRlKTtzPXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6eC5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1lWzBdO2JyZWFrO2Nhc2Ugci5PUFMuc2V0RmlsbENvbG9yU3BhY2U6e2NvbnN0IHQ9eS5Db2xvclNwYWNlLmdldENhY2hlZChlWzBdLGwsZCk7aWYodCl7eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQoYy5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJih4LnN0YXRlLmZpbGxDb2xvclNwYWNlPWUpfSkpKTtyZXR1cm59Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOntjb25zdCB0PXkuQ29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxsLGQpO2lmKHQpe3guc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQoYy5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJih4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9ZSl9KSkpO3JldHVybn1jYXNlIHIuT1BTLnNldEZpbGxDb2xvcjpUPXguc3RhdGUuZmlsbENvbG9yU3BhY2U7ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3I6VD14LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsR3JheTp4LnN0YXRlLmZpbGxDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7ZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihlLDApO3M9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlR3JheTp4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxDTVlLQ29sb3I6eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoZSwwKTtzPXIuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjp4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxSR0JDb2xvcjp4LnN0YXRlLmZpbGxDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZSwwKTticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZVJHQkNvbG9yOnguc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7ZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOlQ9eC5zdGF0ZS5maWxsQ29sb3JTcGFjZTtpZigiUGF0dGVybiI9PT1ULm5hbWUpe25leHQoYy5oYW5kbGVDb2xvck4oaSxyLk9QUy5zZXRGaWxsQ29sb3JOLGUsVCxTLGEsdCxkLHAsYikpO3JldHVybn1lPVQuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvck46VD14LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7aWYoIlBhdHRlcm4iPT09VC5uYW1lKXtuZXh0KGMuaGFuZGxlQ29sb3JOKGksci5PUFMuc2V0U3Ryb2tlQ29sb3JOLGUsVCxTLGEsdCxkLHAsYikpO3JldHVybn1lPVQuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNoYWRpbmdGaWxsOnZhciAkPWEuZ2V0KCJTaGFkaW5nIik7aWYoISQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgcmVzb3VyY2UgZm91bmQiKTt2YXIgaj0kLmdldChlWzBdLm5hbWUpO2lmKCFqKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZCIpO2U9W2MucGFyc2VTaGFkaW5nKHtzaGFkaW5nOmoscmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZCxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6Yn0pXTtzPXIuT1BTLnNoYWRpbmdGaWxsO2JyZWFrO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOkU9ZVswXWluc3RhbmNlb2Ygbi5OYW1lO009ZVswXS5uYW1lO2lmKEUpe2NvbnN0IHQ9Zi5nZXRCeU5hbWUoTSk7aWYodCl7dC5sZW5ndGg+MCYmaS5hZGRPcChyLk9QUy5zZXRHU3RhdGUsW3RdKTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscyl7aWYoIUUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbz1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShvIGluc3RhbmNlb2Ygbi5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3QgbD1vLmdldChNKTtpZighKGwgaW5zdGFuY2VvZiBuLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjLnNldEdTdGF0ZSh7cmVzb3VyY2VzOmEsZ1N0YXRlOmwsb3BlcmF0b3JMaXN0OmksY2FjaGVLZXk6TSx0YXNrOnQsc3RhdGVNYW5hZ2VyOngsbG9jYWxHU3RhdGVDYWNoZTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmR9KS50aGVuKGUscyl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighYy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMubW92ZVRvOmNhc2Ugci5PUFMubGluZVRvOmNhc2Ugci5PUFMuY3VydmVUbzpjYXNlIHIuT1BTLmN1cnZlVG8yOmNhc2Ugci5PUFMuY3VydmVUbzM6Y2FzZSByLk9QUy5jbG9zZVBhdGg6Y2FzZSByLk9QUy5yZWN0YW5nbGU6Yy5idWlsZFBhdGgoaSxzLGUsaCk7Y29udGludWU7Y2FzZSByLk9QUy5tYXJrUG9pbnQ6Y2FzZSByLk9QUy5tYXJrUG9pbnRQcm9wczpjYXNlIHIuT1BTLmJlZ2luQ29tcGF0OmNhc2Ugci5PUFMuZW5kQ29tcGF0OmNvbnRpbnVlO2Nhc2Ugci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6aWYoIShlWzBdaW5zdGFuY2VvZiBuLk5hbWUpKXsoMCxyLndhcm4pKGBFeHBlY3RlZCBuYW1lIGZvciBiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyBhcmcwPSR7ZVswXX1gKTtjb250aW51ZX1pZigiT0MiPT09ZVswXS5uYW1lKXtuZXh0KGMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZVsxXSxhKS50aGVuKChlPT57aS5hZGRPcChyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIWMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogIiR7ZX0iLmApfX0pKSk7cmV0dXJufWU9W2VbMF0ubmFtZSxlWzFdaW5zdGFuY2VvZiBuLkRpY3Q/ZVsxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudDpjYXNlIHIuT1BTLmVuZE1hcmtlZENvbnRlbnQ6ZGVmYXVsdDppZihudWxsIT09ZSl7Zm9yKEY9MCxPPWUubGVuZ3RoO0Y8TyYmIShlW0ZdaW5zdGFuY2VvZiBuLkRpY3QpO0YrKyk7aWYoRjxPKXsoMCxyLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIitzKTtjb250aW51ZX19fWkuYWRkT3AocyxlKX1pZih2KW5leHQoTCk7ZWxzZXtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7ZSgpfX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApO2Nsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKX19KSl9Z2V0VGV4dENvbnRlbnQoe3N0cmVhbTplLHRhc2s6dCxyZXNvdXJjZXM6YSxzdGF0ZU1hbmFnZXI6aT1udWxsLGluY2x1ZGVNYXJrZWRDb250ZW50OnM9ITEsc2luazpvLHNlZW5TdHlsZXM6Yz1uZXcgU2V0LHZpZXdCb3g6bCxtYXJrZWRDb250ZW50RGF0YTpoPW51bGwsZGlzYWJsZU5vcm1hbGl6YXRpb246dT0hMX0pe2F8fD1uLkRpY3QuZW1wdHk7aXx8PW5ldyBTdGF0ZU1hbmFnZXIobmV3IFRleHRTdGF0ZSk7cyYmKGh8fD17bGV2ZWw6MH0pO2NvbnN0IGQ9e2l0ZW1zOltdLHN0eWxlczpPYmplY3QuY3JlYXRlKG51bGwpfSxmPXtpbml0aWFsaXplZDohMSxzdHI6W10sdG90YWxXaWR0aDowLHRvdGFsSGVpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MCx2ZXJ0aWNhbDohMSxwcmV2VHJhbnNmb3JtOm51bGwsdGV4dEFkdmFuY2VTY2FsZTowLHNwYWNlSW5GbG93TWluOjAsc3BhY2VJbkZsb3dNYXg6MCx0cmFja2luZ1NwYWNlTWluOjEvMCxuZWdhdGl2ZVNwYWNlTWF4Oi0xLzAsbm90QVNwYWNlOi0xLzAsdHJhbnNmb3JtOm51bGwsZm9udE5hbWU6bnVsbCxoYXNFT0w6ITF9LHA9WyIgIiwiICJdO2xldCB5PTA7ZnVuY3Rpb24gc2F2ZUxhc3RDaGFyKGUpe2NvbnN0IHQ9KHkrMSklMixhPSIgIiE9PXBbeV0mJiIgIj09PXBbdF07cFt5XT1lO3k9dDtyZXR1cm4gYX1mdW5jdGlvbiBzaG91bGRBZGRXaGl0ZXBzYWNlKCl7cmV0dXJuIiAiIT09cFt5XSYmIiAiPT09cFsoeSsxKSUyXX1mdW5jdGlvbiByZXNldExhc3RDaGFycygpe3BbMF09cFsxXT0iICI7eT0wfWNvbnN0IHc9dGhpcyxTPXRoaXMueHJlZix4PVtdO2xldCBDPW51bGw7Y29uc3Qgaz1uZXcgZy5Mb2NhbEltYWdlQ2FjaGUsdj1uZXcgZy5Mb2NhbEdTdGF0ZUNhY2hlLEY9bmV3IEV2YWx1YXRvclByZXByb2Nlc3NvcihlLFMsaSk7bGV0IE87ZnVuY3Rpb24gcHVzaFdoaXRlc3BhY2Uoe3dpZHRoOmU9MCxoZWlnaHQ6dD0wLHRyYW5zZm9ybTphPWYucHJldlRyYW5zZm9ybSxmb250TmFtZTpyPWYuZm9udE5hbWV9KXtkLml0ZW1zLnB1c2goe3N0cjoiICIsZGlyOiJsdHIiLHdpZHRoOmUsaGVpZ2h0OnQsdHJhbnNmb3JtOmEsZm9udE5hbWU6cixoYXNFT0w6ITF9KX1mdW5jdGlvbiBnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpe2NvbnN0IGU9Ty5mb250LHQ9W08uZm9udFNpemUqTy50ZXh0SFNjYWxlLDAsMCxPLmZvbnRTaXplLDAsTy50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKE8uZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxyLmlzQXJyYXlFcXVhbCkoTy5mb250TWF0cml4LHIuRk9OVF9JREVOVElUWV9NQVRSSVgpKXtjb25zdCBhPWUuYmJveFszXS1lLmJib3hbMV07YT4wJiYodFszXSo9YSpPLmZvbnRNYXRyaXhbM10pfXJldHVybiByLlV0aWwudHJhbnNmb3JtKE8uY3RtLHIuVXRpbC50cmFuc2Zvcm0oTy50ZXh0TWF0cml4LHQpKX1mdW5jdGlvbiBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKXtpZihmLmluaXRpYWxpemVkKXJldHVybiBmO2NvbnN0e2ZvbnQ6ZSxsb2FkZWROYW1lOnR9PU87aWYoIWMuaGFzKHQpKXtjLmFkZCh0KTtkLnN0eWxlc1t0XT17Zm9udEZhbWlseTplLmZhbGxiYWNrTmFtZSxhc2NlbnQ6ZS5hc2NlbnQsZGVzY2VudDplLmRlc2NlbnQsdmVydGljYWw6ZS52ZXJ0aWNhbH19Zi5mb250TmFtZT10O2NvbnN0IGE9Zi50cmFuc2Zvcm09Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtpZihlLnZlcnRpY2FsKXtmLndpZHRoPWYudG90YWxXaWR0aD1NYXRoLmh5cG90KGFbMF0sYVsxXSk7Zi5oZWlnaHQ9Zi50b3RhbEhlaWdodD0wO2YudmVydGljYWw9ITB9ZWxzZXtmLndpZHRoPWYudG90YWxXaWR0aD0wO2YuaGVpZ2h0PWYudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChhWzJdLGFbM10pO2YudmVydGljYWw9ITF9Y29uc3Qgcj1NYXRoLmh5cG90KE8udGV4dExpbmVNYXRyaXhbMF0sTy50ZXh0TGluZU1hdHJpeFsxXSksaT1NYXRoLmh5cG90KE8uY3RtWzBdLE8uY3RtWzFdKTtmLnRleHRBZHZhbmNlU2NhbGU9aSpyO2NvbnN0e2ZvbnRTaXplOm59PU87Zi50cmFja2luZ1NwYWNlTWluPS4xMDIqbjtmLm5vdEFTcGFjZT0uMDMqbjtmLm5lZ2F0aXZlU3BhY2VNYXg9LS4yKm47Zi5zcGFjZUluRmxvd01pbj0uMTAyKm47Zi5zcGFjZUluRmxvd01heD0uNipuO2YuaGFzRU9MPSExO2YuaW5pdGlhbGl6ZWQ9ITA7cmV0dXJuIGZ9ZnVuY3Rpb24gdXBkYXRlQWR2YW5jZVNjYWxlKCl7aWYoIWYuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IGU9TWF0aC5oeXBvdChPLnRleHRMaW5lTWF0cml4WzBdLE8udGV4dExpbmVNYXRyaXhbMV0pLHQ9TWF0aC5oeXBvdChPLmN0bVswXSxPLmN0bVsxXSkqZTtpZih0IT09Zi50ZXh0QWR2YW5jZVNjYWxlKXtpZihmLnZlcnRpY2FsKXtmLnRvdGFsSGVpZ2h0Kz1mLmhlaWdodCpmLnRleHRBZHZhbmNlU2NhbGU7Zi5oZWlnaHQ9MH1lbHNle2YudG90YWxXaWR0aCs9Zi53aWR0aCpmLnRleHRBZHZhbmNlU2NhbGU7Zi53aWR0aD0wfWYudGV4dEFkdmFuY2VTY2FsZT10fX1mdW5jdGlvbiBoYW5kbGVTZXRGb250KGUsaSl7cmV0dXJuIHcubG9hZEZvbnQoZSxpLGEpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZvbnQuaXNUeXBlM0ZvbnQ/ZS5sb2FkVHlwZTNEYXRhKHcsYSx0KS5jYXRjaCgoZnVuY3Rpb24oKXt9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKTplfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe08ubG9hZGVkTmFtZT1lLmxvYWRlZE5hbWU7Ty5mb250PWUuZm9udDtPLmZvbnRNYXRyaXg9ZS5mb250LmZvbnRNYXRyaXh8fHIuRk9OVF9JREVOVElUWV9NQVRSSVh9KSl9ZnVuY3Rpb24gYXBwbHlJbnZlcnNlUm90YXRpb24oZSx0LGEpe2NvbnN0IHI9TWF0aC5oeXBvdChhWzBdLGFbMV0pO3JldHVyblsoYVswXSplK2FbMV0qdCkvciwoYVsyXSplK2FbM10qdCkvcl19ZnVuY3Rpb24gY29tcGFyZVdpdGhMYXN0UG9zaXRpb24oZSl7Y29uc3QgdD1nZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpO2xldCBhPXRbNF0scj10WzVdO2lmKE8uZm9udD8udmVydGljYWwpe2lmKGE8bFswXXx8YT5sWzJdfHxyK2U8bFsxXXx8cj5sWzNdKXJldHVybiExfWVsc2UgaWYoYStlPGxbMF18fGE+bFsyXXx8cjxsWzFdfHxyPmxbM10pcmV0dXJuITE7aWYoIU8uZm9udHx8IWYucHJldlRyYW5zZm9ybSlyZXR1cm4hMDtsZXQgaT1mLnByZXZUcmFuc2Zvcm1bNF0sbj1mLnByZXZUcmFuc2Zvcm1bNV07aWYoaT09PWEmJm49PT1yKXJldHVybiEwO2xldCBzPS0xO3RbMF0mJjA9PT10WzFdJiYwPT09dFsyXT9zPXRbMF0+MD8wOjE4MDp0WzFdJiYwPT09dFswXSYmMD09PXRbM10mJihzPXRbMV0+MD85MDoyNzApO3N3aXRjaChzKXtjYXNlIDA6YnJlYWs7Y2FzZSA5MDpbYSxyXT1bcixhXTtbaSxuXT1bbixpXTticmVhaztjYXNlIDE4MDpbYSxyLGksbl09Wy1hLC1yLC1pLC1uXTticmVhaztjYXNlIDI3MDpbYSxyXT1bLXIsLWFdO1tpLG5dPVstbiwtaV07YnJlYWs7ZGVmYXVsdDpbYSxyXT1hcHBseUludmVyc2VSb3RhdGlvbihhLHIsdCk7W2ksbl09YXBwbHlJbnZlcnNlUm90YXRpb24oaSxuLGYucHJldlRyYW5zZm9ybSl9aWYoTy5mb250LnZlcnRpY2FsKXtjb25zdCBlPShuLXIpL2YudGV4dEFkdmFuY2VTY2FsZSx0PWEtaSxzPU1hdGguc2lnbihmLmhlaWdodCk7aWYoZTxzKmYubmVnYXRpdmVTcGFjZU1heCl7aWYoTWF0aC5hYnModCk+LjUqZi53aWR0aCl7YXBwZW5kRU9MKCk7cmV0dXJuITB9cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWlmKE1hdGguYWJzKHQpPmYud2lkdGgpe2FwcGVuZEVPTCgpO3JldHVybiEwfWU8PXMqZi5ub3RBU3BhY2UmJnJlc2V0TGFzdENoYXJzKCk7aWYoZTw9cypmLnRyYWNraW5nU3BhY2VNaW4paWYoc2hvdWxkQWRkV2hpdGVwc2FjZSgpKXtyZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cHVzaFdoaXRlc3BhY2Uoe2hlaWdodDpNYXRoLmFicyhlKX0pfWVsc2UgZi5oZWlnaHQrPWU7ZWxzZSBpZighYWRkRmFrZVNwYWNlcyhlLGYucHJldlRyYW5zZm9ybSxzKSlpZigwPT09Zi5zdHIubGVuZ3RoKXtyZXNldExhc3RDaGFycygpO3B1c2hXaGl0ZXNwYWNlKHtoZWlnaHQ6TWF0aC5hYnMoZSl9KX1lbHNlIGYuaGVpZ2h0Kz1lO01hdGguYWJzKHQpPi4yNSpmLndpZHRoJiZmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWNvbnN0IG89KGEtaSkvZi50ZXh0QWR2YW5jZVNjYWxlLGM9ci1uLGg9TWF0aC5zaWduKGYud2lkdGgpO2lmKG88aCpmLm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKGMpPi41KmYuaGVpZ2h0KXthcHBlbmRFT0woKTtyZXR1cm4hMH1yZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmV0dXJuITB9aWYoTWF0aC5hYnMoYyk+Zi5oZWlnaHQpe2FwcGVuZEVPTCgpO3JldHVybiEwfW88PWgqZi5ub3RBU3BhY2UmJnJlc2V0TGFzdENoYXJzKCk7aWYobzw9aCpmLnRyYWNraW5nU3BhY2VNaW4paWYoc2hvdWxkQWRkV2hpdGVwc2FjZSgpKXtyZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cHVzaFdoaXRlc3BhY2Uoe3dpZHRoOk1hdGguYWJzKG8pfSl9ZWxzZSBmLndpZHRoKz1vO2Vsc2UgaWYoIWFkZEZha2VTcGFjZXMobyxmLnByZXZUcmFuc2Zvcm0saCkpaWYoMD09PWYuc3RyLmxlbmd0aCl7cmVzZXRMYXN0Q2hhcnMoKTtwdXNoV2hpdGVzcGFjZSh7d2lkdGg6TWF0aC5hYnMobyl9KX1lbHNlIGYud2lkdGgrPW87TWF0aC5hYnMoYyk+LjI1KmYuaGVpZ2h0JiZmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWZ1bmN0aW9uIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzp0fSl7Y29uc3QgYT1PLmZvbnQ7aWYoIWUpe2NvbnN0IGU9Ty5jaGFyU3BhY2luZyt0O2UmJihhLnZlcnRpY2FsP08udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1lKTpPLnRyYW5zbGF0ZVRleHRNYXRyaXgoZSpPLnRleHRIU2NhbGUsMCkpO3JldHVybn1jb25zdCByPWEuY2hhcnNUb0dseXBocyhlKSxpPU8uZm9udE1hdHJpeFswXSpPLmZvbnRTaXplO2ZvcihsZXQgZT0wLG49ci5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgcz1yW2VdLHtjYXRlZ29yeTpvfT1zO2lmKG8uaXNJbnZpc2libGVGb3JtYXRNYXJrKWNvbnRpbnVlO2xldCBjPU8uY2hhclNwYWNpbmcrKGUrMT09PW4/dDowKSxsPXMud2lkdGg7YS52ZXJ0aWNhbCYmKGw9cy52bWV0cmljP3Mudm1ldHJpY1swXTotbCk7bGV0IGg9bCppO2lmKG8uaXNXaGl0ZXNwYWNlKXtpZihhLnZlcnRpY2FsKXtjKz0taCtPLndvcmRTcGFjaW5nO08udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1jKX1lbHNle2MrPWgrTy53b3JkU3BhY2luZztPLnRyYW5zbGF0ZVRleHRNYXRyaXgoYypPLnRleHRIU2NhbGUsMCl9c2F2ZUxhc3RDaGFyKCIgIik7Y29udGludWV9aWYoIW8uaXNaZXJvV2lkdGhEaWFjcml0aWMmJiFjb21wYXJlV2l0aExhc3RQb3NpdGlvbihoKSl7YS52ZXJ0aWNhbD9PLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCxoKTpPLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCpPLnRleHRIU2NhbGUsMCk7Y29udGludWV9Y29uc3QgdT1lbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtvLmlzWmVyb1dpZHRoRGlhY3JpdGljJiYoaD0wKTtpZihhLnZlcnRpY2FsKXtPLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCxoKTtoPU1hdGguYWJzKGgpO3UuaGVpZ2h0Kz1ofWVsc2V7aCo9Ty50ZXh0SFNjYWxlO08udHJhbnNsYXRlVGV4dE1hdHJpeChoLDApO3Uud2lkdGgrPWh9aCYmKHUucHJldlRyYW5zZm9ybT1nZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpKTtjb25zdCBkPXMudW5pY29kZTtzYXZlTGFzdENoYXIoZCkmJnUuc3RyLnB1c2goIiAiKTt1LnN0ci5wdXNoKGQpO2MmJihhLnZlcnRpY2FsP08udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1jKTpPLnRyYW5zbGF0ZVRleHRNYXRyaXgoYypPLnRleHRIU2NhbGUsMCkpfX1mdW5jdGlvbiBhcHBlbmRFT0woKXtyZXNldExhc3RDaGFycygpO2lmKGYuaW5pdGlhbGl6ZWQpe2YuaGFzRU9MPSEwO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCl9ZWxzZSBkLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxmb250TmFtZTpPLmxvYWRlZE5hbWUsaGFzRU9MOiEwfSl9ZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyhlLHQsYSl7aWYoYSpmLnNwYWNlSW5GbG93TWluPD1lJiZlPD1hKmYuc3BhY2VJbkZsb3dNYXgpe2lmKGYuaW5pdGlhbGl6ZWQpe3Jlc2V0TGFzdENoYXJzKCk7Zi5zdHIucHVzaCgiICIpfXJldHVybiExfWNvbnN0IHI9Zi5mb250TmFtZTtsZXQgaT0wO2lmKGYudmVydGljYWwpe2k9ZTtlPTB9Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXNldExhc3RDaGFycygpO3B1c2hXaGl0ZXNwYWNlKHt3aWR0aDpNYXRoLmFicyhlKSxoZWlnaHQ6TWF0aC5hYnMoaSksdHJhbnNmb3JtOnR8fGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCksZm9udE5hbWU6cn0pO3JldHVybiEwfWZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCl7aWYoZi5pbml0aWFsaXplZCYmZi5zdHIpe2YudmVydGljYWw/Zi50b3RhbEhlaWdodCs9Zi5oZWlnaHQqZi50ZXh0QWR2YW5jZVNjYWxlOmYudG90YWxXaWR0aCs9Zi53aWR0aCpmLnRleHRBZHZhbmNlU2NhbGU7ZC5pdGVtcy5wdXNoKGZ1bmN0aW9uIHJ1bkJpZGlUcmFuc2Zvcm0oZSl7bGV0IHQ9ZS5zdHIuam9pbigiIik7dXx8KHQ9KDAsci5ub3JtYWxpemVVbmljb2RlKSh0KSk7Y29uc3QgYT0oMCxiLmJpZGkpKHQsLTEsZS52ZXJ0aWNhbCk7cmV0dXJue3N0cjphLnN0cixkaXI6YS5kaXIsd2lkdGg6TWF0aC5hYnMoZS50b3RhbFdpZHRoKSxoZWlnaHQ6TWF0aC5hYnMoZS50b3RhbEhlaWdodCksdHJhbnNmb3JtOmUudHJhbnNmb3JtLGZvbnROYW1lOmUuZm9udE5hbWUsaGFzRU9MOmUuaGFzRU9MfX0oZikpO2YuaW5pdGlhbGl6ZWQ9ITE7Zi5zdHIubGVuZ3RoPTB9fWZ1bmN0aW9uIGVucXVldWVDaHVuayhlPSExKXtjb25zdCB0PWQuaXRlbXMubGVuZ3RoO2lmKDAhPT10JiYhKGUmJnQ8MTApKXtvLmVucXVldWUoZCx0KTtkLml0ZW1zPVtdO2Quc3R5bGVzPU9iamVjdC5jcmVhdGUobnVsbCl9fWNvbnN0IFQ9bmV3IFRpbWVTbG90TWFuYWdlcjtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uIHByb21pc2VCb2R5KGUsZil7Y29uc3QgbmV4dD1mdW5jdGlvbih0KXtlbnF1ZXVlQ2h1bmsoITApO1Byb21pc2UuYWxsKFt0LG8ucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtwcm9taXNlQm9keShlLGYpfWNhdGNoKGUpe2YoZSl9fSksZil9O3QuZW5zdXJlTm90VGVybWluYXRlZCgpO1QucmVzZXQoKTtjb25zdCBnPXt9O2xldCBwLGI9W107Zm9yKDshKHA9VC5jaGVjaygpKTspe2IubGVuZ3RoPTA7Zy5hcmdzPWI7aWYoIUYucmVhZChnKSlicmVhaztjb25zdCBlPU87Tz1pLnN0YXRlO2NvbnN0IGY9Zy5mbjtiPWcuYXJncztzd2l0Y2goMHxmKXtjYXNlIHIuT1BTLnNldEZvbnQ6dmFyIHk9YlswXS5uYW1lLE09YlsxXTtpZihPLmZvbnQmJnk9PT1PLmZvbnROYW1lJiZNPT09Ty5mb250U2l6ZSlicmVhaztmbHVzaFRleHRDb250ZW50SXRlbSgpO08uZm9udE5hbWU9eTtPLmZvbnRTaXplPU07bmV4dChoYW5kbGVTZXRGb250KHksbnVsbCkpO3JldHVybjtjYXNlIHIuT1BTLnNldFRleHRSaXNlOk8udGV4dFJpc2U9YlswXTticmVhaztjYXNlIHIuT1BTLnNldEhTY2FsZTpPLnRleHRIU2NhbGU9YlswXS8xMDA7YnJlYWs7Y2FzZSByLk9QUy5zZXRMZWFkaW5nOk8ubGVhZGluZz1iWzBdO2JyZWFrO2Nhc2Ugci5PUFMubW92ZVRleHQ6Ty50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChiWzBdLGJbMV0pO08udGV4dE1hdHJpeD1PLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSByLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQ6Ty5sZWFkaW5nPS1iWzFdO08udHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYlswXSxiWzFdKTtPLnRleHRNYXRyaXg9Ty50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmU6Ty5jYXJyaWFnZVJldHVybigpO2JyZWFrO2Nhc2Ugci5PUFMuc2V0VGV4dE1hdHJpeDpPLnNldFRleHRNYXRyaXgoYlswXSxiWzFdLGJbMl0sYlszXSxiWzRdLGJbNV0pO08uc2V0VGV4dExpbmVNYXRyaXgoYlswXSxiWzFdLGJbMl0sYlszXSxiWzRdLGJbNV0pO3VwZGF0ZUFkdmFuY2VTY2FsZSgpO2JyZWFrO2Nhc2Ugci5PUFMuc2V0Q2hhclNwYWNpbmc6Ty5jaGFyU3BhY2luZz1iWzBdO2JyZWFrO2Nhc2Ugci5PUFMuc2V0V29yZFNwYWNpbmc6Ty53b3JkU3BhY2luZz1iWzBdO2JyZWFrO2Nhc2Ugci5PUFMuYmVnaW5UZXh0Ok8udGV4dE1hdHJpeD1yLklERU5USVRZX01BVFJJWC5zbGljZSgpO08udGV4dExpbmVNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIHIuT1BTLnNob3dTcGFjZWRUZXh0OmlmKCFpLnN0YXRlLmZvbnQpe3cuZW5zdXJlU3RhdGVGb250KGkuc3RhdGUpO2NvbnRpbnVlfWNvbnN0IGY9KE8uZm9udC52ZXJ0aWNhbD8xOi0xKSpPLmZvbnRTaXplLzFlMyxnPWJbMF07Zm9yKGxldCBlPTAsdD1nLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PWdbZV07aWYoInN0cmluZyI9PXR5cGVvZiB0KXgucHVzaCh0KTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdCYmMCE9PXQpe2NvbnN0IGU9eC5qb2luKCIiKTt4Lmxlbmd0aD0wO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzp0KmZ9KX19aWYoeC5sZW5ndGg+MCl7Y29uc3QgZT14LmpvaW4oIiIpO3gubGVuZ3RoPTA7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIHIuT1BTLnNob3dUZXh0OmlmKCFpLnN0YXRlLmZvbnQpe3cuZW5zdXJlU3RhdGVGb250KGkuc3RhdGUpO2NvbnRpbnVlfWJ1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczpiWzBdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSByLk9QUy5uZXh0TGluZVNob3dUZXh0OmlmKCFpLnN0YXRlLmZvbnQpe3cuZW5zdXJlU3RhdGVGb250KGkuc3RhdGUpO2NvbnRpbnVlfU8uY2FycmlhZ2VSZXR1cm4oKTtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6YlswXSxleHRyYVNwYWNpbmc6MH0pO2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6aWYoIWkuc3RhdGUuZm9udCl7dy5lbnN1cmVTdGF0ZUZvbnQoaS5zdGF0ZSk7Y29udGludWV9Ty53b3JkU3BhY2luZz1iWzBdO08uY2hhclNwYWNpbmc9YlsxXTtPLmNhcnJpYWdlUmV0dXJuKCk7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmJbMl0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHIuT1BTLnBhaW50WE9iamVjdDpmbHVzaFRleHRDb250ZW50SXRlbSgpO0N8fChDPWEuZ2V0KCJYT2JqZWN0Iil8fG4uRGljdC5lbXB0eSk7dmFyIEU9YlswXWluc3RhbmNlb2Ygbi5OYW1lLEQ9YlswXS5uYW1lO2lmKEUmJmsuZ2V0QnlOYW1lKEQpKWJyZWFrO25leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsZCl7aWYoIUUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCBmPUMuZ2V0UmF3KEQpO2lmKGYgaW5zdGFuY2VvZiBuLlJlZil7aWYoay5nZXRCeVJlZihmKSl7ZSgpO3JldHVybn1pZih3Lmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShmLHcucGFnZUluZGV4KSl7ZSgpO3JldHVybn1mPVMuZmV0Y2goZil9aWYoIShmIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTtjb25zdCBnPWYuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKGcgaW5zdGFuY2VvZiBuLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09Zy5uYW1lKXtrLnNldChELGYuZGljdC5vYmpJZCwhMCk7ZSgpO3JldHVybn1jb25zdCBwPWkuc3RhdGUuY2xvbmUoKSxiPW5ldyBTdGF0ZU1hbmFnZXIocCkseT1mLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpO0FycmF5LmlzQXJyYXkoeSkmJjY9PT15Lmxlbmd0aCYmYi50cmFuc2Zvcm0oeSk7ZW5xdWV1ZUNodW5rKCk7Y29uc3QgeD17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZShlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITA7by5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBvLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gby5yZWFkeX19O3cuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpmLHRhc2s6dCxyZXNvdXJjZXM6Zi5kaWN0LmdldCgiUmVzb3VyY2VzIil8fGEsc3RhdGVNYW5hZ2VyOmIsaW5jbHVkZU1hcmtlZENvbnRlbnQ6cyxzaW5rOngsc2VlblN0eWxlczpjLHZpZXdCb3g6bCxtYXJrZWRDb250ZW50RGF0YTpoLGRpc2FibGVOb3JtYWxpemF0aW9uOnV9KS50aGVuKChmdW5jdGlvbigpe3guZW5xdWV1ZUludm9rZWR8fGsuc2V0KEQsZi5kaWN0Lm9iaklkLCEwKTtlKCl9KSxkKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbikpe2lmKCF3Lm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRHU3RhdGU6RT1iWzBdaW5zdGFuY2VvZiBuLk5hbWU7RD1iWzBdLm5hbWU7aWYoRSYmdi5nZXRCeU5hbWUoRCkpYnJlYWs7bmV4dChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtpZighRSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtjb25zdCBpPWEuZ2V0KCJFeHRHU3RhdGUiKTtpZighKGkgaW5zdGFuY2VvZiBuLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJFeHRHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBzPWkuZ2V0KEQpO2lmKCEocyBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IG89cy5nZXQoIkZvbnQiKTtpZihvKXtmbHVzaFRleHRDb250ZW50SXRlbSgpO08uZm9udE5hbWU9bnVsbDtPLmZvbnRTaXplPW9bMV07aGFuZGxlU2V0Rm9udChudWxsLG9bMF0pLnRoZW4oZSx0KX1lbHNle3Yuc2V0KEQscy5vYmpJZCwhMCk7ZSgpfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbikpe2lmKCF3Lm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICIke2V9Ii5gKX19KSkpO3JldHVybjtjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudDpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKHMpe2gubGV2ZWwrKztkLml0ZW1zLnB1c2goe3R5cGU6ImJlZ2luTWFya2VkQ29udGVudCIsdGFnOmJbMF1pbnN0YW5jZW9mIG4uTmFtZT9iWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2Ugci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtpZihzKXtoLmxldmVsKys7bGV0IGU9bnVsbDtiWzFdaW5zdGFuY2VvZiBuLkRpY3QmJihlPWJbMV0uZ2V0KCJNQ0lEIikpO2QuaXRlbXMucHVzaCh7dHlwZToiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiLGlkOk51bWJlci5pc0ludGVnZXIoZSk/YCR7dy5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCl9X21jJHtlfWA6bnVsbCx0YWc6YlswXWluc3RhbmNlb2Ygbi5OYW1lP2JbMF0ubmFtZTpudWxsfSl9YnJlYWs7Y2FzZSByLk9QUy5lbmRNYXJrZWRDb250ZW50OmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYocyl7aWYoMD09PWgubGV2ZWwpYnJlYWs7aC5sZXZlbC0tO2QuaXRlbXMucHVzaCh7dHlwZToiZW5kTWFya2VkQ29udGVudCJ9KX1icmVhaztjYXNlIHIuT1BTLnJlc3RvcmU6IWV8fGUuZm9udD09PU8uZm9udCYmZS5mb250U2l6ZT09PU8uZm9udFNpemUmJmUuZm9udE5hbWU9PT1PLmZvbnROYW1lfHxmbHVzaFRleHRDb250ZW50SXRlbSgpfWlmKGQuaXRlbXMubGVuZ3RoPj1vLmRlc2lyZWRTaXplKXtwPSEwO2JyZWFrfX1pZihwKW5leHQoTCk7ZWxzZXtmbHVzaFRleHRDb250ZW50SXRlbSgpO2VucXVldWVDaHVuaygpO2UoKX19KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7ZW5xdWV1ZUNodW5rKCl9fSkpfWV4dHJhY3REYXRhU3RydWN0dXJlcyhlLHQsYSl7Y29uc3QgaT10aGlzLnhyZWY7bGV0IHM7Y29uc3QgbD10aGlzLnJlYWRUb1VuaWNvZGUoYS50b1VuaWNvZGV8fGUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpKTtpZihhLmNvbXBvc2l0ZSl7Y29uc3QgdD1lLmdldCgiQ0lEU3lzdGVtSW5mbyIpO3QgaW5zdGFuY2VvZiBuLkRpY3QmJihhLmNpZFN5c3RlbUluZm89e3JlZ2lzdHJ5OigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJSZWdpc3RyeSIpKSxvcmRlcmluZzooMCxyLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiT3JkZXJpbmciKSksc3VwcGxlbWVudDp0LmdldCgiU3VwcGxlbWVudCIpfSk7dHJ5e2NvbnN0IHQ9ZS5nZXQoIkNJRFRvR0lETWFwIik7dCBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSYmKHM9dC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGV4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICIke2V9Ii5gKX19Y29uc3QgaD1bXTtsZXQgdSxkPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe3U9ZS5nZXQoIkVuY29kaW5nIik7aWYodSBpbnN0YW5jZW9mIG4uRGljdCl7ZD11LmdldCgiQmFzZUVuY29kaW5nIik7ZD1kIGluc3RhbmNlb2Ygbi5OYW1lP2QubmFtZTpudWxsO2lmKHUuaGFzKCJEaWZmZXJlbmNlcyIpKXtjb25zdCBlPXUuZ2V0KCJEaWZmZXJlbmNlcyIpO2xldCB0PTA7Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1pLmZldGNoSWZSZWYoYSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXQ9ZTtlbHNle2lmKCEoZSBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZW50cnkgaW4gJ0RpZmZlcmVuY2VzJyBhcnJheTogJHtlfWApO2hbdCsrXT1lLm5hbWV9fX19ZWxzZSBpZih1IGluc3RhbmNlb2Ygbi5OYW1lKWQ9dS5uYW1lO2Vsc2V7Y29uc3QgZT0iRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihlKTsoMCxyLndhcm4pKGUpfSJNYWNSb21hbkVuY29kaW5nIiE9PWQmJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1kJiYiV2luQW5zaUVuY29kaW5nIiE9PWQmJihkPW51bGwpfWNvbnN0IGY9IWEuZmlsZXx8YS5pc0ludGVybmFsRm9udDtkJiZmJiYoMCxjLmdldFN5bWJvbHNGb250cykoKVthLm5hbWVdJiYoZD1udWxsKTtpZihkKWEuZGVmYXVsdEVuY29kaW5nPSgwLG8uZ2V0RW5jb2RpbmcpKGQpO2Vsc2V7Y29uc3QgZT0hIShhLmZsYWdzJlMuRm9udEZsYWdzLlN5bWJvbGljKSx0PSEhKGEuZmxhZ3MmUy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO3U9by5TdGFuZGFyZEVuY29kaW5nOyJUcnVlVHlwZSIhPT1hLnR5cGV8fHR8fCh1PW8uV2luQW5zaUVuY29kaW5nKTtpZihlKXt1PW8uTWFjUm9tYW5FbmNvZGluZztmJiYoL1N5bWJvbC9pLnRlc3QoYS5uYW1lKT91PW8uU3ltYm9sU2V0RW5jb2Rpbmc6L0RpbmdiYXRzL2kudGVzdChhLm5hbWUpP3U9by5aYXBmRGluZ2JhdHNFbmNvZGluZzovV2luZ2RpbmdzL2kudGVzdChhLm5hbWUpJiYodT1vLldpbkFuc2lFbmNvZGluZykpfWEuZGVmYXVsdEVuY29kaW5nPXV9YS5kaWZmZXJlbmNlcz1oO2EuYmFzZUVuY29kaW5nTmFtZT1kO2EuaGFzRW5jb2Rpbmc9ISFkfHxoLmxlbmd0aD4wO2EuZGljdD1lO3JldHVybiBsLnRoZW4oKGU9PnthLnRvVW5pY29kZT1lO3JldHVybiB0aGlzLmJ1aWxkVG9Vbmljb2RlKGEpfSkpLnRoZW4oKGU9PnthLnRvVW5pY29kZT1lO3MmJihhLmNpZFRvR2lkTWFwPXRoaXMucmVhZENpZFRvR2lkTWFwKHMsZSkpO3JldHVybiBhfSkpfV9zaW1wbGVGb250VG9Vbmljb2RlKGUsdD0hMSl7KDAsci5hc3NlcnQpKCFlLmNvbXBvc2l0ZSwiTXVzdCBiZSBhIHNpbXBsZSBmb250LiIpO2NvbnN0IGE9W10saT1lLmRlZmF1bHRFbmNvZGluZy5zbGljZSgpLG49ZS5iYXNlRW5jb2RpbmdOYW1lLHM9ZS5kaWZmZXJlbmNlcztmb3IoY29uc3QgZSBpbiBzKXtjb25zdCB0PXNbZV07Ii5ub3RkZWYiIT09dCYmKGlbZV09dCl9Y29uc3QgYz0oMCxDLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGNvbnN0IHIgaW4gaSl7bGV0IHM9aVtyXTtpZigiIj09PXMpY29udGludWU7bGV0IGw9Y1tzXTtpZih2b2lkIDAhPT1sKXthW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUobCk7Y29udGludWV9bGV0IGg9MDtzd2l0Y2goc1swXSl7Y2FzZSJHIjozPT09cy5sZW5ndGgmJihoPXBhcnNlSW50KHMuc3Vic3RyaW5nKDEpLDE2KSk7YnJlYWs7Y2FzZSJnIjo1PT09cy5sZW5ndGgmJihoPXBhcnNlSW50KHMuc3Vic3RyaW5nKDEpLDE2KSk7YnJlYWs7Y2FzZSJDIjpjYXNlImMiOmlmKHMubGVuZ3RoPj0zJiZzLmxlbmd0aDw9NCl7Y29uc3QgYT1zLnN1YnN0cmluZygxKTtpZih0KXtoPXBhcnNlSW50KGEsMTYpO2JyZWFrfWg9K2E7aWYoTnVtYmVyLmlzTmFOKGgpJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGEsMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOmw9KDAsRi5nZXRVbmljb2RlRm9yR2x5cGgpKHMsYyk7LTEhPT1sJiYoaD1sKTticmVhaztkZWZhdWx0OnN3aXRjaChzKXtjYXNlImZfaCI6Y2FzZSJmX3QiOmNhc2UiVF9oIjphW3JdPXMucmVwbGFjZUFsbCgiXyIsIiIpO2NvbnRpbnVlfX1pZihoPjAmJmg8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIoaCkpe2lmKG4mJmg9PT0rcil7Y29uc3QgZT0oMCxvLmdldEVuY29kaW5nKShuKTtpZihlJiYocz1lW3JdKSl7YVtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGNbc10pO2NvbnRpbnVlfX1hW3JdPVN0cmluZy5mcm9tQ29kZVBvaW50KGgpfX1yZXR1cm4gYX1hc3luYyBidWlsZFRvVW5pY29kZShlKXtlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwPWUudG9Vbmljb2RlPy5sZW5ndGg+MDtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXshZS5jb21wb3NpdGUmJmUuaGFzRW5jb2RpbmcmJihlLmZhbGxiYWNrVG9Vbmljb2RlPXRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO3JldHVybiBlLnRvVW5pY29kZX1pZighZS5jb21wb3NpdGUpcmV0dXJuIG5ldyB1LlRvVW5pY29kZU1hcCh0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUpKTtpZihlLmNvbXBvc2l0ZSYmKGUuY01hcC5idWlsdEluQ01hcCYmIShlLmNNYXAgaW5zdGFuY2VvZiBpLklkZW50aXR5Q01hcCl8fCJBZG9iZSI9PT1lLmNpZFN5c3RlbUluZm8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7Y29uc3R7cmVnaXN0cnk6dCxvcmRlcmluZzphfT1lLmNpZFN5c3RlbUluZm8scz1uLk5hbWUuZ2V0KGAke3R9LSR7YX0tVUNTMmApLG89YXdhaXQgaS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOnMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSksYz1bXSxsPVtdO2UuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKHQ+NjU1MzUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTtjb25zdCBhPW8ubG9va3VwKHQpO2lmKGEpe2wubGVuZ3RoPTA7Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7ZSs9MilsLnB1c2goKGEuY2hhckNvZGVBdChlKTw8OCkrYS5jaGFyQ29kZUF0KGUrMSkpO2NbZV09U3RyaW5nLmZyb21DaGFyQ29kZSguLi5sKX19KSk7cmV0dXJuIG5ldyB1LlRvVW5pY29kZU1hcChjKX1yZXR1cm4gbmV3IHUuSWRlbnRpdHlUb1VuaWNvZGVNYXAoZS5maXJzdENoYXIsZS5sYXN0Q2hhcil9cmVhZFRvVW5pY29kZShlKXtyZXR1cm4gZT9lIGluc3RhbmNlb2Ygbi5OYW1lP2kuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaS5JZGVudGl0eUNNYXA/bmV3IHUuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk6bmV3IHUuVG9Vbmljb2RlTWFwKGUuZ2V0TWFwKCkpfSkpOmUgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0/aS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSkudGhlbigoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkuSWRlbnRpdHlDTWFwKXJldHVybiBuZXcgdS5JZGVudGl0eVRvVW5pY29kZU1hcCgwLDY1NTM1KTtjb25zdCB0PW5ldyBBcnJheShlLmxlbmd0aCk7ZS5mb3JFYWNoKChmdW5jdGlvbihlLGEpe2lmKCJudW1iZXIiPT10eXBlb2YgYSl7dFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludChhKTtyZXR1cm59Y29uc3Qgcj1bXTtmb3IobGV0IGU9MDtlPGEubGVuZ3RoO2UrPTIpe2NvbnN0IHQ9YS5jaGFyQ29kZUF0KGUpPDw4fGEuY2hhckNvZGVBdChlKzEpO2lmKDU1Mjk2IT0oNjM0ODgmdCkpe3IucHVzaCh0KTtjb250aW51ZX1lKz0yO2NvbnN0IGk9YS5jaGFyQ29kZUF0KGUpPDw4fGEuY2hhckNvZGVBdChlKzEpO3IucHVzaCgoKDEwMjMmdCk8PDEwKSsoMTAyMyZpKSs2NTUzNil9dFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5yKX0pKTtyZXR1cm4gbmV3IHUuVG9Vbmljb2RlTWFwKHQpfSksKGU9PntpZihlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXsoMCxyLndhcm4pKGByZWFkVG9Vbmljb2RlIC0gaWdub3JpbmcgVG9Vbmljb2RlIGRhdGE6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH10aHJvdyBlfSkpOlByb21pc2UucmVzb2x2ZShudWxsKTpQcm9taXNlLnJlc29sdmUobnVsbCl9cmVhZENpZFRvR2lkTWFwKGUsdCl7Y29uc3QgYT1bXTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9ZVtyKytdPDw4fGVbcl0sbj1yPj4xOygwIT09aXx8dC5oYXMobikpJiYoYVtuXT1pKX1yZXR1cm4gYX1leHRyYWN0V2lkdGhzKGUsdCxhKXtjb25zdCByPXRoaXMueHJlZjtsZXQgaT1bXSxzPTA7Y29uc3Qgbz1bXTtsZXQgYyxsLGgsdSxkLGYsZyxwO2lmKGEuY29tcG9zaXRlKXtzPWUuaGFzKCJEVyIpP2UuZ2V0KCJEVyIpOjFlMztwPWUuZ2V0KCJXIik7aWYocClmb3IobD0wLGg9cC5sZW5ndGg7bDxoO2wrKyl7Zj1yLmZldGNoSWZSZWYocFtsKytdKTtnPXIuZmV0Y2hJZlJlZihwW2xdKTtpZihBcnJheS5pc0FycmF5KGcpKWZvcih1PTAsZD1nLmxlbmd0aDt1PGQ7dSsrKWlbZisrXT1yLmZldGNoSWZSZWYoZ1t1XSk7ZWxzZXtjb25zdCBlPXIuZmV0Y2hJZlJlZihwWysrbF0pO2Zvcih1PWY7dTw9Zzt1KyspaVt1XT1lfX1pZihhLnZlcnRpY2FsKXtsZXQgdD1lLmdldEFycmF5KCJEVzIiKXx8Wzg4MCwtMWUzXTtjPVt0WzFdLC41KnMsdFswXV07dD1lLmdldCgiVzIiKTtpZih0KWZvcihsPTAsaD10Lmxlbmd0aDtsPGg7bCsrKXtmPXIuZmV0Y2hJZlJlZih0W2wrK10pO2c9ci5mZXRjaElmUmVmKHRbbF0pO2lmKEFycmF5LmlzQXJyYXkoZykpZm9yKHU9MCxkPWcubGVuZ3RoO3U8ZDt1Kyspb1tmKytdPVtyLmZldGNoSWZSZWYoZ1t1KytdKSxyLmZldGNoSWZSZWYoZ1t1KytdKSxyLmZldGNoSWZSZWYoZ1t1XSldO2Vsc2V7Y29uc3QgZT1bci5mZXRjaElmUmVmKHRbKytsXSksci5mZXRjaElmUmVmKHRbKytsXSksci5mZXRjaElmUmVmKHRbKytsXSldO2Zvcih1PWY7dTw9Zzt1Kyspb1t1XT1lfX19fWVsc2V7Y29uc3Qgbz1hLmZpcnN0Q2hhcjtwPWUuZ2V0KCJXaWR0aHMiKTtpZihwKXt1PW87Zm9yKGw9MCxoPXAubGVuZ3RoO2w8aDtsKyspaVt1KytdPXIuZmV0Y2hJZlJlZihwW2xdKTtzPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle2NvbnN0IHQ9ZS5nZXQoIkJhc2VGb250Iik7aWYodCBpbnN0YW5jZW9mIG4uTmFtZSl7Y29uc3QgZT10aGlzLmdldEJhc2VGb250TWV0cmljcyh0Lm5hbWUpO2k9dGhpcy5idWlsZENoYXJDb2RlVG9XaWR0aChlLndpZHRocyxhKTtzPWUuZGVmYXVsdFdpZHRofX19bGV0IG09ITAsYj1zO2Zvcihjb25zdCBlIGluIGkpe2NvbnN0IHQ9aVtlXTtpZih0KWlmKGIpe2lmKGIhPT10KXttPSExO2JyZWFrfX1lbHNlIGI9dH1tP2EuZmxhZ3N8PVMuRm9udEZsYWdzLkZpeGVkUGl0Y2g6YS5mbGFncyY9flMuRm9udEZsYWdzLkZpeGVkUGl0Y2g7YS5kZWZhdWx0V2lkdGg9czthLndpZHRocz1pO2EuZGVmYXVsdFZNZXRyaWNzPWM7YS52bWV0cmljcz1vfWlzU2VyaWZGb250KGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLSIpWzBdO3JldHVybiB0IGluKDAsYy5nZXRTZXJpZkZvbnRzKSgpfHwvc2VyaWYvZ2kudGVzdCh0KX1nZXRCYXNlRm9udE1ldHJpY3MoZSl7bGV0IHQ9MCxhPU9iamVjdC5jcmVhdGUobnVsbCkscj0hMTtsZXQgaT0oMCxjLmdldFN0ZEZvbnRNYXApKClbZV18fGU7Y29uc3Qgbj0oMCx2LmdldE1ldHJpY3MpKCk7aSBpbiBufHwoaT10aGlzLmlzU2VyaWZGb250KGUpPyJUaW1lcy1Sb21hbiI6IkhlbHZldGljYSIpO2NvbnN0IHM9bltpXTtpZigibnVtYmVyIj09dHlwZW9mIHMpe3Q9cztyPSEwfWVsc2UgYT1zKCk7cmV0dXJue2RlZmF1bHRXaWR0aDp0LG1vbm9zcGFjZTpyLHdpZHRoczphfX1idWlsZENoYXJDb2RlVG9XaWR0aChlLHQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXQuZGlmZmVyZW5jZXMsaT10LmRlZmF1bHRFbmNvZGluZztmb3IobGV0IHQ9MDt0PDI1Njt0KyspdCBpbiByJiZlW3JbdF1dP2FbdF09ZVtyW3RdXTp0IGluIGkmJmVbaVt0XV0mJihhW3RdPWVbaVt0XV0pO3JldHVybiBhfXByZUV2YWx1YXRlRm9udChlKXtjb25zdCB0PWU7bGV0IGE9ZS5nZXQoIlN1YnR5cGUiKTtpZighKGEgaW5zdGFuY2VvZiBuLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO2xldCBpLHMsbz0hMTtpZigiVHlwZTAiPT09YS5uYW1lKXtjb25zdCB0PWUuZ2V0KCJEZXNjZW5kYW50Rm9udHMiKTtpZighdCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRGVzY2VuZGFudCBmb250cyBhcmUgbm90IHNwZWNpZmllZCIpO2lmKCEoKGU9QXJyYXkuaXNBcnJheSh0KT90aGlzLnhyZWYuZmV0Y2hJZlJlZih0WzBdKTp0KWluc3RhbmNlb2Ygbi5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRGVzY2VuZGFudCBmb250IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7YT1lLmdldCgiU3VidHlwZSIpO2lmKCEoYSBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7bz0hMH1jb25zdCBjPWUuZ2V0KCJGaXJzdENoYXIiKXx8MCxsPWUuZ2V0KCJMYXN0Q2hhciIpfHwobz82NTUzNToyNTUpLGg9ZS5nZXQoIkZvbnREZXNjcmlwdG9yIik7aWYoaCl7aT1uZXcgVC5NdXJtdXJIYXNoM182NDtjb25zdCBhPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKGEgaW5zdGFuY2VvZiBuLk5hbWUpaS51cGRhdGUoYS5uYW1lKTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBuLlJlZilpLnVwZGF0ZShhLnRvU3RyaW5nKCkpO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIG4uRGljdClmb3IoY29uc3QgZSBvZiBhLmdldFJhd1ZhbHVlcygpKWlmKGUgaW5zdGFuY2VvZiBuLk5hbWUpaS51cGRhdGUoZS5uYW1lKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLlJlZilpLnVwZGF0ZShlLnRvU3RyaW5nKCkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1lLmxlbmd0aCxhPW5ldyBBcnJheSh0KTtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PWVbcl07dCBpbnN0YW5jZW9mIG4uTmFtZT9hW3JdPXQubmFtZTooIm51bWJlciI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2Ygbi5SZWYpJiYoYVtyXT10LnRvU3RyaW5nKCkpfWkudXBkYXRlKGEuam9pbigpKX1pLnVwZGF0ZShgJHtjfS0ke2x9YCk7cz1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKTtpZihzIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtKXtjb25zdCBlPXMuc3RyfHxzLHQ9ZS5idWZmZXI/bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuYnVmZmVyLDAsZS5idWZmZXJMZW5ndGgpOm5ldyBVaW50OEFycmF5KGUuYnl0ZXMuYnVmZmVyLGUuc3RhcnQsZS5lbmQtZS5zdGFydCk7aS51cGRhdGUodCl9ZWxzZSBzIGluc3RhbmNlb2Ygbi5OYW1lJiZpLnVwZGF0ZShzLm5hbWUpO2NvbnN0IHI9ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiByKSgibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBuLlJlZikmJmUucHVzaCh0LnRvU3RyaW5nKCkpO2kudXBkYXRlKGUuam9pbigpKX1pZihvKXtpLnVwZGF0ZSgiY29tcG9zaXRlRm9udCIpO2NvbnN0IGE9ZS5nZXQoIlciKXx8dC5nZXQoIlciKTtpZihBcnJheS5pc0FycmF5KGEpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIGEpaWYoIm51bWJlciI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2Ygbi5SZWYpZS5wdXNoKHQudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdCBhPVtdO2Zvcihjb25zdCBlIG9mIHQpKCJudW1iZXIiPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIG4uUmVmKSYmYS5wdXNoKGUudG9TdHJpbmcoKSk7ZS5wdXNoKGBbJHthLmpvaW4oKX1dYCl9aS51cGRhdGUoZS5qb2luKCkpfWNvbnN0IHI9ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO3IgaW5zdGFuY2VvZiBuLk5hbWU/aS51cGRhdGUoci5uYW1lKTpyIGluc3RhbmNlb2Ygbi5SZWY/aS51cGRhdGUoci50b1N0cmluZygpKTpyIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtJiZpLnVwZGF0ZShyLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6aCxkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6byx0eXBlOmEubmFtZSxmaXJzdENoYXI6YyxsYXN0Q2hhcjpsLHRvVW5pY29kZTpzLGhhc2g6aT9pLmhleGRpZ2VzdCgpOiIifX1hc3luYyB0cmFuc2xhdGVGb250KHtkZXNjcmlwdG9yOmUsZGljdDp0LGJhc2VEaWN0OmEsY29tcG9zaXRlOm8sdHlwZTpsLGZpcnN0Q2hhcjp1LGxhc3RDaGFyOmQsdG9Vbmljb2RlOmYsY3NzRm9udEluZm86Z30pe2NvbnN0IG09IlR5cGUzIj09PWw7bGV0IGI7aWYoIWUpe2lmKCFtKXtsZXQgZT10LmdldCgiQmFzZUZvbnQiKTtpZighKGUgaW5zdGFuY2VvZiBuLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJCYXNlIGZvbnQgaXMgbm90IHNwZWNpZmllZCIpO2U9ZS5uYW1lLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpO2NvbnN0IGk9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoZSksbz1lLnNwbGl0KCItIilbMF0saD0odGhpcy5pc1NlcmlmRm9udChvKT9TLkZvbnRGbGFncy5TZXJpZjowKXwoaS5tb25vc3BhY2U/Uy5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsYy5nZXRTeW1ib2xzRm9udHMpKClbb10/Uy5Gb250RmxhZ3MuU3ltYm9saWM6Uy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2I9e3R5cGU6bCxuYW1lOmUsbG9hZGVkTmFtZTphLmxvYWRlZE5hbWUsc3lzdGVtRm9udEluZm86bnVsbCx3aWR0aHM6aS53aWR0aHMsZGVmYXVsdFdpZHRoOmkuZGVmYXVsdFdpZHRoLGlzU2ltdWxhdGVkRmxhZ3M6ITAsZmxhZ3M6aCxmaXJzdENoYXI6dSxsYXN0Q2hhcjpkLHRvVW5pY29kZTpmLHhIZWlnaHQ6MCxjYXBIZWlnaHQ6MCxpdGFsaWNBbmdsZTowLGlzVHlwZTNGb250Om19O2NvbnN0IGc9dC5nZXQoIldpZHRocyIpLHA9KDAsYy5nZXRTdGFuZGFyZEZvbnROYW1lKShlKTtsZXQgeT1udWxsO2lmKHApe3k9YXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEocCk7Yi5pc0ludGVybmFsRm9udD0hIXl9IWIuaXNJbnRlcm5hbEZvbnQmJnRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250cyYmKGIuc3lzdGVtRm9udEluZm89KDAseC5nZXRGb250U3Vic3RpdHV0aW9uKSh0aGlzLnN5c3RlbUZvbnRDYWNoZSx0aGlzLmlkRmFjdG9yeSx0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCxlLHApKTtyZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXModCx0LGIpLnRoZW4oKHQ9PntpZihnKXtjb25zdCBlPVtdO2xldCBhPXU7Zm9yKGNvbnN0IHQgb2YgZyllW2ErK109dGhpcy54cmVmLmZldGNoSWZSZWYodCk7dC53aWR0aHM9ZX1lbHNlIHQud2lkdGhzPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgoaS53aWR0aHMsdCk7cmV0dXJuIG5ldyBzLkZvbnQoZSx5LHQpfSkpfShlPW5ldyBuLkRpY3QobnVsbCkpLnNldCgiRm9udE5hbWUiLG4uTmFtZS5nZXQobCkpO2Uuc2V0KCJGb250QkJveCIsdC5nZXRBcnJheSgiRm9udEJCb3giKXx8WzAsMCwwLDBdKX1sZXQgeSx3LEMsayx2LEY9ZS5nZXQoIkZvbnROYW1lIiksTz10LmdldCgiQmFzZUZvbnQiKTsic3RyaW5nIj09dHlwZW9mIEYmJihGPW4uTmFtZS5nZXQoRikpOyJzdHJpbmciPT10eXBlb2YgTyYmKE89bi5OYW1lLmdldChPKSk7aWYoIW0pe2NvbnN0IGU9Rj8ubmFtZSx0PU8/Lm5hbWU7aWYoZSE9PXQpeygwLHIuaW5mbykoYFRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzICIke2V9IiBidXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBGb250J3MgQmFzZUZvbnQgIiR7dH0iLmApO2UmJnQ/LnN0YXJ0c1dpdGgoZSkmJihGPU8pfX1GfHw9TztpZighKEYgaW5zdGFuY2VvZiBuLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgbmFtZSIpO3RyeXt5PWUuZ2V0KCJGb250RmlsZSIsIkZvbnRGaWxlMiIsIkZvbnRGaWxlMyIpfWNhdGNoKGUpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgdHJhbnNsYXRlRm9udCAtIGZldGNoaW5nICIke0YubmFtZX0iIGZvbnQgZmlsZTogIiR7ZX0iLmApO3k9bmV3IHAuTnVsbFN0cmVhbX1sZXQgVD0hMSxNPW51bGwsRT1udWxsO2lmKHkpe2lmKHkuZGljdCl7Y29uc3QgZT15LmRpY3QuZ2V0KCJTdWJ0eXBlIik7ZSBpbnN0YW5jZW9mIG4uTmFtZSYmKHc9ZS5uYW1lKTtDPXkuZGljdC5nZXQoIkxlbmd0aDEiKTtrPXkuZGljdC5nZXQoIkxlbmd0aDIiKTt2PXkuZGljdC5nZXQoIkxlbmd0aDMiKX19ZWxzZSBpZihnKXtjb25zdCBlPSgwLGguZ2V0WGZhRm9udE5hbWUpKEYubmFtZSk7aWYoZSl7Zy5mb250RmFtaWx5PWAke2cuZm9udEZhbWlseX0tUGRmSlMtWEZBYDtnLm1ldHJpY3M9ZS5tZXRyaWNzfHxudWxsO009ZS5mYWN0b3JzfHxudWxsO3k9YXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEoZS5uYW1lKTtUPSEheTthPXQ9KDAsaC5nZXRYZmFGb250RGljdCkoRi5uYW1lKTtvPSEwfX1lbHNlIGlmKCFtKXtjb25zdCBlPSgwLGMuZ2V0U3RhbmRhcmRGb250TmFtZSkoRi5uYW1lKTtpZihlKXt5PWF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpO1Q9ISF5fSFUJiZ0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJihFPSgwLHguZ2V0Rm9udFN1YnN0aXR1dGlvbikodGhpcy5zeXN0ZW1Gb250Q2FjaGUsdGhpcy5pZEZhY3RvcnksdGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwsRi5uYW1lLGUpKX1iPXt0eXBlOmwsbmFtZTpGLm5hbWUsc3VidHlwZTp3LGZpbGU6eSxsZW5ndGgxOkMsbGVuZ3RoMjprLGxlbmd0aDM6dixpc0ludGVybmFsRm9udDpULGxvYWRlZE5hbWU6YS5sb2FkZWROYW1lLGNvbXBvc2l0ZTpvLGZpeGVkUGl0Y2g6ITEsZm9udE1hdHJpeDp0LmdldEFycmF5KCJGb250TWF0cml4Iil8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgsZmlyc3RDaGFyOnUsbGFzdENoYXI6ZCx0b1VuaWNvZGU6ZixiYm94OmUuZ2V0QXJyYXkoIkZvbnRCQm94Iil8fHQuZ2V0QXJyYXkoIkZvbnRCQm94IiksYXNjZW50OmUuZ2V0KCJBc2NlbnQiKSxkZXNjZW50OmUuZ2V0KCJEZXNjZW50IikseEhlaWdodDplLmdldCgiWEhlaWdodCIpfHwwLGNhcEhlaWdodDplLmdldCgiQ2FwSGVpZ2h0Iil8fDAsZmxhZ3M6ZS5nZXQoIkZsYWdzIiksaXRhbGljQW5nbGU6ZS5nZXQoIkl0YWxpY0FuZ2xlIil8fDAsaXNUeXBlM0ZvbnQ6bSxjc3NGb250SW5mbzpnLHNjYWxlRmFjdG9yczpNLHN5c3RlbUZvbnRJbmZvOkV9O2lmKG8pe2NvbnN0IGU9YS5nZXQoIkVuY29kaW5nIik7ZSBpbnN0YW5jZW9mIG4uTmFtZSYmKGIuY2lkRW5jb2Rpbmc9ZS5uYW1lKTtjb25zdCB0PWF3YWl0IGkuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2IuY01hcD10O2IudmVydGljYWw9Yi5jTWFwLnZlcnRpY2FsfXJldHVybiB0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyh0LGEsYikudGhlbigoYT0+e3RoaXMuZXh0cmFjdFdpZHRocyh0LGUsYSk7cmV0dXJuIG5ldyBzLkZvbnQoRi5uYW1lLHksYSl9KSl9c3RhdGljIGJ1aWxkRm9udFBhdGhzKGUsdCxhLGkpe2Z1bmN0aW9uIGJ1aWxkUGF0aCh0KXtjb25zdCBuPWAke2UubG9hZGVkTmFtZX1fcGF0aF8ke3R9YDt0cnl7aWYoZS5yZW5kZXJlci5oYXNCdWlsdFBhdGgodCkpcmV0dXJuO2Euc2VuZCgiY29tbW9ub2JqIixbbiwiRm9udFBhdGgiLGUucmVuZGVyZXIuZ2V0UGF0aEpzKHQpXSl9Y2F0Y2goZSl7aWYoaS5pZ25vcmVFcnJvcnMpeygwLHIud2FybikoYGJ1aWxkRm9udFBhdGhzIC0gaWdub3JpbmcgJHtufSBnbHlwaDogIiR7ZX0iLmApO3JldHVybn10aHJvdyBlfX1mb3IoY29uc3QgZSBvZiB0KXtidWlsZFBhdGgoZS5mb250Q2hhcik7Y29uc3QgdD1lLmFjY2VudDt0Py5mb250Q2hhciYmYnVpbGRQYXRoKHQuZm9udENoYXIpfX1zdGF0aWMgZ2V0IGZhbGxiYWNrRm9udERpY3QoKXtjb25zdCBlPW5ldyBuLkRpY3Q7ZS5zZXQoIkJhc2VGb250IixuLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLG4uTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKTtlLnNldCgiU3VidHlwZSIsbi5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJFbmNvZGluZyIsbi5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJmYWxsYmFja0ZvbnREaWN0IixlKX19dC5QYXJ0aWFsRXZhbHVhdG9yPVBhcnRpYWxFdmFsdWF0b3I7Y2xhc3MgVHJhbnNsYXRlZEZvbnR7Y29uc3RydWN0b3Ioe2xvYWRlZE5hbWU6ZSxmb250OnQsZGljdDphLGV2YWx1YXRvck9wdGlvbnM6cn0pe3RoaXMubG9hZGVkTmFtZT1lO3RoaXMuZm9udD10O3RoaXMuZGljdD1hO3RoaXMuX2V2YWx1YXRvck9wdGlvbnM9cnx8RDt0aGlzLnR5cGUzTG9hZGVkPW51bGw7dGhpcy50eXBlM0RlcGVuZGVuY2llcz10LmlzVHlwZTNGb250P25ldyBTZXQ6bnVsbDt0aGlzLnNlbnQ9ITF9c2VuZChlKXtpZighdGhpcy5zZW50KXt0aGlzLnNlbnQ9ITA7ZS5zZW5kKCJjb21tb25vYmoiLFt0aGlzLmxvYWRlZE5hbWUsIkZvbnQiLHRoaXMuZm9udC5leHBvcnREYXRhKHRoaXMuX2V2YWx1YXRvck9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllcyldKX19ZmFsbGJhY2soZSl7aWYodGhpcy5mb250LmRhdGEpe3RoaXMuZm9udC5kaXNhYmxlRm9udEZhY2U9ITA7UGFydGlhbEV2YWx1YXRvci5idWlsZEZvbnRQYXRocyh0aGlzLmZvbnQsdGhpcy5mb250LmdseXBoQ2FjaGVWYWx1ZXMsZSx0aGlzLl9ldmFsdWF0b3JPcHRpb25zKX19bG9hZFR5cGUzRGF0YShlLHQsYSl7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7Y29uc3QgaT1lLmNsb25lKHtpZ25vcmVFcnJvcnM6ITF9KTtpLnBhcnNpbmdUeXBlM0ZvbnQ9ITA7Y29uc3Qgcz1uZXcgbi5SZWZTZXQoZS50eXBlM0ZvbnRSZWZzKTt0aGlzLmRpY3Qub2JqSWQmJiFzLmhhcyh0aGlzLmRpY3Qub2JqSWQpJiZzLnB1dCh0aGlzLmRpY3Qub2JqSWQpO2kudHlwZTNGb250UmVmcz1zO2NvbnN0IG89dGhpcy5mb250LGM9dGhpcy50eXBlM0RlcGVuZGVuY2llcztsZXQgbD1Qcm9taXNlLnJlc29sdmUoKTtjb25zdCBoPXRoaXMuZGljdC5nZXQoIkNoYXJQcm9jcyIpLHU9dGhpcy5kaWN0LmdldCgiUmVzb3VyY2VzIil8fHQsZD1PYmplY3QuY3JlYXRlKG51bGwpLGY9ci5VdGlsLm5vcm1hbGl6ZVJlY3Qoby5iYm94fHxbMCwwLDAsMF0pLGc9ZlsyXS1mWzBdLHA9ZlszXS1mWzFdLG09TWF0aC5oeXBvdChnLHApO2Zvcihjb25zdCBlIG9mIGguZ2V0S2V5cygpKWw9bC50aGVuKCgoKT0+e2NvbnN0IHQ9aC5nZXQoZSksbj1uZXcgTS5PcGVyYXRvckxpc3Q7cmV0dXJuIGkuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOmEscmVzb3VyY2VzOnUsb3BlcmF0b3JMaXN0Om59KS50aGVuKCgoKT0+e24uZm5BcnJheVswXT09PXIuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyYmdGhpcy5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhuLG0pO2RbZV09bi5nZXRJUigpO2Zvcihjb25zdCBlIG9mIG4uZGVwZW5kZW5jaWVzKWMuYWRkKGUpfSkpLmNhdGNoKChmdW5jdGlvbih0KXsoMCxyLndhcm4pKGBUeXBlMyBmb250IHJlc291cmNlICIke2V9IiBpcyBub3QgYXZhaWxhYmxlLmApO2NvbnN0IGE9bmV3IE0uT3BlcmF0b3JMaXN0O2RbZV09YS5nZXRJUigpfSkpfSkpO3RoaXMudHlwZTNMb2FkZWQ9bC50aGVuKCgoKT0+e28uY2hhclByb2NPcGVyYXRvckxpc3Q9ZDtpZih0aGlzLl9iYm94KXtvLmlzQ2hhckJCb3g9ITA7by5iYm94PXRoaXMuX2Jib3h9fSkpO3JldHVybiB0aGlzLnR5cGUzTG9hZGVkfV9yZW1vdmVUeXBlM0NvbG9yT3BlcmF0b3JzKGUsdD1OYU4pe2NvbnN0IGE9ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZS5hcmdzQXJyYXlbMF0uc2xpY2UoMikpLGk9YVsyXS1hWzBdLG49YVszXS1hWzFdLHM9TWF0aC5oeXBvdChpLG4pO2lmKDA9PT1pfHwwPT09bil7ZS5mbkFycmF5LnNwbGljZSgwLDEpO2UuYXJnc0FycmF5LnNwbGljZSgwLDEpfWVsc2UgaWYoMD09PXR8fE1hdGgucm91bmQocy90KT49MTApe3RoaXMuX2Jib3h8fCh0aGlzLl9iYm94PVsxLzAsMS8wLC0xLzAsLTEvMF0pO3RoaXMuX2Jib3hbMF09TWF0aC5taW4odGhpcy5fYmJveFswXSxhWzBdKTt0aGlzLl9iYm94WzFdPU1hdGgubWluKHRoaXMuX2Jib3hbMV0sYVsxXSk7dGhpcy5fYmJveFsyXT1NYXRoLm1heCh0aGlzLl9iYm94WzJdLGFbMl0pO3RoaXMuX2Jib3hbM109TWF0aC5tYXgodGhpcy5fYmJveFszXSxhWzNdKX1sZXQgbz0wLGM9ZS5sZW5ndGg7Zm9yKDtvPGM7KXtzd2l0Y2goZS5mbkFycmF5W29dKXtjYXNlIHIuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kczpicmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTpjYXNlIHIuT1BTLnNldFN0cm9rZUNvbG9yOmNhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3JOOmNhc2Ugci5PUFMuc2V0RmlsbENvbG9yOmNhc2Ugci5PUFMuc2V0RmlsbENvbG9yTjpjYXNlIHIuT1BTLnNldFN0cm9rZUdyYXk6Y2FzZSByLk9QUy5zZXRGaWxsR3JheTpjYXNlIHIuT1BTLnNldFN0cm9rZVJHQkNvbG9yOmNhc2Ugci5PUFMuc2V0RmlsbFJHQkNvbG9yOmNhc2Ugci5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yOmNhc2Ugci5PUFMuc2V0RmlsbENNWUtDb2xvcjpjYXNlIHIuT1BTLnNoYWRpbmdGaWxsOmNhc2Ugci5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OmUuZm5BcnJheS5zcGxpY2UobywxKTtlLmFyZ3NBcnJheS5zcGxpY2UobywxKTtjLS07Y29udGludWU7Y2FzZSByLk9QUy5zZXRHU3RhdGU6Y29uc3RbdF09ZS5hcmdzQXJyYXlbb107bGV0IGE9MCxpPXQubGVuZ3RoO2Zvcig7YTxpOyl7Y29uc3RbZV09dFthXTtzd2l0Y2goZSl7Y2FzZSJUUiI6Y2FzZSJUUjIiOmNhc2UiSFQiOmNhc2UiQkciOmNhc2UiQkcyIjpjYXNlIlVDUiI6Y2FzZSJVQ1IyIjp0LnNwbGljZShhLDEpO2ktLTtjb250aW51ZX1hKyt9fW8rK319fWNsYXNzIFN0YXRlTWFuYWdlcntjb25zdHJ1Y3RvcihlPW5ldyBFdmFsU3RhdGUpe3RoaXMuc3RhdGU9ZTt0aGlzLnN0YXRlU3RhY2s9W119c2F2ZSgpe2NvbnN0IGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKTt0aGlzLnN0YXRlPWUuY2xvbmUoKX1yZXN0b3JlKCl7Y29uc3QgZT10aGlzLnN0YXRlU3RhY2sucG9wKCk7ZSYmKHRoaXMuc3RhdGU9ZSl9dHJhbnNmb3JtKGUpe3RoaXMuc3RhdGUuY3RtPXIuVXRpbC50cmFuc2Zvcm0odGhpcy5zdGF0ZS5jdG0sZSl9fWNsYXNzIFRleHRTdGF0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoci5JREVOVElUWV9NQVRSSVgpO3RoaXMuZm9udE5hbWU9bnVsbDt0aGlzLmZvbnRTaXplPTA7dGhpcy5sb2FkZWROYW1lPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5mb250TWF0cml4PXIuRk9OVF9JREVOVElUWV9NQVRSSVg7dGhpcy50ZXh0TWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7dGhpcy50ZXh0TGluZU1hdHJpeD1yLklERU5USVRZX01BVFJJWC5zbGljZSgpO3RoaXMuY2hhclNwYWNpbmc9MDt0aGlzLndvcmRTcGFjaW5nPTA7dGhpcy5sZWFkaW5nPTA7dGhpcy50ZXh0SFNjYWxlPTE7dGhpcy50ZXh0UmlzZT0wfXNldFRleHRNYXRyaXgoZSx0LGEscixpLG4pe2NvbnN0IHM9dGhpcy50ZXh0TWF0cml4O3NbMF09ZTtzWzFdPXQ7c1syXT1hO3NbM109cjtzWzRdPWk7c1s1XT1ufXNldFRleHRMaW5lTWF0cml4KGUsdCxhLHIsaSxuKXtjb25zdCBzPXRoaXMudGV4dExpbmVNYXRyaXg7c1swXT1lO3NbMV09dDtzWzJdPWE7c1szXT1yO3NbNF09aTtzWzVdPW59dHJhbnNsYXRlVGV4dE1hdHJpeChlLHQpe2NvbnN0IGE9dGhpcy50ZXh0TWF0cml4O2FbNF09YVswXSplK2FbMl0qdCthWzRdO2FbNV09YVsxXSplK2FbM10qdCthWzVdfXRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGUsdCl7Y29uc3QgYT10aGlzLnRleHRMaW5lTWF0cml4O2FbNF09YVswXSplK2FbMl0qdCthWzRdO2FbNV09YVsxXSplK2FbM10qdCthWzVdfWNhcnJpYWdlUmV0dXJuKCl7dGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLC10aGlzLmxlYWRpbmcpO3RoaXMudGV4dE1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCl9Y2xvbmUoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUodGhpcyk7ZS50ZXh0TWF0cml4PXRoaXMudGV4dE1hdHJpeC5zbGljZSgpO2UudGV4dExpbmVNYXRyaXg9dGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2UuZm9udE1hdHJpeD10aGlzLmZvbnRNYXRyaXguc2xpY2UoKTtyZXR1cm4gZX19Y2xhc3MgRXZhbFN0YXRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdG09bmV3IEZsb2F0MzJBcnJheShyLklERU5USVRZX01BVFJJWCk7dGhpcy5mb250PW51bGw7dGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1yLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7dGhpcy5maWxsQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O3RoaXMuc3Ryb2tlQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5fWNsb25lKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fWNsYXNzIEV2YWx1YXRvclByZXByb2Nlc3NvcntzdGF0aWMgZ2V0IG9wTWFwKCl7Y29uc3QgZT0oMCxrLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6ci5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuSj17aWQ6ci5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLmo9e2lkOnIuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuTT17aWQ6ci5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLmQ9e2lkOnIuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5yaT17aWQ6ci5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuaT17aWQ6ci5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5ncz17aWQ6ci5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UucT17aWQ6ci5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLlE9e2lkOnIuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5jbT17aWQ6ci5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9O2UubT17aWQ6ci5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UubD17aWQ6ci5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuYz17aWQ6ci5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfTtlLnY9e2lkOnIuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9O2UueT17aWQ6ci5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX07ZS5oPXtpZDpyLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5yZT17aWQ6ci5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9O2UuUz17aWQ6ci5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2Uucz17aWQ6ci5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5mPXtpZDpyLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuRj17aWQ6ci5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlWyJmKiJdPXtpZDpyLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5CPXtpZDpyLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2VbIkIqIl09e2lkOnIuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLmI9e2lkOnIuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlWyJiKiJdPXtpZDpyLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLm49e2lkOnIuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5XPXtpZDpyLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2VbIlcqIl09e2lkOnIuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLkJUPXtpZDpyLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5FVD17aWQ6ci5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLlRjPXtpZDpyLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLlR3PXtpZDpyLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLlR6PXtpZDpyLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5UTD17aWQ6ci5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLlRmPXtpZDpyLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuVHI9e2lkOnIuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVHM9e2lkOnIuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVGQ9e2lkOnIuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuVEQ9e2lkOnIuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfTtlLlRtPXtpZDpyLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9O2VbIlQqIl09e2lkOnIuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuVGo9e2lkOnIuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVEo9e2lkOnIuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2VbIiciXT17aWQ6ci5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlWyciJ109e2lkOnIuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9O2UuZDA9e2lkOnIuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfTtlLmQxPXtpZDpyLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX07ZS5DUz17aWQ6ci5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLmNzPXtpZDpyLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLlNDPXtpZDpyLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfTtlLlNDTj17aWQ6ci5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfTtlLnNjPXtpZDpyLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH07ZS5zY249e2lkOnIuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9O2UuRz17aWQ6ci5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLmc9e2lkOnIuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuUkc9e2lkOnIuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9O2Uucmc9e2lkOnIuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfTtlLks9e2lkOnIuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfTtlLms9e2lkOnIuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX07ZS5zaD17aWQ6ci5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5CST17aWQ6ci5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLklEPXtpZDpyLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLkVJPXtpZDpyLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLkRvPXtpZDpyLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5NUD17aWQ6ci5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuRFA9e2lkOnIuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuQk1DPXtpZDpyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5CREM9e2lkOnIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuRU1DPXtpZDpyLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuQlg9e2lkOnIuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuRVg9e2lkOnIuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLkJNPW51bGw7ZS5CRD1udWxsO2UudHJ1ZT1udWxsO2UuZmE9bnVsbDtlLmZhbD1udWxsO2UuZmFscz1udWxsO2UuZmFsc2U9bnVsbDtlLm51PW51bGw7ZS5udWw9bnVsbDtlLm51bGw9bnVsbH0pKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywib3BNYXAiLGUoKSl9c3RhdGljIE1BWF9JTlZBTElEX1BBVEhfT1BTPTEwO2NvbnN0cnVjdG9yKGUsdCxhPW5ldyBTdGF0ZU1hbmFnZXIpe3RoaXMucGFyc2VyPW5ldyBmLlBhcnNlcih7bGV4ZXI6bmV3IGYuTGV4ZXIoZSxFdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXApLHhyZWY6dH0pO3RoaXMuc3RhdGVNYW5hZ2VyPWE7dGhpcy5ub25Qcm9jZXNzZWRBcmdzPVtdO3RoaXMuX2lzUGF0aE9wPSExO3RoaXMuX251bUludmFsaWRQYXRoT1BTPTB9Z2V0IHNhdmVkU3RhdGVzRGVwdGgoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGh9cmVhZChlKXtsZXQgdD1lLmFyZ3M7Zm9yKDs7KXtjb25zdCBhPXRoaXMucGFyc2VyLmdldE9iaigpO2lmKGEgaW5zdGFuY2VvZiBuLkNtZCl7Y29uc3QgaT1hLmNtZCxuPUV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcFtpXTtpZighbil7KDAsci53YXJuKShgVW5rbm93biBjb21tYW5kICIke2l9Ii5gKTtjb250aW51ZX1jb25zdCBzPW4uaWQsbz1uLm51bUFyZ3M7bGV0IGM9bnVsbCE9PXQ/dC5sZW5ndGg6MDt0aGlzLl9pc1BhdGhPcHx8KHRoaXMuX251bUludmFsaWRQYXRoT1BTPTApO3RoaXMuX2lzUGF0aE9wPXM+PXIuT1BTLm1vdmVUbyYmczw9ci5PUFMuZW5kUGF0aDtpZihuLnZhcmlhYmxlQXJncyljPm8mJigwLHIuaW5mbykoYENvbW1hbmQgJHtpfTogZXhwZWN0ZWQgWzAsICR7b31dIGFyZ3MsIGJ1dCByZWNlaXZlZCAke2N9IGFyZ3MuYCk7ZWxzZXtpZihjIT09byl7Y29uc3QgZT10aGlzLm5vblByb2Nlc3NlZEFyZ3M7Zm9yKDtjPm87KXtlLnB1c2godC5zaGlmdCgpKTtjLS19Zm9yKDtjPG8mJjAhPT1lLmxlbmd0aDspe251bGw9PT10JiYodD1bXSk7dC51bnNoaWZ0KGUucG9wKCkpO2MrK319aWYoYzxvKXtjb25zdCBlPWBjb21tYW5kICR7aX06IGV4cGVjdGVkICR7b30gYXJncywgYnV0IHJlY2VpdmVkICR7Y30gYXJncy5gO2lmKHRoaXMuX2lzUGF0aE9wJiYrK3RoaXMuX251bUludmFsaWRQYXRoT1BTPkV2YWx1YXRvclByZXByb2Nlc3Nvci5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCAke2V9YCk7KDAsci53YXJuKShgU2tpcHBpbmcgJHtlfWApO251bGwhPT10JiYodC5sZW5ndGg9MCk7Y29udGludWV9fXRoaXMucHJlcHJvY2Vzc0NvbW1hbmQocyx0KTtlLmZuPXM7ZS5hcmdzPXQ7cmV0dXJuITB9aWYoYT09PW4uRU9GKXJldHVybiExO2lmKG51bGwhPT1hKXtudWxsPT09dCYmKHQ9W10pO3QucHVzaChhKTtpZih0Lmxlbmd0aD4zMyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX1wcmVwcm9jZXNzQ29tbWFuZChlLHQpe3N3aXRjaCgwfGUpe2Nhc2Ugci5PUFMuc2F2ZTp0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7YnJlYWs7Y2FzZSByLk9QUy5yZXN0b3JlOnRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTticmVhaztjYXNlIHIuT1BTLnRyYW5zZm9ybTp0aGlzLnN0YXRlTWFuYWdlci50cmFuc2Zvcm0odCl9fX10LkV2YWx1YXRvclByZXByb2Nlc3Nvcj1FdmFsdWF0b3JQcmVwcm9jZXNzb3J9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5JZGVudGl0eUNNYXA9dC5DTWFwRmFjdG9yeT10LkNNYXA9dm9pZCAwO3ZhciByPWEoMiksaT1hKDQpLG49YSg1KSxzPWEoMTUpLG89YSgxNiksYz1hKDMpLGw9YSg4KTtjb25zdCBoPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sdT0yKioyNC0xO2NsYXNzIENNYXB7Y29uc3RydWN0b3IoZT0hMSl7dGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXTt0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wO3RoaXMuX21hcD1bXTt0aGlzLm5hbWU9IiI7dGhpcy52ZXJ0aWNhbD0hMTt0aGlzLnVzZUNNYXA9bnVsbDt0aGlzLmJ1aWx0SW5DTWFwPWV9YWRkQ29kZXNwYWNlUmFuZ2UoZSx0LGEpe3RoaXMuY29kZXNwYWNlUmFuZ2VzW2UtMV0ucHVzaCh0LGEpO3RoaXMubnVtQ29kZXNwYWNlUmFuZ2VzKyt9bWFwQ2lkUmFuZ2UoZSx0LGEpe2lmKHQtZT51KXRocm93IG5ldyBFcnJvcigibWFwQ2lkUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1hKyt9bWFwQmZSYW5nZShlLHQsYSl7aWYodC1lPnUpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IHI9YS5sZW5ndGgtMTtmb3IoO2U8PXQ7KXt0aGlzLl9tYXBbZSsrXT1hO2NvbnN0IHQ9YS5jaGFyQ29kZUF0KHIpKzE7dD4yNTU/YT1hLnN1YnN0cmluZygwLHItMSkrU3RyaW5nLmZyb21DaGFyQ29kZShhLmNoYXJDb2RlQXQoci0xKSsxKSsiXDAiOmE9YS5zdWJzdHJpbmcoMCxyKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX1tYXBCZlJhbmdlVG9BcnJheShlLHQsYSl7aWYodC1lPnUpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtjb25zdCByPWEubGVuZ3RoO2xldCBpPTA7Zm9yKDtlPD10JiZpPHI7KXt0aGlzLl9tYXBbZV09YVtpKytdOysrZX19bWFwT25lKGUsdCl7dGhpcy5fbWFwW2VdPXR9bG9va3VwKGUpe3JldHVybiB0aGlzLl9tYXBbZV19Y29udGFpbnMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1mb3JFYWNoKGUpe2NvbnN0IHQ9dGhpcy5fbWFwLGE9dC5sZW5ndGg7aWYoYTw9NjU1MzYpZm9yKGxldCByPTA7cjxhO3IrKyl2b2lkIDAhPT10W3JdJiZlKHIsdFtyXSk7ZWxzZSBmb3IoY29uc3QgYSBpbiB0KWUoYSx0W2FdKX1jaGFyQ29kZU9mKGUpe2NvbnN0IHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcihjb25zdCBhIGluIHQpaWYodFthXT09PWUpcmV0dXJuIDB8YTtyZXR1cm4tMX1nZXRNYXAoKXtyZXR1cm4gdGhpcy5fbWFwfXJlYWRDaGFyQ29kZShlLHQsYSl7bGV0IHI9MDtjb25zdCBpPXRoaXMuY29kZXNwYWNlUmFuZ2VzO2ZvcihsZXQgbj0wLHM9aS5sZW5ndGg7bjxzO24rKyl7cj0ocjw8OHxlLmNoYXJDb2RlQXQodCtuKSk+Pj4wO2NvbnN0IHM9aVtuXTtmb3IobGV0IGU9MCx0PXMubGVuZ3RoO2U8dDspe2NvbnN0IHQ9c1tlKytdLGk9c1tlKytdO2lmKHI+PXQmJnI8PWkpe2EuY2hhcmNvZGU9cjthLmxlbmd0aD1uKzE7cmV0dXJufX19YS5jaGFyY29kZT0wO2EubGVuZ3RoPTF9Z2V0Q2hhckNvZGVMZW5ndGgoZSl7Y29uc3QgdD10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGE9MCxyPXQubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9dFthXTtmb3IobGV0IHQ9MCxpPXIubGVuZ3RoO3Q8aTspe2NvbnN0IGk9clt0KytdLG49clt0KytdO2lmKGU+PWkmJmU8PW4pcmV0dXJuIGErMX19cmV0dXJuIDF9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWdldCBpc0lkZW50aXR5Q01hcCgpe2lmKCJJZGVudGl0eS1IIiE9PXRoaXMubmFtZSYmIklkZW50aXR5LVYiIT09dGhpcy5uYW1lKXJldHVybiExO2lmKDY1NTM2IT09dGhpcy5fbWFwLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPDY1NTM2O2UrKylpZih0aGlzLl9tYXBbZV0hPT1lKXJldHVybiExO3JldHVybiEwfX10LkNNYXA9Q01hcDtjbGFzcyBJZGVudGl0eUNNYXAgZXh0ZW5kcyBDTWFwe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKTt0aGlzLnZlcnRpY2FsPWU7dGhpcy5hZGRDb2Rlc3BhY2VSYW5nZSh0LDAsNjU1MzUpfW1hcENpZFJhbmdlKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlIil9bWFwQmZSYW5nZShlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlIil9bWFwQmZSYW5nZVRvQXJyYXkoZSx0LGEpeygwLHIudW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXkiKX1tYXBPbmUoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZSIpfWxvb2t1cChlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTp2b2lkIDB9Y29udGFpbnMoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1fWZvckVhY2goZSl7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWUodCx0KX1jaGFyQ29kZU9mKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOi0xfWdldE1hcCgpe2NvbnN0IGU9bmV3IEFycmF5KDY1NTM2KTtmb3IobGV0IHQ9MDt0PD02NTUzNTt0KyspZVt0XT10O3JldHVybiBlfWdldCBsZW5ndGgoKXtyZXR1cm4gNjU1MzZ9Z2V0IGlzSWRlbnRpdHlDTWFwKCl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgYWNjZXNzIC5pc0lkZW50aXR5Q01hcCIpfX10LklkZW50aXR5Q01hcD1JZGVudGl0eUNNYXA7ZnVuY3Rpb24gc3RyVG9JbnQoZSl7bGV0IHQ9MDtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0PXQ8PDh8ZS5jaGFyQ29kZUF0KGEpO3JldHVybiB0Pj4+MH1mdW5jdGlvbiBleHBlY3RTdHJpbmcoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIGV4cGVjdEludChlKXtpZighTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIGludC4iKX1mdW5jdGlvbiBwYXJzZUJmQ2hhcihlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09aS5FT0YpYnJlYWs7aWYoKDAsaS5pc0NtZCkoYSwiZW5kYmZjaGFyIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3Qgbj1hO2UubWFwT25lKHIsbil9fWZ1bmN0aW9uIHBhcnNlQmZSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09aS5FT0YpYnJlYWs7aWYoKDAsaS5pc0NtZCkoYSwiZW5kYmZyYW5nZSIpKXJldHVybjtleHBlY3RTdHJpbmcoYSk7Y29uc3Qgcj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IG49c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2lmKE51bWJlci5pc0ludGVnZXIoYSl8fCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3QgdD1OdW1iZXIuaXNJbnRlZ2VyKGEpP1N0cmluZy5mcm9tQ2hhckNvZGUoYSk6YTtlLm1hcEJmUmFuZ2UocixuLHQpfWVsc2V7aWYoISgwLGkuaXNDbWQpKGEsIlsiKSlicmVhazt7YT10LmdldE9iaigpO2NvbnN0IHM9W107Zm9yKDshKDAsaS5pc0NtZCkoYSwiXSIpJiZhIT09aS5FT0Y7KXtzLnB1c2goYSk7YT10LmdldE9iaigpfWUubWFwQmZSYW5nZVRvQXJyYXkocixuLHMpfX19dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1pLkVPRilicmVhaztpZigoMCxpLmlzQ21kKShhLCJlbmRjaWRjaGFyIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RJbnQoYSk7Y29uc3Qgbj1hO2UubWFwT25lKHIsbil9fWZ1bmN0aW9uIHBhcnNlQ2lkUmFuZ2UoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PWkuRU9GKWJyZWFrO2lmKCgwLGkuaXNDbWQpKGEsImVuZGNpZHJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3Qgbj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0SW50KGEpO2NvbnN0IHM9YTtlLm1hcENpZFJhbmdlKHIsbixzKX19ZnVuY3Rpb24gcGFyc2VDb2Rlc3BhY2VSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09aS5FT0YpYnJlYWs7aWYoKDAsaS5pc0NtZCkoYSwiZW5kY29kZXNwYWNlcmFuZ2UiKSlyZXR1cm47aWYoInN0cmluZyIhPXR5cGVvZiBhKWJyZWFrO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2lmKCJzdHJpbmciIT10eXBlb2YgYSlicmVhaztjb25zdCBuPXN0clRvSW50KGEpO2UuYWRkQ29kZXNwYWNlUmFuZ2UoYS5sZW5ndGgscixuKX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBjb2Rlc3BhY2UgcmFuZ2UuIil9ZnVuY3Rpb24gcGFyc2VXTW9kZShlLHQpe2NvbnN0IGE9dC5nZXRPYmooKTtOdW1iZXIuaXNJbnRlZ2VyKGEpJiYoZS52ZXJ0aWNhbD0hIWEpfWZ1bmN0aW9uIHBhcnNlQ01hcE5hbWUoZSx0KXtjb25zdCBhPXQuZ2V0T2JqKCk7YSBpbnN0YW5jZW9mIGkuTmFtZSYmKGUubmFtZT1hLm5hbWUpfWFzeW5jIGZ1bmN0aW9uIHBhcnNlQ01hcChlLHQsYSxuKXtsZXQgcyxvO2U6Zm9yKDs7KXRyeXtjb25zdCBhPXQuZ2V0T2JqKCk7aWYoYT09PWkuRU9GKWJyZWFrO2lmKGEgaW5zdGFuY2VvZiBpLk5hbWUpeyJXTW9kZSI9PT1hLm5hbWU/cGFyc2VXTW9kZShlLHQpOiJDTWFwTmFtZSI9PT1hLm5hbWUmJnBhcnNlQ01hcE5hbWUoZSx0KTtzPWF9ZWxzZSBpZihhIGluc3RhbmNlb2YgaS5DbWQpc3dpdGNoKGEuY21kKXtjYXNlImVuZGNtYXAiOmJyZWFrIGU7Y2FzZSJ1c2VjbWFwIjpzIGluc3RhbmNlb2YgaS5OYW1lJiYobz1zLm5hbWUpO2JyZWFrO2Nhc2UiYmVnaW5jb2Rlc3BhY2VyYW5nZSI6cGFyc2VDb2Rlc3BhY2VSYW5nZShlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZmNoYXIiOnBhcnNlQmZDaGFyKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmNpZGNoYXIiOnBhcnNlQ2lkQ2hhcihlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZnJhbmdlIjpwYXJzZUJmUmFuZ2UoZSx0KTticmVhaztjYXNlImJlZ2luY2lkcmFuZ2UiOnBhcnNlQ2lkUmFuZ2UoZSx0KX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGMuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxyLndhcm4pKCJJbnZhbGlkIGNNYXAgZGF0YTogIitlKTtjb250aW51ZX0hbiYmbyYmKG49byk7cmV0dXJuIG4/ZXh0ZW5kQ01hcChlLGEsbik6ZX1hc3luYyBmdW5jdGlvbiBleHRlbmRDTWFwKGUsdCxhKXtlLnVzZUNNYXA9YXdhaXQgY3JlYXRlQnVpbHRJbkNNYXAoYSx0KTtpZigwPT09ZS5udW1Db2Rlc3BhY2VSYW5nZXMpe2NvbnN0IHQ9ZS51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyllLmNvZGVzcGFjZVJhbmdlc1thXT10W2FdLnNsaWNlKCk7ZS5udW1Db2Rlc3BhY2VSYW5nZXM9ZS51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlc31lLnVzZUNNYXAuZm9yRWFjaCgoZnVuY3Rpb24odCxhKXtlLmNvbnRhaW5zKHQpfHxlLm1hcE9uZSh0LGUudXNlQ01hcC5sb29rdXAodCkpfSkpO3JldHVybiBlfWFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJ1aWx0SW5DTWFwKGUsdCl7aWYoIklkZW50aXR5LUgiPT09ZSlyZXR1cm4gbmV3IElkZW50aXR5Q01hcCghMSwyKTtpZigiSWRlbnRpdHktViI9PT1lKXJldHVybiBuZXcgSWRlbnRpdHlDTWFwKCEwLDIpO2lmKCFoLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBDTWFwIG5hbWU6ICIrZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTtjb25zdHtjTWFwRGF0YTphLGNvbXByZXNzaW9uVHlwZTppfT1hd2FpdCB0KGUpLG49bmV3IENNYXAoITApO2lmKGk9PT1yLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZKXJldHVybihuZXcgcy5CaW5hcnlDTWFwUmVhZGVyKS5wcm9jZXNzKGEsbiwoZT0+ZXh0ZW5kQ01hcChuLHQsZSkpKTtpZihpPT09ci5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2NvbnN0IGU9bmV3IG8uTGV4ZXIobmV3IGwuU3RyZWFtKGEpKTtyZXR1cm4gcGFyc2VDTWFwKG4sZSx0LG51bGwpfXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDTWFwICJjb21wcmVzc2lvblR5cGUiIHZhbHVlOiAke2l9YCl9dC5DTWFwRmFjdG9yeT1jbGFzcyBDTWFwRmFjdG9yeXtzdGF0aWMgYXN5bmMgY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dCx1c2VDTWFwOmF9KXtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXJldHVybiBjcmVhdGVCdWlsdEluQ01hcChlLm5hbWUsdCk7aWYoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSl7Y29uc3Qgcj1hd2FpdCBwYXJzZUNNYXAobmV3IENNYXAsbmV3IG8uTGV4ZXIoZSksdCxhKTtyZXR1cm4gci5pc0lkZW50aXR5Q01hcD9jcmVhdGVCdWlsdEluQ01hcChyLm5hbWUsdCk6cn10aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nIHJlcXVpcmVkLiIpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CaW5hcnlDTWFwUmVhZGVyPXZvaWQgMDt2YXIgcj1hKDIpO2Z1bmN0aW9uIGhleFRvSW50KGUsdCl7bGV0IGE9MDtmb3IobGV0IHI9MDtyPD10O3IrKylhPWE8PDh8ZVtyXTtyZXR1cm4gYT4+PjB9ZnVuY3Rpb24gaGV4VG9TdHIoZSx0KXtyZXR1cm4gMT09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0pOjM9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdLGVbMl0sZVszXSk6U3RyaW5nLmZyb21DaGFyQ29kZSguLi5lLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gYWRkSGV4KGUsdCxhKXtsZXQgcj0wO2ZvcihsZXQgaT1hO2k+PTA7aS0tKXtyKz1lW2ldK3RbaV07ZVtpXT0yNTUmcjtyPj49OH19ZnVuY3Rpb24gaW5jSGV4KGUsdCl7bGV0IGE9MTtmb3IobGV0IHI9dDtyPj0wJiZhPjA7ci0tKXthKz1lW3JdO2Vbcl09MjU1JmE7YT4+PTh9fWNvbnN0IGk9MTY7Y2xhc3MgQmluYXJ5Q01hcFN0cmVhbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmJ1ZmZlcj1lO3RoaXMucG9zPTA7dGhpcy5lbmQ9ZS5sZW5ndGg7dGhpcy50bXBCdWY9bmV3IFVpbnQ4QXJyYXkoMTkpfXJlYWRCeXRlKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX1yZWFkTnVtYmVyKCl7bGV0IGUsdD0wO2Rve2NvbnN0IGE9dGhpcy5yZWFkQnl0ZSgpO2lmKGE8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTtlPSEoMTI4JmEpO3Q9dDw8N3wxMjcmYX13aGlsZSghZSk7cmV0dXJuIHR9cmVhZFNpZ25lZCgpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCk7cmV0dXJuIDEmZT9+KGU+Pj4xKTplPj4+MX1yZWFkSGV4KGUsdCl7ZS5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MsdGhpcy5wb3MrdCsxKSk7dGhpcy5wb3MrPXQrMX1yZWFkSGV4TnVtYmVyKGUsdCl7bGV0IGE7Y29uc3QgaT10aGlzLnRtcEJ1ZjtsZXQgbj0wO2Rve2NvbnN0IGU9dGhpcy5yZWFkQnl0ZSgpO2lmKGU8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTthPSEoMTI4JmUpO2lbbisrXT0xMjcmZX13aGlsZSghYSk7bGV0IHM9dCxvPTAsYz0wO2Zvcig7cz49MDspe2Zvcig7Yzw4JiZpLmxlbmd0aD4wOyl7b3w9aVstLW5dPDxjO2MrPTd9ZVtzXT0yNTUmbztzLS07bz4+PTg7Yy09OH19cmVhZEhleFNpZ25lZChlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2NvbnN0IGE9MSZlW3RdPzI1NTowO2xldCByPTA7Zm9yKGxldCBpPTA7aTw9dDtpKyspe3I9KDEmcik8PDh8ZVtpXTtlW2ldPXI+PjFeYX19cmVhZFN0cmluZygpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCksdD1uZXcgQXJyYXkoZSk7Zm9yKGxldCBhPTA7YTxlO2ErKyl0W2FdPXRoaXMucmVhZE51bWJlcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLnQpfX10LkJpbmFyeUNNYXBSZWFkZXI9Y2xhc3MgQmluYXJ5Q01hcFJlYWRlcnthc3luYyBwcm9jZXNzKGUsdCxhKXtjb25zdCByPW5ldyBCaW5hcnlDTWFwU3RyZWFtKGUpLG49ci5yZWFkQnl0ZSgpO3QudmVydGljYWw9ISEoMSZuKTtsZXQgcz1udWxsO2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkoaSksYz1uZXcgVWludDhBcnJheShpKSxsPW5ldyBVaW50OEFycmF5KGkpLGg9bmV3IFVpbnQ4QXJyYXkoaSksdT1uZXcgVWludDhBcnJheShpKTtsZXQgZCxmO2Zvcig7KGY9ci5yZWFkQnl0ZSgpKT49MDspe2NvbnN0IGU9Zj4+NTtpZig3PT09ZSl7c3dpdGNoKDMxJmYpe2Nhc2UgMDpyLnJlYWRTdHJpbmcoKTticmVhaztjYXNlIDE6cz1yLnJlYWRTdHJpbmcoKX1jb250aW51ZX1jb25zdCBhPSEhKDE2JmYpLG49MTUmZjtpZihuKzE+aSl0aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjb25zdCBnPTEscD1yLnJlYWROdW1iZXIoKTtzd2l0Y2goZSl7Y2FzZSAwOnIucmVhZEhleChvLG4pO3IucmVhZEhleE51bWJlcihjLG4pO2FkZEhleChjLG8sbik7dC5hZGRDb2Rlc3BhY2VSYW5nZShuKzEsaGV4VG9JbnQobyxuKSxoZXhUb0ludChjLG4pKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxuKTtyLnJlYWRIZXhOdW1iZXIobyxuKTthZGRIZXgobyxjLG4pO3IucmVhZEhleE51bWJlcihjLG4pO2FkZEhleChjLG8sbik7dC5hZGRDb2Rlc3BhY2VSYW5nZShuKzEsaGV4VG9JbnQobyxuKSxoZXhUb0ludChjLG4pKX1icmVhaztjYXNlIDE6ci5yZWFkSGV4KG8sbik7ci5yZWFkSGV4TnVtYmVyKGMsbik7YWRkSGV4KGMsbyxuKTtyLnJlYWROdW1iZXIoKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxuKTtyLnJlYWRIZXhOdW1iZXIobyxuKTthZGRIZXgobyxjLG4pO3IucmVhZEhleE51bWJlcihjLG4pO2FkZEhleChjLG8sbik7ci5yZWFkTnVtYmVyKCl9YnJlYWs7Y2FzZSAyOnIucmVhZEhleChsLG4pO2Q9ci5yZWFkTnVtYmVyKCk7dC5tYXBPbmUoaGV4VG9JbnQobCxuKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgobCxuKTtpZighYSl7ci5yZWFkSGV4TnVtYmVyKHUsbik7YWRkSGV4KGwsdSxuKX1kPXIucmVhZFNpZ25lZCgpKyhkKzEpO3QubWFwT25lKGhleFRvSW50KGwsbiksZCl9YnJlYWs7Y2FzZSAzOnIucmVhZEhleChvLG4pO3IucmVhZEhleE51bWJlcihjLG4pO2FkZEhleChjLG8sbik7ZD1yLnJlYWROdW1iZXIoKTt0Lm1hcENpZFJhbmdlKGhleFRvSW50KG8sbiksaGV4VG9JbnQoYyxuKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxuKTtpZihhKW8uc2V0KGMpO2Vsc2V7ci5yZWFkSGV4TnVtYmVyKG8sbik7YWRkSGV4KG8sYyxuKX1yLnJlYWRIZXhOdW1iZXIoYyxuKTthZGRIZXgoYyxvLG4pO2Q9ci5yZWFkTnVtYmVyKCk7dC5tYXBDaWRSYW5nZShoZXhUb0ludChvLG4pLGhleFRvSW50KGMsbiksZCl9YnJlYWs7Y2FzZSA0OnIucmVhZEhleChsLGcpO3IucmVhZEhleChoLG4pO3QubWFwT25lKGhleFRvSW50KGwsZyksaGV4VG9TdHIoaCxuKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGwsZyk7aWYoIWEpe3IucmVhZEhleE51bWJlcih1LGcpO2FkZEhleChsLHUsZyl9aW5jSGV4KGgsbik7ci5yZWFkSGV4U2lnbmVkKHUsbik7YWRkSGV4KGgsdSxuKTt0Lm1hcE9uZShoZXhUb0ludChsLGcpLGhleFRvU3RyKGgsbikpfWJyZWFrO2Nhc2UgNTpyLnJlYWRIZXgobyxnKTtyLnJlYWRIZXhOdW1iZXIoYyxnKTthZGRIZXgoYyxvLGcpO3IucmVhZEhleChoLG4pO3QubWFwQmZSYW5nZShoZXhUb0ludChvLGcpLGhleFRvSW50KGMsZyksaGV4VG9TdHIoaCxuKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGMsZyk7aWYoYSlvLnNldChjKTtlbHNle3IucmVhZEhleE51bWJlcihvLGcpO2FkZEhleChvLGMsZyl9ci5yZWFkSGV4TnVtYmVyKGMsZyk7YWRkSGV4KGMsbyxnKTtyLnJlYWRIZXgoaCxuKTt0Lm1hcEJmUmFuZ2UoaGV4VG9JbnQobyxnKSxoZXhUb0ludChjLGcpLGhleFRvU3RyKGgsbikpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7ZX1gKX19cmV0dXJuIHM/YShzKTp0fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QYXJzZXI9dC5MaW5lYXJpemF0aW9uPXQuTGV4ZXI9dm9pZCAwO3ZhciByPWEoMiksaT1hKDQpLG49YSgzKSxzPWEoOCksbz1hKDE3KSxjPWEoMTkpLGw9YSgyMCksaD1hKDIyKSx1PWEoMjMpLGQ9YSgyNiksZj1hKDI5KSxnPWEoMzEpLHA9YSgzMiksbT1hKDMzKTtjbGFzcyBQYXJzZXJ7Y29uc3RydWN0b3Ioe2xleGVyOmUseHJlZjp0LGFsbG93U3RyZWFtczphPSExLHJlY292ZXJ5TW9kZTpyPSExfSl7dGhpcy5sZXhlcj1lO3RoaXMueHJlZj10O3RoaXMuYWxsb3dTdHJlYW1zPWE7dGhpcy5yZWNvdmVyeU1vZGU9cjt0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9pbWFnZUlkPTA7dGhpcy5yZWZpbGwoKX1yZWZpbGwoKXt0aGlzLmJ1ZjE9dGhpcy5sZXhlci5nZXRPYmooKTt0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKX1zaGlmdCgpe2lmKHRoaXMuYnVmMiBpbnN0YW5jZW9mIGkuQ21kJiYiSUQiPT09dGhpcy5idWYyLmNtZCl7dGhpcy5idWYxPXRoaXMuYnVmMjt0aGlzLmJ1ZjI9bnVsbH1lbHNle3RoaXMuYnVmMT10aGlzLmJ1ZjI7dGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fXRyeVNoaWZ0KCl7dHJ5e3RoaXMuc2hpZnQoKTtyZXR1cm4hMH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiExfX1nZXRPYmooZT1udWxsKXtjb25zdCB0PXRoaXMuYnVmMTt0aGlzLnNoaWZ0KCk7aWYodCBpbnN0YW5jZW9mIGkuQ21kKXN3aXRjaCh0LmNtZCl7Y2FzZSJCSSI6cmV0dXJuIHRoaXMubWFrZUlubGluZUltYWdlKGUpO2Nhc2UiWyI6Y29uc3QgYT1bXTtmb3IoOyEoMCxpLmlzQ21kKSh0aGlzLmJ1ZjEsIl0iKSYmdGhpcy5idWYxIT09aS5FT0Y7KWEucHVzaCh0aGlzLmdldE9iaihlKSk7aWYodGhpcy5idWYxPT09aS5FT0Ype2lmKHRoaXMucmVjb3ZlcnlNb2RlKXJldHVybiBhO3Rocm93IG5ldyBuLlBhcnNlckVPRkV4Y2VwdGlvbigiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LiIpfXRoaXMuc2hpZnQoKTtyZXR1cm4gYTtjYXNlIjw8Ijpjb25zdCBzPW5ldyBpLkRpY3QodGhpcy54cmVmKTtmb3IoOyEoMCxpLmlzQ21kKSh0aGlzLmJ1ZjEsIj4+IikmJnRoaXMuYnVmMSE9PWkuRU9GOyl7aWYoISh0aGlzLmJ1ZjEgaW5zdGFuY2VvZiBpLk5hbWUpKXsoMCxyLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO3RoaXMuc2hpZnQoKTtjb250aW51ZX1jb25zdCB0PXRoaXMuYnVmMS5uYW1lO3RoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1pLkVPRilicmVhaztzLnNldCh0LHRoaXMuZ2V0T2JqKGUpKX1pZih0aGlzLmJ1ZjE9PT1pLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHM7dGhyb3cgbmV3IG4uUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1pZigoMCxpLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpKXJldHVybiB0aGlzLmFsbG93U3RyZWFtcz90aGlzLm1ha2VTdHJlYW0ocyxlKTpzO3RoaXMuc2hpZnQoKTtyZXR1cm4gcztkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsaS5pc0NtZCkodGhpcy5idWYyLCJSIikpe2NvbnN0IGU9aS5SZWYuZ2V0KHQsdGhpcy5idWYxKTt0aGlzLnNoaWZ0KCk7dGhpcy5zaGlmdCgpO3JldHVybiBlfXJldHVybiB0fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmZT9lLmRlY3J5cHRTdHJpbmcodCk6dH1maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKXtjb25zdHtrbm93bkNvbW1hbmRzOnR9PXRoaXMubGV4ZXIsYT1lLnBvcztsZXQgbyxjLGw9MDtmb3IoOy0xIT09KG89ZS5nZXRCeXRlKCkpOylpZigwPT09bClsPTY5PT09bz8xOjA7ZWxzZSBpZigxPT09bClsPTczPT09bz8yOjA7ZWxzZSBpZigzMj09PW98fDEwPT09b3x8MTM9PT1vKXtjPWUucG9zO2NvbnN0IGE9ZS5wZWVrQnl0ZXMoMTUpLG49YS5sZW5ndGg7aWYoMD09PW4pYnJlYWs7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7bz1hW2VdO2lmKCgwIT09b3x8MD09PWFbZSsxXSkmJigxMCE9PW8mJjEzIT09byYmKG88MzJ8fG8+MTI3KSkpe2w9MDticmVha319aWYoMiE9PWwpY29udGludWU7aWYoIXQpeygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1jb25zdCBoPW5ldyBMZXhlcihuZXcgcy5TdHJlYW0oYS5zbGljZSgpKSx0KTtoLl9oZXhTdHJpbmdXYXJuPSgpPT57fTtsZXQgdT0wO2Zvcig7Oyl7Y29uc3QgZT1oLmdldE9iaigpO2lmKGU9PT1pLkVPRil7bD0wO2JyZWFrfWlmKGUgaW5zdGFuY2VvZiBpLkNtZCl7Y29uc3QgYT10W2UuY21kXTtpZighYSl7bD0wO2JyZWFrfWlmKGEudmFyaWFibGVBcmdzP3U8PWEubnVtQXJnczp1PT09YS5udW1BcmdzKWJyZWFrO3U9MH1lbHNlIHUrK31pZigyPT09bClicmVha31lbHNlIGw9MDtpZigtMT09PW8peygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTtpZihjKXsoMCxyLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpO2Uuc2tpcCgtKGUucG9zLWMpKX19bGV0IGg9NDtlLnNraXAoLWgpO289ZS5wZWVrQnl0ZSgpO2Uuc2tpcChoKTsoMCxuLmlzV2hpdGVTcGFjZSkobyl8fGgtLTtyZXR1cm4gZS5wb3MtaC1hfWZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgYSxpLG49ITE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09YSl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzpuPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0Omk9ZS5nZXRVaW50MTYoKTtpPjI/ZS5za2lwKGktMik6ZS5za2lwKC0yKX1pZihuKWJyZWFrfWNvbnN0IHM9ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7ZS5za2lwKC1zKTtyZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKX10aGlzLmlubGluZVN0cmVhbVNraXBFSShlKTtyZXR1cm4gc31maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBhO2Zvcig7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PWEpe2NvbnN0IHQ9ZS5wb3M7YT1lLnBlZWtCeXRlKCk7Zm9yKDsoMCxuLmlzV2hpdGVTcGFjZSkoYSk7KXtlLnNraXAoKTthPWUucGVla0J5dGUoKX1pZig2Mj09PWEpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IGk9ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtaSk7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIGl9ZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKSYmNjIhPT1hOyk7Y29uc3QgaT1lLnBvcy10O2lmKC0xPT09YSl7KDAsci53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtaSk7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIGl9aW5saW5lU3RyZWFtU2tpcEVJKGUpe2xldCB0LGE9MDtmb3IoOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YSlhPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YSlhPTczPT09dD8yOjA7ZWxzZSBpZigyPT09YSlicmVha31tYWtlSW5saW5lSW1hZ2UoZSl7Y29uc3QgdD10aGlzLmxleGVyLGE9dC5zdHJlYW0sbj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBzO2Zvcig7ISgwLGkuaXNDbWQpKHRoaXMuYnVmMSwiSUQiKSYmdGhpcy5idWYxIT09aS5FT0Y7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkRpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO2NvbnN0IHQ9dGhpcy5idWYxLm5hbWU7dGhpcy5zaGlmdCgpO2lmKHRoaXMuYnVmMT09PWkuRU9GKWJyZWFrO25bdF09dGhpcy5nZXRPYmooZSl9LTEhPT10LmJlZ2luSW5saW5lSW1hZ2VQb3MmJihzPWEucG9zLXQuYmVnaW5JbmxpbmVJbWFnZVBvcyk7Y29uc3Qgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZihuLkZ8fG4uRmlsdGVyKTtsZXQgYztpZihvIGluc3RhbmNlb2YgaS5OYW1lKWM9by5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3QgZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvWzBdKTtlIGluc3RhbmNlb2YgaS5OYW1lJiYoYz1lLm5hbWUpfWNvbnN0IGw9YS5wb3M7bGV0IGgsdTtzd2l0Y2goYyl7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpoPXRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChhKTticmVhaztjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpoPXRoaXMuZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7Y2FzZSJBSHgiOmNhc2UiQVNDSUlIZXhEZWNvZGUiOmg9dGhpcy5maW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7ZGVmYXVsdDpoPXRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoYSl9aWYoaDwxZTMmJnM+MCl7Y29uc3QgZT1hLnBvczthLnBvcz10LmJlZ2luSW5saW5lSW1hZ2VQb3M7dT1mdW5jdGlvbiBnZXRJbmxpbmVJbWFnZUNhY2hlS2V5KGUpe2NvbnN0IHQ9W10sYT1lLmxlbmd0aDtsZXQgcj0wO2Zvcig7cjxhLTE7KXQucHVzaChlW3IrK108PDh8ZVtyKytdKTtyPGEmJnQucHVzaChlW3JdKTtyZXR1cm4gYSsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpfShhLmdldEJ5dGVzKHMraCkpO2EucG9zPWU7Y29uc3Qgcj10aGlzLmltYWdlQ2FjaGVbdV07aWYodm9pZCAwIT09cil7dGhpcy5idWYyPWkuQ21kLmdldCgiRUkiKTt0aGlzLnNoaWZ0KCk7ci5yZXNldCgpO3JldHVybiByfX1jb25zdCBkPW5ldyBpLkRpY3QodGhpcy54cmVmKTtmb3IoY29uc3QgZSBpbiBuKWQuc2V0KGUsbltlXSk7bGV0IGY9YS5tYWtlU3ViU3RyZWFtKGwsaCxkKTtlJiYoZj1lLmNyZWF0ZVN0cmVhbShmLGgpKTtmPXRoaXMuZmlsdGVyKGYsZCxoKTtmLmRpY3Q9ZDtpZih2b2lkIDAhPT11KXtmLmNhY2hlS2V5PSJpbmxpbmVfaW1nXyIrICsrdGhpcy5faW1hZ2VJZDt0aGlzLmltYWdlQ2FjaGVbdV09Zn10aGlzLmJ1ZjI9aS5DbWQuZ2V0KCJFSSIpO3RoaXMuc2hpZnQoKTtyZXR1cm4gZn1fZmluZFN0cmVhbUxlbmd0aChlLHQpe2NvbnN0e3N0cmVhbTphfT10aGlzLmxleGVyO2EucG9zPWU7Y29uc3Qgcj10Lmxlbmd0aDtmb3IoO2EucG9zPGEuZW5kOyl7Y29uc3QgaT1hLnBlZWtCeXRlcygyMDQ4KSxuPWkubGVuZ3RoLXI7aWYobjw9MClicmVhaztsZXQgcz0wO2Zvcig7czxuOyl7bGV0IG49MDtmb3IoO248ciYmaVtzK25dPT09dFtuXTspbisrO2lmKG4+PXIpe2EucG9zKz1zO3JldHVybiBhLnBvcy1lfXMrK31hLnBvcys9bn1yZXR1cm4tMX1tYWtlU3RyZWFtKGUsdCl7Y29uc3QgYT10aGlzLmxleGVyO2xldCBzPWEuc3RyZWFtO2Euc2tpcFRvTmV4dExpbmUoKTtjb25zdCBvPXMucG9zLTE7bGV0IGM9ZS5nZXQoIkxlbmd0aCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXsoMCxyLmluZm8pKGBCYWQgbGVuZ3RoICIke2MmJmMudG9TdHJpbmcoKX0iIGluIHN0cmVhbS5gKTtjPTB9cy5wb3M9bytjO2EubmV4dENoYXIoKTtpZih0aGlzLnRyeVNoaWZ0KCkmJigwLGkuaXNDbWQpKHRoaXMuYnVmMiwiZW5kc3RyZWFtIikpdGhpcy5zaGlmdCgpO2Vsc2V7Y29uc3QgZT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pO2xldCB0PXRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgobyxlKTtpZih0PDApe2NvbnN0IGE9MTtmb3IobGV0IGk9MTtpPD1hO2krKyl7Y29uc3QgYT1lLmxlbmd0aC1pLGM9ZS5zbGljZSgwLGEpLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGMpO2lmKGw+PTApe2NvbnN0IGU9cy5wZWVrQnl0ZXMoYSsxKVthXTtpZighKDAsbi5pc1doaXRlU3BhY2UpKGUpKWJyZWFrOygwLHIuaW5mbykoYEZvdW5kICIkeygwLHIuYnl0ZXNUb1N0cmluZykoYyl9IiB3aGVuIHNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuYCk7dD1sO2JyZWFrfX1pZih0PDApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz10O2EubmV4dENoYXIoKTt0aGlzLnNoaWZ0KCk7dGhpcy5zaGlmdCgpfXRoaXMuc2hpZnQoKTtzPXMubWFrZVN1YlN0cmVhbShvLGMsZSk7dCYmKHM9dC5jcmVhdGVTdHJlYW0ocyxjKSk7cz10aGlzLmZpbHRlcihzLGUsYyk7cy5kaWN0PWU7cmV0dXJuIHN9ZmlsdGVyKGUsdCxhKXtsZXQgbj10LmdldCgiRiIsIkZpbHRlciIpLHM9dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihuIGluc3RhbmNlb2YgaS5OYW1lKXtBcnJheS5pc0FycmF5KHMpJiYoMCxyLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKTtyZXR1cm4gdGhpcy5tYWtlRmlsdGVyKGUsbi5uYW1lLGEscyl9bGV0IG89YTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCB0PW4sYT1zO2ZvcihsZXQgYz0wLGw9dC5sZW5ndGg7YzxsOysrYyl7bj10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2NdKTtpZighKG4gaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBCYWQgZmlsdGVyIG5hbWUgIiR7bn0iYCk7cz1udWxsO0FycmF5LmlzQXJyYXkoYSkmJmMgaW4gYSYmKHM9dGhpcy54cmVmLmZldGNoSWZSZWYoYVtjXSkpO2U9dGhpcy5tYWtlRmlsdGVyKGUsbi5uYW1lLG8scyk7bz1udWxsfX1yZXR1cm4gZX1tYWtlRmlsdGVyKGUsdCxhLGkpe2lmKDA9PT1hKXsoMCxyLndhcm4pKGBFbXB0eSAiJHt0fSIgc3RyZWFtLmApO3JldHVybiBuZXcgcy5OdWxsU3RyZWFtfXRyeXtzd2l0Y2godCl7Y2FzZSJGbCI6Y2FzZSJGbGF0ZURlY29kZSI6cmV0dXJuIGk/bmV3IHAuUHJlZGljdG9yU3RyZWFtKG5ldyBoLkZsYXRlU3RyZWFtKGUsYSksYSxpKTpuZXcgaC5GbGF0ZVN0cmVhbShlLGEpO2Nhc2UiTFpXIjpjYXNlIkxaV0RlY29kZSI6bGV0IHQ9MTtpZihpKXtpLmhhcygiRWFybHlDaGFuZ2UiKSYmKHQ9aS5nZXQoIkVhcmx5Q2hhbmdlIikpO3JldHVybiBuZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGcuTFpXU3RyZWFtKGUsYSx0KSxhLGkpfXJldHVybiBuZXcgZy5MWldTdHJlYW0oZSxhLHQpO2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6cmV0dXJuIG5ldyBkLkpwZWdTdHJlYW0oZSxhLGkpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIG5ldyBmLkpweFN0cmVhbShlLGEsaSk7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6cmV0dXJuIG5ldyBvLkFzY2lpODVTdHJlYW0oZSxhKTtjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6cmV0dXJuIG5ldyBjLkFzY2lpSGV4U3RyZWFtKGUsYSk7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiBuZXcgbC5DQ0lUVEZheFN0cmVhbShlLGEsaSk7Y2FzZSJSTCI6Y2FzZSJSdW5MZW5ndGhEZWNvZGUiOnJldHVybiBuZXcgbS5SdW5MZW5ndGhTdHJlYW0oZSxhKTtjYXNlIkpCSUcyRGVjb2RlIjpyZXR1cm4gbmV3IHUuSmJpZzJTdHJlYW0oZSxhLGkpfSgwLHIud2FybikoYEZpbHRlciAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYEludmFsaWQgc3RyZWFtOiAiJHtlfSJgKTtyZXR1cm4gbmV3IHMuTnVsbFN0cmVhbX19fXQuUGFyc2VyPVBhcnNlcjtjb25zdCBiPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB0b0hleERpZ2l0KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9Y2xhc3MgTGV4ZXJ7Y29uc3RydWN0b3IoZSx0PW51bGwpe3RoaXMuc3RyZWFtPWU7dGhpcy5uZXh0Q2hhcigpO3RoaXMuc3RyQnVmPVtdO3RoaXMua25vd25Db21tYW5kcz10O3RoaXMuX2hleFN0cmluZ051bVdhcm49MDt0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M9LTF9bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9cGVla0NoYXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKX1nZXROdW1iZXIoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyLHQ9ITEsYT0wLGk9MDtpZig0NT09PWUpe2k9LTE7ZT10aGlzLm5leHRDaGFyKCk7NDU9PT1lJiYoZT10aGlzLm5leHRDaGFyKCkpfWVsc2UgaWYoNDM9PT1lKXtpPTE7ZT10aGlzLm5leHRDaGFyKCl9aWYoMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSl7YT0xMDtlPXRoaXMubmV4dENoYXIoKX1pZihlPDQ4fHxlPjU3KXtjb25zdCB0PWBJbnZhbGlkIG51bWJlcjogJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSAoY2hhckNvZGUgJHtlfSlgO2lmKCgwLG4uaXNXaGl0ZVNwYWNlKShlKXx8LTE9PT1lKXsoMCxyLmluZm8pKGBMZXhlci5nZXROdW1iZXIgLSAiJHt0fSIuYCk7cmV0dXJuIDB9dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IodCl9aXx8PTE7bGV0IHM9ZS00OCxvPTAsYz0xO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MDspaWYoZT49NDgmJmU8PTU3KXtjb25zdCByPWUtNDg7aWYodClvPTEwKm8rcjtlbHNlezAhPT1hJiYoYSo9MTApO3M9MTAqcytyfX1lbHNlIGlmKDQ2PT09ZSl7aWYoMCE9PWEpYnJlYWs7YT0xfWVsc2UgaWYoNDU9PT1lKSgwLHIud2FybikoIkJhZGx5IGZvcm1hdHRlZCBudW1iZXI6IG1pbnVzIHNpZ24gaW4gdGhlIG1pZGRsZSIpO2Vsc2V7aWYoNjkhPT1lJiYxMDEhPT1lKWJyZWFrO2U9dGhpcy5wZWVrQ2hhcigpO2lmKDQzPT09ZXx8NDU9PT1lKXtjPTQ1PT09ZT8tMToxO3RoaXMubmV4dENoYXIoKX1lbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH0wIT09YSYmKHMvPWEpO3QmJihzKj0xMCoqKGMqbykpO3JldHVybiBpKnN9Z2V0U3RyaW5nKCl7bGV0IGU9MSx0PSExO2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtsZXQgaT10aGlzLm5leHRDaGFyKCk7Zm9yKDs7KXtsZXQgbj0hMTtzd2l0Y2goMHxpKXtjYXNlLTE6KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpO3Q9ITA7YnJlYWs7Y2FzZSA0MDorK2U7YS5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTppZigwPT0tLWUpe3RoaXMubmV4dENoYXIoKTt0PSEwfWVsc2UgYS5wdXNoKCIpIik7YnJlYWs7Y2FzZSA5MjppPXRoaXMubmV4dENoYXIoKTtzd2l0Y2goaSl7Y2FzZS0xOigwLHIud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKTt0PSEwO2JyZWFrO2Nhc2UgMTEwOmEucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDphLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6YS5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6YS5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOmEucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmxldCBlPTE1Jmk7aT10aGlzLm5leHRDaGFyKCk7bj0hMDtpZihpPj00OCYmaTw9NTUpe2U9KGU8PDMpKygxNSZpKTtpPXRoaXMubmV4dENoYXIoKTtpZihpPj00OCYmaTw9NTUpe249ITE7ZT0oZTw8MykrKDE1JmkpfX1hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSl9YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSl9aWYodClicmVhaztufHwoaT10aGlzLm5leHRDaGFyKCkpfXJldHVybiBhLmpvaW4oIiIpfWdldE5hbWUoKXtsZXQgZSx0O2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJiFiW2VdOylpZigzNT09PWUpe2U9dGhpcy5uZXh0Q2hhcigpO2lmKGJbZV0peygwLHIud2FybikoIkxleGVyX2dldE5hbWU6IE5VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuIik7YS5wdXNoKCIjIik7YnJlYWt9Y29uc3QgaT10b0hleERpZ2l0KGUpO2lmKC0xIT09aSl7dD1lO2U9dGhpcy5uZXh0Q2hhcigpO2NvbnN0IG49dG9IZXhEaWdpdChlKTtpZigtMT09PW4peygwLHIud2FybikoYExleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKX0pIGluIGhleGFkZWNpbWFsIG51bWJlci5gKTthLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO2lmKGJbZV0pYnJlYWs7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnRpbnVlfWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGk8PDR8bikpfWVsc2UgYS5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1lbHNlIGEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTthLmxlbmd0aD4xMjcmJigwLHIud2FybikoYE5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJHthLmxlbmd0aH1gKTtyZXR1cm4gaS5OYW1lLmdldChhLmpvaW4oIiIpKX1faGV4U3RyaW5nV2FybihlKXs1IT10aGlzLl9oZXhTdHJpbmdOdW1XYXJuKys/dGhpcy5faGV4U3RyaW5nTnVtV2Fybj41fHwoMCxyLndhcm4pKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtlfWApOigwLHIud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGFkZGl0aW9uYWwgaW52YWxpZCBjaGFyYWN0ZXJzLiIpfWdldEhleFN0cmluZygpe2NvbnN0IGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDtsZXQgdCxhLGk9dGhpcy5jdXJyZW50Q2hhcixuPSEwO3RoaXMuX2hleFN0cmluZ051bVdhcm49MDtmb3IoOzspe2lmKGk8MCl7KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmciKTticmVha31pZig2Mj09PWkpe3RoaXMubmV4dENoYXIoKTticmVha31pZigxIT09YltpXSl7aWYobil7dD10b0hleERpZ2l0KGkpO2lmKC0xPT09dCl7dGhpcy5faGV4U3RyaW5nV2FybihpKTtpPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX19ZWxzZXthPXRvSGV4RGlnaXQoaSk7aWYoLTE9PT1hKXt0aGlzLl9oZXhTdHJpbmdXYXJuKGkpO2k9dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfWUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQ8PDR8YSkpfW49IW47aT10aGlzLm5leHRDaGFyKCl9ZWxzZSBpPXRoaXMubmV4dENoYXIoKX1yZXR1cm4gZS5qb2luKCIiKX1nZXRPYmooKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZih0PDApcmV0dXJuIGkuRU9GO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoMSE9PWJbdF0pYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtjYXNlIDQwOnJldHVybiB0aGlzLmdldFN0cmluZygpO2Nhc2UgNDc6cmV0dXJuIHRoaXMuZ2V0TmFtZSgpO2Nhc2UgOTE6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBpLkNtZC5nZXQoIlsiKTtjYXNlIDkzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gaS5DbWQuZ2V0KCJdIik7Y2FzZSA2MDp0PXRoaXMubmV4dENoYXIoKTtpZig2MD09PXQpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gaS5DbWQuZ2V0KCI8PCIpfXJldHVybiB0aGlzLmdldEhleFN0cmluZygpO2Nhc2UgNjI6dD10aGlzLm5leHRDaGFyKCk7aWYoNjI9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIGkuQ21kLmdldCgiPj4iKX1yZXR1cm4gaS5DbWQuZ2V0KCI+Iik7Y2FzZSAxMjM6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBpLkNtZC5nZXQoInsiKTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIGkuQ21kLmdldCgifSIpO2Nhc2UgNDE6dGhpcy5uZXh0Q2hhcigpO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbGxlZ2FsIGNoYXJhY3RlcjogJHt0fWApfWxldCBhPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7aWYodDwzMnx8dD4xMjcpe2NvbnN0IGU9dGhpcy5wZWVrQ2hhcigpO2lmKGU+PTMyJiZlPD0xMjcpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gaS5DbWQuZ2V0KGEpfX1jb25zdCBuPXRoaXMua25vd25Db21tYW5kcztsZXQgcz12b2lkIDAhPT1uPy5bYV07Zm9yKDsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhYlt0XTspe2NvbnN0IGU9YStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHMmJnZvaWQgMD09PW5bZV0pYnJlYWs7aWYoMTI4PT09YS5sZW5ndGgpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYENvbW1hbmQgdG9rZW4gdG9vIGxvbmc6ICR7YS5sZW5ndGh9YCk7YT1lO3M9dm9pZCAwIT09bj8uW2FdfWlmKCJ0cnVlIj09PWEpcmV0dXJuITA7aWYoImZhbHNlIj09PWEpcmV0dXJuITE7aWYoIm51bGwiPT09YSlyZXR1cm4gbnVsbDsiQkkiPT09YSYmKHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz10aGlzLnN0cmVhbS5wb3MpO3JldHVybiBpLkNtZC5nZXQoYSl9c2tpcFRvTmV4dExpbmUoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyO2Zvcig7ZT49MDspe2lmKDEzPT09ZSl7ZT10aGlzLm5leHRDaGFyKCk7MTA9PT1lJiZ0aGlzLm5leHRDaGFyKCk7YnJlYWt9aWYoMTA9PT1lKXt0aGlzLm5leHRDaGFyKCk7YnJlYWt9ZT10aGlzLm5leHRDaGFyKCl9fX10LkxleGVyPUxleGVyO3QuTGluZWFyaXphdGlvbj1jbGFzcyBMaW5lYXJpemF0aW9ue3N0YXRpYyBjcmVhdGUoZSl7ZnVuY3Rpb24gZ2V0SW50KGUsdCxhPSExKXtjb25zdCByPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIocikmJihhP3I+PTA6cj4wKSlyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoYFRoZSAiJHt0fSIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5gKX1jb25zdCB0PW5ldyBQYXJzZXIoe2xleGVyOm5ldyBMZXhlcihlKSx4cmVmOm51bGx9KSxhPXQuZ2V0T2JqKCkscj10LmdldE9iaigpLG49dC5nZXRPYmooKSxzPXQuZ2V0T2JqKCk7bGV0IG8sYztpZighKE51bWJlci5pc0ludGVnZXIoYSkmJk51bWJlci5pc0ludGVnZXIocikmJigwLGkuaXNDbWQpKG4sIm9iaiIpJiZzIGluc3RhbmNlb2YgaS5EaWN0JiYibnVtYmVyIj09dHlwZW9mKG89cy5nZXQoIkxpbmVhcml6ZWQiKSkmJm8+MCkpcmV0dXJuIG51bGw7aWYoKGM9Z2V0SW50KHMsIkwiKSkhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiTCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lcyBub3QgZXF1YWwgdGhlIHN0cmVhbSBsZW5ndGguJyk7cmV0dXJue2xlbmd0aDpjLGhpbnRzOmZ1bmN0aW9uIGdldEhpbnRzKGUpe2NvbnN0IHQ9ZS5nZXQoIkgiKTtsZXQgYTtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PShhPXQubGVuZ3RoKXx8ND09PWEpKXtmb3IobGV0IGU9MDtlPGE7ZSsrKXtjb25zdCBhPXRbZV07aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPjApKXRocm93IG5ldyBFcnJvcihgSGludCAoJHtlfSkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApfXJldHVybiB0fXRocm93IG5ldyBFcnJvcigiSGludCBhcnJheSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9KHMpLG9iamVjdE51bWJlckZpcnN0OmdldEludChzLCJPIiksZW5kRmlyc3Q6Z2V0SW50KHMsIkUiKSxudW1QYWdlczpnZXRJbnQocywiTiIpLG1haW5YUmVmRW50cmllc09mZnNldDpnZXRJbnQocywiVCIpLHBhZ2VGaXJzdDpzLmhhcygiUCIpP2dldEludChzLCJQIiwhMCk6MH19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkFzY2lpODVTdHJlYW09dm9pZCAwO3ZhciByPWEoMTgpLGk9YSgzKTtjbGFzcyBBc2NpaTg1U3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXt0JiYodCo9LjgpO3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmlucHV0PW5ldyBVaW50OEFycmF5KDUpfXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHI7bGV0IHQ9ZS5nZXRCeXRlKCk7Zm9yKDsoMCxpLmlzV2hpdGVTcGFjZSkodCk7KXQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10fHwxMjY9PT10KXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgYT10aGlzLmJ1ZmZlckxlbmd0aDtsZXQgcixuO2lmKDEyMj09PXQpe3I9dGhpcy5lbnN1cmVCdWZmZXIoYSs0KTtmb3Iobj0wO248NDsrK24pclthK25dPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXtjb25zdCBzPXRoaXMuaW5wdXQ7c1swXT10O2ZvcihuPTE7bjw1Oysrbil7dD1lLmdldEJ5dGUoKTtmb3IoOygwLGkuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtzW25dPXQ7aWYoLTE9PT10fHwxMjY9PT10KWJyZWFrfXI9dGhpcy5lbnN1cmVCdWZmZXIoYStuLTEpO3RoaXMuYnVmZmVyTGVuZ3RoKz1uLTE7aWYobjw1KXtmb3IoO248NTsrK24pc1tuXT0xMTc7dGhpcy5lb2Y9ITB9bGV0IG89MDtmb3Iobj0wO248NTsrK24pbz04NSpvKyhzW25dLTMzKTtmb3Iobj0zO24+PTA7LS1uKXtyW2Erbl09MjU1Jm87bz4+PTh9fX19dC5Bc2NpaTg1U3RyZWFtPUFzY2lpODVTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09dC5EZWNvZGVTdHJlYW09dm9pZCAwO3ZhciByPWEoNSksaT1hKDgpO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMCk7Y2xhc3MgRGVjb2RlU3RyZWFtIGV4dGVuZHMgci5CYXNlU3RyZWFte2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fcmF3TWluQnVmZmVyTGVuZ3RoPWV8fDA7dGhpcy5wb3M9MDt0aGlzLmJ1ZmZlckxlbmd0aD0wO3RoaXMuZW9mPSExO3RoaXMuYnVmZmVyPW47dGhpcy5taW5CdWZmZXJMZW5ndGg9NTEyO2lmKGUpZm9yKDt0aGlzLm1pbkJ1ZmZlckxlbmd0aDxlOyl0aGlzLm1pbkJ1ZmZlckxlbmd0aCo9Mn1nZXQgaXNFbXB0eSgpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH1lbnN1cmVCdWZmZXIoZSl7Y29uc3QgdD10aGlzLmJ1ZmZlcjtpZihlPD10LmJ5dGVMZW5ndGgpcmV0dXJuIHQ7bGV0IGE9dGhpcy5taW5CdWZmZXJMZW5ndGg7Zm9yKDthPGU7KWEqPTI7Y29uc3Qgcj1uZXcgVWludDhBcnJheShhKTtyLnNldCh0KTtyZXR1cm4gdGhpcy5idWZmZXI9cn1nZXRCeXRlKCl7Y29uc3QgZT10aGlzLnBvcztmb3IoO3RoaXMuYnVmZmVyTGVuZ3RoPD1lOyl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK119Z2V0Qnl0ZXMoZSl7Y29uc3QgdD10aGlzLnBvcztsZXQgYTtpZihlKXt0aGlzLmVuc3VyZUJ1ZmZlcih0K2UpO2E9dCtlO2Zvcig7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDxhOyl0aGlzLnJlYWRCbG9jaygpO2NvbnN0IHI9dGhpcy5idWZmZXJMZW5ndGg7YT5yJiYoYT1yKX1lbHNle2Zvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2E9dGhpcy5idWZmZXJMZW5ndGh9dGhpcy5wb3M9YTtyZXR1cm4gdGhpcy5idWZmZXIuc3ViYXJyYXkodCxhKX1yZXNldCgpe3RoaXMucG9zPTB9bWFrZVN1YlN0cmVhbShlLHQsYT1udWxsKXtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2V7Y29uc3QgYT1lK3Q7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9YSYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpfXJldHVybiBuZXcgaS5TdHJlYW0odGhpcy5idWZmZXIsZSx0LGEpfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19dC5EZWNvZGVTdHJlYW09RGVjb2RlU3RyZWFtO3QuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPWNsYXNzIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7bGV0IGE9MDtmb3IoY29uc3QgdCBvZiBlKWErPXQgaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0/dC5fcmF3TWluQnVmZmVyTGVuZ3RoOnQubGVuZ3RoO3N1cGVyKGEpO3RoaXMuc3RyZWFtcz1lO3RoaXMuX29uRXJyb3I9dH1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyZWFtcztpZigwPT09ZS5sZW5ndGgpe3RoaXMuZW9mPSEwO3JldHVybn1jb25zdCB0PWUuc2hpZnQoKTtsZXQgYTt0cnl7YT10LmdldEJ5dGVzKCl9Y2F0Y2goZSl7aWYodGhpcy5fb25FcnJvcil7dGhpcy5fb25FcnJvcihlLHQuZGljdD8ub2JqSWQpO3JldHVybn10aHJvdyBlfWNvbnN0IHI9dGhpcy5idWZmZXJMZW5ndGgsaT1yK2EubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKGkpLnNldChhLHIpO3RoaXMuYnVmZmVyTGVuZ3RoPWl9Z2V0QmFzZVN0cmVhbXMoKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHRoaXMuc3RyZWFtcyl7Y29uc3QgYT10LmdldEJhc2VTdHJlYW1zKCk7YSYmZS5wdXNoKC4uLmEpfXJldHVybiBlLmxlbmd0aD4wP2U6bnVsbH19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQXNjaWlIZXhTdHJlYW09dm9pZCAwO3ZhciByPWEoMTgpO2NsYXNzIEFzY2lpSGV4U3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXt0JiYodCo9LjUpO3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmZpcnN0RGlnaXQ9LTF9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcyg4ZTMpO2lmKCFlLmxlbmd0aCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IHQ9ZS5sZW5ndGgrMT4+MSxhPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK3QpO2xldCByPXRoaXMuYnVmZmVyTGVuZ3RoLGk9dGhpcy5maXJzdERpZ2l0O2Zvcihjb25zdCB0IG9mIGUpe2xldCBlO2lmKHQ+PTQ4JiZ0PD01NyllPTE1JnQ7ZWxzZXtpZighKHQ+PTY1JiZ0PD03MHx8dD49OTcmJnQ8PTEwMikpe2lmKDYyPT09dCl7dGhpcy5lb2Y9ITA7YnJlYWt9Y29udGludWV9ZT05KygxNSZ0KX1pZihpPDApaT1lO2Vsc2V7YVtyKytdPWk8PDR8ZTtpPS0xfX1pZihpPj0wJiZ0aGlzLmVvZil7YVtyKytdPWk8PDQ7aT0tMX10aGlzLmZpcnN0RGlnaXQ9aTt0aGlzLmJ1ZmZlckxlbmd0aD1yfX10LkFzY2lpSGV4U3RyZWFtPUFzY2lpSGV4U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0NJVFRGYXhTdHJlYW09dm9pZCAwO3ZhciByPWEoMjEpLGk9YSgxOCksbj1hKDQpO2NsYXNzIENDSVRURmF4U3RyZWFtIGV4dGVuZHMgaS5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDthIGluc3RhbmNlb2Ygbi5EaWN0fHwoYT1uLkRpY3QuZW1wdHkpO2NvbnN0IGk9e25leHQ6KCk9PmUuZ2V0Qnl0ZSgpfTt0aGlzLmNjaXR0RmF4RGVjb2Rlcj1uZXcgci5DQ0lUVEZheERlY29kZXIoaSx7SzphLmdldCgiSyIpLEVuZE9mTGluZTphLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjphLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6YS5nZXQoIkNvbHVtbnMiKSxSb3dzOmEuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazphLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOmEuZ2V0KCJCbGFja0lzMSIpfSl9cmVhZEJsb2NrKCl7Zm9yKDshdGhpcy5lb2Y7KXtjb25zdCBlPXRoaXMuY2NpdHRGYXhEZWNvZGVyLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJufXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpO3RoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX10LkNDSVRURmF4U3RyZWFtPUNDSVRURmF4U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgcj1hKDIpO2NvbnN0IGk9LTEsbj1bWy0xLC0xXSxbLTEsLTFdLFs3LDhdLFs3LDddLFs2LDZdLFs2LDZdLFs2LDVdLFs2LDVdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdXSxzPVtbLTEsLTFdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNTYwXV0sbz1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbOCwyOV0sWzgsMjldLFs4LDMwXSxbOCwzMF0sWzgsNDVdLFs4LDQ1XSxbOCw0Nl0sWzgsNDZdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbNywyM10sWzgsNDddLFs4LDQ3XSxbOCw0OF0sWzgsNDhdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs4LDMzXSxbOCwzM10sWzgsMzRdLFs4LDM0XSxbOCwzNV0sWzgsMzVdLFs4LDM2XSxbOCwzNl0sWzgsMzddLFs4LDM3XSxbOCwzOF0sWzgsMzhdLFs3LDE5XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbOCwzMV0sWzgsMzFdLFs4LDMyXSxbOCwzMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbOCw1M10sWzgsNTNdLFs4LDU0XSxbOCw1NF0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs4LDM5XSxbOCwzOV0sWzgsNDBdLFs4LDQwXSxbOCw0MV0sWzgsNDFdLFs4LDQyXSxbOCw0Ml0sWzgsNDNdLFs4LDQzXSxbOCw0NF0sWzgsNDRdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzgsNjFdLFs4LDYxXSxbOCw2Ml0sWzgsNjJdLFs4LDYzXSxbOCw2M10sWzgsMF0sWzgsMF0sWzgsMzIwXSxbOCwzMjBdLFs4LDM4NF0sWzgsMzg0XSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs3LDI3XSxbNywyN10sWzcsMjddLFs3LDI3XSxbOCw1OV0sWzgsNTldLFs4LDYwXSxbOCw2MF0sWzksMTQ3Ml0sWzksMTUzNl0sWzksMTYwMF0sWzksMTcyOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbOCw0OV0sWzgsNDldLFs4LDUwXSxbOCw1MF0sWzgsNTFdLFs4LDUxXSxbOCw1Ml0sWzgsNTJdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbOCw1NV0sWzgsNTVdLFs4LDU2XSxbOCw1Nl0sWzgsNTddLFs4LDU3XSxbOCw1OF0sWzgsNThdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbOCw0NDhdLFs4LDQ0OF0sWzgsNTEyXSxbOCw1MTJdLFs5LDcwNF0sWzksNzY4XSxbOCw2NDBdLFs4LDY0MF0sWzgsNTc2XSxbOCw1NzZdLFs5LDgzMl0sWzksODk2XSxbOSw5NjBdLFs5LDEwMjRdLFs5LDEwODhdLFs5LDExNTJdLFs5LDEyMTZdLFs5LDEyODBdLFs5LDEzNDRdLFs5LDE0MDhdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XV0sYz1bWy0xLC0xXSxbLTEsLTFdLFsxMiwtMl0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI0OTZdLFsxMiwyNTYwXSxbMTIsMjU2MF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMiw1Ml0sWzEyLDUyXSxbMTMsNjQwXSxbMTMsNzA0XSxbMTMsNzY4XSxbMTMsODMyXSxbMTIsNTVdLFsxMiw1NV0sWzEyLDU2XSxbMTIsNTZdLFsxMywxMjgwXSxbMTMsMTM0NF0sWzEzLDE0MDhdLFsxMywxNDcyXSxbMTIsNTldLFsxMiw1OV0sWzEyLDYwXSxbMTIsNjBdLFsxMywxNTM2XSxbMTMsMTYwMF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMywxNjY0XSxbMTMsMTcyOF0sWzEyLDMyMF0sWzEyLDMyMF0sWzEyLDM4NF0sWzEyLDM4NF0sWzEyLDQ0OF0sWzEyLDQ0OF0sWzEzLDUxMl0sWzEzLDU3Nl0sWzEyLDUzXSxbMTIsNTNdLFsxMiw1NF0sWzEyLDU0XSxbMTMsODk2XSxbMTMsOTYwXSxbMTMsMTAyNF0sWzEzLDEwODhdLFsxMywxMTUyXSxbMTMsMTIxNl0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdXSxsPVtbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzExLDIzXSxbMTEsMjNdLFsxMiw1MF0sWzEyLDUxXSxbMTIsNDRdLFsxMiw0NV0sWzEyLDQ2XSxbMTIsNDddLFsxMiw1N10sWzEyLDU4XSxbMTIsNjFdLFsxMiwyNTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTIsNDhdLFsxMiw0OV0sWzEyLDYyXSxbMTIsNjNdLFsxMiwzMF0sWzEyLDMxXSxbMTIsMzJdLFsxMiwzM10sWzEyLDQwXSxbMTIsNDFdLFsxMSwyMl0sWzExLDIyXSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzEyLDEyOF0sWzEyLDE5Ml0sWzEyLDI2XSxbMTIsMjddLFsxMiwyOF0sWzEyLDI5XSxbMTEsMTldLFsxMSwxOV0sWzExLDIwXSxbMTEsMjBdLFsxMiwzNF0sWzEyLDM1XSxbMTIsMzZdLFsxMiwzN10sWzEyLDM4XSxbMTIsMzldLFsxMSwyMV0sWzExLDIxXSxbMTIsNDJdLFsxMiw0M10sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl1dLGg9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzYsOV0sWzYsOF0sWzUsN10sWzUsN10sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl1dO3QuQ0NJVFRGYXhEZWNvZGVyPWNsYXNzIENDSVRURmF4RGVjb2Rlcntjb25zdHJ1Y3RvcihlLHQ9e30pe2lmKCFlfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5uZXh0KXRocm93IG5ldyBFcnJvcignQ0NJVFRGYXhEZWNvZGVyIC0gaW52YWxpZCAic291cmNlIiBwYXJhbWV0ZXIuJyk7dGhpcy5zb3VyY2U9ZTt0aGlzLmVvZj0hMTt0aGlzLmVuY29kaW5nPXQuS3x8MDt0aGlzLmVvbGluZT10LkVuZE9mTGluZXx8ITE7dGhpcy5ieXRlQWxpZ249dC5FbmNvZGVkQnl0ZUFsaWdufHwhMTt0aGlzLmNvbHVtbnM9dC5Db2x1bW5zfHwxNzI4O3RoaXMucm93cz10LlJvd3N8fDA7dGhpcy5lb2Jsb2NrPXQuRW5kT2ZCbG9jaz8/ITA7dGhpcy5ibGFjaz10LkJsYWNrSXMxfHwhMTt0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKTt0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKTt0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zO3RoaXMuY29kaW5nUG9zPTA7dGhpcy5yb3c9MDt0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwO3RoaXMuaW5wdXRCaXRzPTA7dGhpcy5pbnB1dEJ1Zj0wO3RoaXMub3V0cHV0Qml0cz0wO3RoaXMucm93c0RvbmU9ITE7bGV0IGE7Zm9yKDswPT09KGE9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09YSYmdGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXJlYWROZXh0Q2hhcigpe2lmKHRoaXMuZW9mKXJldHVybi0xO2NvbnN0IGU9dGhpcy5yZWZMaW5lLHQ9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2x1bW5zO2xldCBuLHMsbyxjLGw7aWYoMD09PXRoaXMub3V0cHV0Qml0cyl7dGhpcy5yb3dzRG9uZSYmKHRoaXMuZW9mPSEwKTtpZih0aGlzLmVvZilyZXR1cm4tMTt0aGlzLmVycj0hMTtsZXQgbyxsLGg7aWYodGhpcy5uZXh0TGluZTJEKXtmb3IoYz0wO3RbY108YTsrK2MpZVtjXT10W2NdO2VbYysrXT1hO2VbY109YTt0WzBdPTA7dGhpcy5jb2RpbmdQb3M9MDtuPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289dGhpcy5fZ2V0VHdvRGltQ29kZSgpO3N3aXRjaChvKXtjYXNlIDA6dGhpcy5fYWRkUGl4ZWxzKGVbbisxXSxzKTtlW24rMV08YSYmKG4rPTIpO2JyZWFrO2Nhc2UgMTpvPWw9MDtpZihzKXtkb3tvKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KX1lbHNle2Rve28rPWg9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoaD49NjQpO2Rve2wrPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpfXRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStvLHMpO3RbdGhpcy5jb2RpbmdQb3NdPGEmJnRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStsLDFecyk7Zm9yKDtlW25dPD10W3RoaXMuY29kaW5nUG9zXSYmZVtuXTxhOyluKz0yO2JyZWFrO2Nhc2UgNzp0aGlzLl9hZGRQaXhlbHMoZVtuXSszLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7KytuO2Zvcig7ZVtuXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbbl08YTspbis9Mn1icmVhaztjYXNlIDU6dGhpcy5fYWRkUGl4ZWxzKGVbbl0rMixzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysrbjtmb3IoO2Vbbl08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW25dPGE7KW4rPTJ9YnJlYWs7Y2FzZSAzOnRoaXMuX2FkZFBpeGVscyhlW25dKzEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXsrK247Zm9yKDtlW25dPD10W3RoaXMuY29kaW5nUG9zXSYmZVtuXTxhOyluKz0yfWJyZWFrO2Nhc2UgMjp0aGlzLl9hZGRQaXhlbHMoZVtuXSxzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysrbjtmb3IoO2Vbbl08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW25dPGE7KW4rPTJ9YnJlYWs7Y2FzZSA4OnRoaXMuX2FkZFBpeGVsc05lZyhlW25dLTMscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtuPjA/LS1uOisrbjtmb3IoO2Vbbl08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW25dPGE7KW4rPTJ9YnJlYWs7Y2FzZSA2OnRoaXMuX2FkZFBpeGVsc05lZyhlW25dLTIscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtuPjA/LS1uOisrbjtmb3IoO2Vbbl08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW25dPGE7KW4rPTJ9YnJlYWs7Y2FzZSA0OnRoaXMuX2FkZFBpeGVsc05lZyhlW25dLTEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtuPjA/LS1uOisrbjtmb3IoO2Vbbl08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW25dPGE7KW4rPTJ9YnJlYWs7Y2FzZSBpOnRoaXMuX2FkZFBpeGVscyhhLDApO3RoaXMuZW9mPSEwO2JyZWFrO2RlZmF1bHQ6KDAsci5pbmZvKSgiYmFkIDJkIGNvZGUiKTt0aGlzLl9hZGRQaXhlbHMoYSwwKTt0aGlzLmVycj0hMH19fWVsc2V7dFswXT0wO3RoaXMuY29kaW5nUG9zPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289MDtpZihzKWRve28rPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpO2Vsc2UgZG97bys9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK28scyk7c149MX19bGV0IHU9ITE7dGhpcy5ieXRlQWxpZ24mJih0aGlzLmlucHV0Qml0cyY9LTgpO2lmKHRoaXMuZW9ibG9ja3x8dGhpcy5yb3chPT10aGlzLnJvd3MtMSl7bz10aGlzLl9sb29rQml0cygxMik7aWYodGhpcy5lb2xpbmUpZm9yKDtvIT09aSYmMSE9PW87KXt0aGlzLl9lYXRCaXRzKDEpO289dGhpcy5fbG9va0JpdHMoMTIpfWVsc2UgZm9yKDswPT09bzspe3RoaXMuX2VhdEJpdHMoMSk7bz10aGlzLl9sb29rQml0cygxMil9aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO3U9ITB9ZWxzZSBvPT09aSYmKHRoaXMuZW9mPSEwKX1lbHNlIHRoaXMucm93c0RvbmU9ITA7aWYoIXRoaXMuZW9mJiZ0aGlzLmVuY29kaW5nPjAmJiF0aGlzLnJvd3NEb25lKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9aWYodGhpcy5lb2Jsb2NrJiZ1JiZ0aGlzLmJ5dGVBbGlnbil7bz10aGlzLl9sb29rQml0cygxMik7aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX1pZih0aGlzLmVuY29kaW5nPj0wKWZvcihjPTA7Yzw0OysrYyl7bz10aGlzLl9sb29rQml0cygxMik7MSE9PW8mJigwLHIuaW5mbykoImJhZCBydGMgY29kZTogIitvKTt0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXRoaXMuZW9mPSEwfX1lbHNlIGlmKHRoaXMuZXJyJiZ0aGlzLmVvbGluZSl7Zm9yKDs7KXtvPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihvPT09aSl7dGhpcy5lb2Y9ITA7cmV0dXJuLTF9aWYobz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fZWF0Qml0cygxKTt0aGlzLm5leHRMaW5lMkQ9ISgxJm8pfX10WzBdPjA/dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3M9MV07dGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpe2w9MSZ0aGlzLmNvZGluZ1Bvcz8wOjI1NTt0aGlzLm91dHB1dEJpdHMtPTg7aWYoMD09PXRoaXMub3V0cHV0Qml0cyYmdFt0aGlzLmNvZGluZ1Bvc108YSl7dGhpcy5jb2RpbmdQb3MrKzt0aGlzLm91dHB1dEJpdHM9dFt0aGlzLmNvZGluZ1Bvc10tdFt0aGlzLmNvZGluZ1Bvcy0xXX19ZWxzZXtvPTg7bD0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTtpZih0aGlzLm91dHB1dEJpdHM+byl7bDw8PW87MSZ0aGlzLmNvZGluZ1Bvc3x8KGx8PTI1NT4+OC1vKTt0aGlzLm91dHB1dEJpdHMtPW87bz0wfWVsc2V7bDw8PXRoaXMub3V0cHV0Qml0czsxJnRoaXMuY29kaW5nUG9zfHwobHw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyk7by09dGhpcy5vdXRwdXRCaXRzO3RoaXMub3V0cHV0Qml0cz0wO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3RoaXMuY29kaW5nUG9zKys7dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3NdLXRbdGhpcy5jb2RpbmdQb3MtMV19ZWxzZSBpZihvPjApe2w8PD1vO289MH19fXdoaWxlKG8pfXRoaXMuYmxhY2smJihsXj0yNTUpO3JldHVybiBsfV9hZGRQaXhlbHMoZSx0KXtjb25zdCBhPXRoaXMuY29kaW5nTGluZTtsZXQgaT10aGlzLmNvZGluZ1BvcztpZihlPmFbaV0pe2lmKGU+dGhpcy5jb2x1bW5zKXsoMCxyLmluZm8pKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIik7dGhpcy5lcnI9ITA7ZT10aGlzLmNvbHVtbnN9MSZpXnQmJisraTthW2ldPWV9dGhpcy5jb2RpbmdQb3M9aX1fYWRkUGl4ZWxzTmVnKGUsdCl7Y29uc3QgYT10aGlzLmNvZGluZ0xpbmU7bGV0IGk9dGhpcy5jb2RpbmdQb3M7aWYoZT5hW2ldKXtpZihlPnRoaXMuY29sdW1ucyl7KDAsci5pbmZvKSgicm93IGlzIHdyb25nIGxlbmd0aCIpO3RoaXMuZXJyPSEwO2U9dGhpcy5jb2x1bW5zfTEmaV50JiYrK2k7YVtpXT1lfWVsc2UgaWYoZTxhW2ldKXtpZihlPDApeygwLHIuaW5mbykoImludmFsaWQgY29kZSIpO3RoaXMuZXJyPSEwO2U9MH1mb3IoO2k+MCYmZTxhW2ktMV07KS0taTthW2ldPWV9dGhpcy5jb2RpbmdQb3M9aX1fZmluZFRhYmxlQ29kZShlLHQsYSxyKXtjb25zdCBuPXJ8fDA7Zm9yKGxldCByPWU7cjw9dDsrK3Ipe2xldCBlPXRoaXMuX2xvb2tCaXRzKHIpO2lmKGU9PT1pKXJldHVyblshMCwxLCExXTtyPHQmJihlPDw9dC1yKTtpZighbnx8ZT49bil7Y29uc3QgdD1hW2Utbl07aWYodFswXT09PXIpe3RoaXMuX2VhdEJpdHMocik7cmV0dXJuWyEwLHRbMV0sITBdfX19cmV0dXJuWyExLDAsITFdfV9nZXRUd29EaW1Db2RlKCl7bGV0IGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7dD10aGlzLl9sb29rQml0cyg3KTtlPW5bdF07aWYoZT8uWzBdPjApe3RoaXMuX2VhdEJpdHMoZVswXSk7cmV0dXJuIGVbMV19fWVsc2V7Y29uc3QgZT10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxuKTtpZihlWzBdJiZlWzJdKXJldHVybiBlWzFdfSgwLHIuaW5mbykoIkJhZCB0d28gZGltIGNvZGUiKTtyZXR1cm4gaX1fZ2V0V2hpdGVDb2RlKCl7bGV0IGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7dD10aGlzLl9sb29rQml0cygxMik7aWYodD09PWkpcmV0dXJuIDE7ZT10Pj41PT0wP3NbdF06b1t0Pj4zXTtpZihlWzBdPjApe3RoaXMuX2VhdEJpdHMoZVswXSk7cmV0dXJuIGVbMV19fWVsc2V7bGV0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDksbyk7aWYoZVswXSlyZXR1cm4gZVsxXTtlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTEsMTIscyk7aWYoZVswXSlyZXR1cm4gZVsxXX0oMCxyLmluZm8pKCJiYWQgd2hpdGUgY29kZSIpO3RoaXMuX2VhdEJpdHMoMSk7cmV0dXJuIDF9X2dldEJsYWNrQ29kZSgpe2xldCBlLHQ7aWYodGhpcy5lb2Jsb2NrKXtlPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihlPT09aSlyZXR1cm4gMTt0PWU+Pjc9PTA/Y1tlXTplPj45PT0wJiZlPj43IT0wP2xbKGU+PjEpLTY0XTpoW2U+PjddO2lmKHRbMF0+MCl7dGhpcy5fZWF0Qml0cyh0WzBdKTtyZXR1cm4gdFsxXX19ZWxzZXtsZXQgZT10aGlzLl9maW5kVGFibGVDb2RlKDIsNixoKTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSg3LDEyLGwsNjQpO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDEwLDEzLGMpO2lmKGVbMF0pcmV0dXJuIGVbMV19KDAsci5pbmZvKSgiYmFkIGJsYWNrIGNvZGUiKTt0aGlzLl9lYXRCaXRzKDEpO3JldHVybiAxfV9sb29rQml0cyhlKXtsZXQgdDtmb3IoO3RoaXMuaW5wdXRCaXRzPGU7KXtpZigtMT09PSh0PXRoaXMuc291cmNlLm5leHQoKSkpcmV0dXJuIDA9PT10aGlzLmlucHV0Qml0cz9pOnRoaXMuaW5wdXRCdWY8PGUtdGhpcy5pbnB1dEJpdHMmNjU1MzU+PjE2LWU7dGhpcy5pbnB1dEJ1Zj10aGlzLmlucHV0QnVmPDw4fHQ7dGhpcy5pbnB1dEJpdHMrPTh9cmV0dXJuIHRoaXMuaW5wdXRCdWY+PnRoaXMuaW5wdXRCaXRzLWUmNjU1MzU+PjE2LWV9X2VhdEJpdHMoZSl7KHRoaXMuaW5wdXRCaXRzLT1lKTwwJiYodGhpcy5pbnB1dEJpdHM9MCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkZsYXRlU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KSxpPWEoMik7Y29uc3Qgbj1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHM9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksbz1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGM9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGw9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XTtjbGFzcyBGbGF0ZVN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O2NvbnN0IGE9ZS5nZXRCeXRlKCkscj1lLmdldEJ5dGUoKTtpZigtMT09PWF8fC0xPT09cil0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcihgSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoOCE9KDE1JmEpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKGBVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICR7YX0sICR7cn1gKTtpZigoKGE8PDgpK3IpJTMxIT0wKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKGBCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogJHthfSwgJHtyfWApO2lmKDMyJnIpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7dGhpcy5jb2RlU2l6ZT0wO3RoaXMuY29kZUJ1Zj0wfWdldEJpdHMoZSl7Y29uc3QgdD10aGlzLnN0cjtsZXQgYSxyPXRoaXMuY29kZVNpemUsbj10aGlzLmNvZGVCdWY7Zm9yKDtyPGU7KXtpZigtMT09PShhPXQuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO258PWE8PHI7cis9OH1hPW4mKDE8PGUpLTE7dGhpcy5jb2RlQnVmPW4+PmU7dGhpcy5jb2RlU2l6ZT1yLT1lO3JldHVybiBhfWdldENvZGUoZSl7Y29uc3QgdD10aGlzLnN0cixhPWVbMF0scj1lWzFdO2xldCBuLHM9dGhpcy5jb2RlU2l6ZSxvPXRoaXMuY29kZUJ1Zjtmb3IoO3M8ciYmLTEhPT0obj10LmdldEJ5dGUoKSk7KXtvfD1uPDxzO3MrPTh9Y29uc3QgYz1hW28mKDE8PHIpLTFdLGw9Yz4+MTYsaD02NTUzNSZjO2lmKGw8MXx8czxsKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7dGhpcy5jb2RlQnVmPW8+Pmw7dGhpcy5jb2RlU2l6ZT1zLWw7cmV0dXJuIGh9Z2VuZXJhdGVIdWZmbWFuVGFibGUoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYSxyPTA7Zm9yKGE9MDthPHQ7KythKWVbYV0+ciYmKHI9ZVthXSk7Y29uc3QgaT0xPDxyLG49bmV3IEludDMyQXJyYXkoaSk7Zm9yKGxldCBzPTEsbz0wLGM9MjtzPD1yOysrcyxvPDw9MSxjPDw9MSlmb3IobGV0IHI9MDtyPHQ7KytyKWlmKGVbcl09PT1zKXtsZXQgZT0wLHQ9bztmb3IoYT0wO2E8czsrK2Epe2U9ZTw8MXwxJnQ7dD4+PTF9Zm9yKGE9ZTthPGk7YSs9YyluW2FdPXM8PDE2fHI7KytvfXJldHVybltuLHJdfXJlYWRCbG9jaygpe2xldCBlLHQ7Y29uc3QgYT10aGlzLnN0cjtsZXQgcixoLHU9dGhpcy5nZXRCaXRzKDMpOzEmdSYmKHRoaXMuZW9mPSEwKTt1Pj49MTtpZigwPT09dSl7bGV0IHQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7bGV0IHI9dDtpZigtMT09PSh0PWEuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtyfD10PDw4O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2xldCBuPXQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7bnw9dDw8ODtpZihuIT09KDY1NTM1Jn5yKSYmKDAhPT1yfHwwIT09bikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCB1bmNvbXByZXNzZWQgYmxvY2sgbGVuZ3RoIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj0wO3RoaXMuY29kZVNpemU9MDtjb25zdCBzPXRoaXMuYnVmZmVyTGVuZ3RoLG89cytyO2U9dGhpcy5lbnN1cmVCdWZmZXIobyk7dGhpcy5idWZmZXJMZW5ndGg9bztpZigwPT09ciktMT09PWEucGVla0J5dGUoKSYmKHRoaXMuZW9mPSEwKTtlbHNle2NvbnN0IHQ9YS5nZXRCeXRlcyhyKTtlLnNldCh0LHMpO3QubGVuZ3RoPHImJih0aGlzLmVvZj0hMCl9cmV0dXJufWlmKDE9PT11KXtyPWM7aD1sfWVsc2V7aWYoMiE9PXUpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt7Y29uc3QgZT10aGlzLmdldEJpdHMoNSkrMjU3LGE9dGhpcy5nZXRCaXRzKDUpKzEsaT10aGlzLmdldEJpdHMoNCkrNCxzPW5ldyBVaW50OEFycmF5KG4ubGVuZ3RoKTtsZXQgbztmb3Iobz0wO288aTsrK28pc1tuW29dXT10aGlzLmdldEJpdHMoMyk7Y29uc3QgYz10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHMpO3Q9MDtvPTA7Y29uc3QgbD1lK2EsdT1uZXcgVWludDhBcnJheShsKTtsZXQgZCxmLGc7Zm9yKDtvPGw7KXtjb25zdCBlPXRoaXMuZ2V0Q29kZShjKTtpZigxNj09PWUpe2Q9MjtmPTM7Zz10fWVsc2UgaWYoMTc9PT1lKXtkPTM7Zj0zO2c9dD0wfWVsc2V7aWYoMTghPT1lKXt1W28rK109dD1lO2NvbnRpbnVlfWQ9NztmPTExO2c9dD0wfWxldCBhPXRoaXMuZ2V0Qml0cyhkKStmO2Zvcig7YS0tID4wOyl1W28rK109Z31yPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUodS5zdWJhcnJheSgwLGUpKTtoPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUodS5zdWJhcnJheShlLGwpKX19ZT10aGlzLmJ1ZmZlcjtsZXQgZD1lP2UubGVuZ3RoOjAsZj10aGlzLmJ1ZmZlckxlbmd0aDtmb3IoOzspe2xldCBhPXRoaXMuZ2V0Q29kZShyKTtpZihhPDI1Nil7aWYoZisxPj1kKXtlPXRoaXMuZW5zdXJlQnVmZmVyKGYrMSk7ZD1lLmxlbmd0aH1lW2YrK109YTtjb250aW51ZX1pZigyNTY9PT1hKXt0aGlzLmJ1ZmZlckxlbmd0aD1mO3JldHVybn1hLT0yNTc7YT1zW2FdO2xldCBpPWE+PjE2O2k+MCYmKGk9dGhpcy5nZXRCaXRzKGkpKTt0PSg2NTUzNSZhKStpO2E9dGhpcy5nZXRDb2RlKGgpO2E9b1thXTtpPWE+PjE2O2k+MCYmKGk9dGhpcy5nZXRCaXRzKGkpKTtjb25zdCBuPSg2NTUzNSZhKStpO2lmKGYrdD49ZCl7ZT10aGlzLmVuc3VyZUJ1ZmZlcihmK3QpO2Q9ZS5sZW5ndGh9Zm9yKGxldCBhPTA7YTx0OysrYSwrK2YpZVtmXT1lW2Ytbl19fX10LkZsYXRlU3RyZWFtPUZsYXRlU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSmJpZzJTdHJlYW09dm9pZCAwO3ZhciByPWEoNSksaT1hKDE4KSxuPWEoNCkscz1hKDI0KSxvPWEoMik7Y2xhc3MgSmJpZzJTdHJlYW0gZXh0ZW5kcyBpLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1hfWdldCBieXRlcygpe3JldHVybigwLG8uc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfWVuc3VyZUJ1ZmZlcihlKXt9cmVhZEJsb2NrKCl7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IGU9bmV3IHMuSmJpZzJJbWFnZSx0PVtdO2lmKHRoaXMucGFyYW1zIGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCBlPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYoZSBpbnN0YW5jZW9mIHIuQmFzZVN0cmVhbSl7Y29uc3QgYT1lLmdldEJ5dGVzKCk7dC5wdXNoKHtkYXRhOmEsc3RhcnQ6MCxlbmQ6YS5sZW5ndGh9KX19dC5wdXNoKHtkYXRhOnRoaXMuYnl0ZXMsc3RhcnQ6MCxlbmQ6dGhpcy5ieXRlcy5sZW5ndGh9KTtjb25zdCBhPWUucGFyc2VDaHVua3ModCksaT1hLmxlbmd0aDtmb3IobGV0IGU9MDtlPGk7ZSsrKWFbZV1ePTI1NTt0aGlzLmJ1ZmZlcj1hO3RoaXMuYnVmZmVyTGVuZ3RoPWk7dGhpcy5lb2Y9ITB9fXQuSmJpZzJTdHJlYW09SmJpZzJTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KYmlnMkltYWdlPXZvaWQgMDt2YXIgcj1hKDIpLGk9YSgzKSxuPWEoMjUpLHM9YSgyMSk7Y2xhc3MgSmJpZzJFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihgSkJJRzIgZXJyb3I6ICR7ZX1gLCJKYmlnMkVycm9yIil9fWNsYXNzIENvbnRleHRDYWNoZXtnZXRDb250ZXh0cyhlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19Y2xhc3MgRGVjb2RpbmdDb250ZXh0e2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9YX1nZXQgZGVjb2Rlcigpe2NvbnN0IGU9bmV3IG4uQXJpdGhtZXRpY0RlY29kZXIodGhpcy5kYXRhLHRoaXMuc3RhcnQsdGhpcy5lbmQpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJkZWNvZGVyIixlKX1nZXQgY29udGV4dENhY2hlKCl7Y29uc3QgZT1uZXcgQ29udGV4dENhY2hlO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1jb25zdCBvPTIqKjMxLTEsYz0tKDIqKjMxKTtmdW5jdGlvbiBkZWNvZGVJbnRlZ2VyKGUsdCxhKXtjb25zdCByPWUuZ2V0Q29udGV4dHModCk7bGV0IGk9MTtmdW5jdGlvbiByZWFkQml0cyhlKXtsZXQgdD0wO2ZvcihsZXQgbj0wO248ZTtuKyspe2NvbnN0IGU9YS5yZWFkQml0KHIsaSk7aT1pPDI1Nj9pPDwxfGU6NTExJihpPDwxfGUpfDI1Njt0PXQ8PDF8ZX1yZXR1cm4gdD4+PjB9Y29uc3Qgbj1yZWFkQml0cygxKSxzPXJlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDMyKSs0NDM2OnJlYWRCaXRzKDEyKSszNDA6cmVhZEJpdHMoOCkrODQ6cmVhZEJpdHMoNikrMjA6cmVhZEJpdHMoNCkrNDpyZWFkQml0cygyKTtsZXQgbDswPT09bj9sPXM6cz4wJiYobD0tcyk7cmV0dXJuIGw+PWMmJmw8PW8/bDpudWxsfWZ1bmN0aW9uIGRlY29kZUlBSUQoZSx0LGEpe2NvbnN0IHI9ZS5nZXRDb250ZXh0cygiSUFJRCIpO2xldCBpPTE7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7aT1pPDwxfHQucmVhZEJpdChyLGkpfXJldHVybiBhPDMxP2kmKDE8PGEpLTE6MjE0NzQ4MzY0NyZpfWNvbnN0IGw9WyJTeW1ib2xEaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlVGV4dFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJQYXR0ZXJuRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUhhbGZ0b25lUmVnaW9uIixudWxsLCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uIiwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCwiUGFnZUluZm9ybWF0aW9uIiwiRW5kT2ZQYWdlIiwiRW5kT2ZTdHJpcGUiLCJFbmRPZkZpbGUiLCJQcm9maWxlcyIsIlRhYmxlcyIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJFeHRlbnNpb24iXSxoPVtbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6Mix5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6Mix5Oi0xfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTMseTotMX0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dXSx1PVt7Y29kaW5nOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4Oi0xLHk6MX0se3g6MCx5OjF9LHt4OjEseToxfV19LHtjb2Rpbmc6W3t4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4OjAseToxfSx7eDoxLHk6MX1dfV0sZD1bMzk3MTcsMTk0MSwyMjksNDA1XSxmPVszMiw4XTtmdW5jdGlvbiBkZWNvZGVCaXRtYXAoZSx0LGEscixpLG4scyxvKXtpZihlKXtyZXR1cm4gZGVjb2RlTU1SQml0bWFwKG5ldyBSZWFkZXIoby5kYXRhLG8uc3RhcnQsby5lbmQpLHQsYSwhMSl9aWYoMD09PXImJiFuJiYhaSYmND09PXMubGVuZ3RoJiYzPT09c1swXS54JiYtMT09PXNbMF0ueSYmLTM9PT1zWzFdLngmJi0xPT09c1sxXS55JiYyPT09c1syXS54JiYtMj09PXNbMl0ueSYmLTI9PT1zWzNdLngmJi0yPT09c1szXS55KXJldHVybiBmdW5jdGlvbiBkZWNvZGVCaXRtYXBUZW1wbGF0ZTAoZSx0LGEpe2NvbnN0IHI9YS5kZWNvZGVyLGk9YS5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIiksbj1bXTtsZXQgcyxvLGMsbCxoLHUsZDtmb3Iobz0wO288dDtvKyspe2g9bltvXT1uZXcgVWludDhBcnJheShlKTt1PW88MT9oOm5bby0xXTtkPW88Mj9oOm5bby0yXTtzPWRbMF08PDEzfGRbMV08PDEyfGRbMl08PDExfHVbMF08PDd8dVsxXTw8Nnx1WzJdPDw1fHVbM108PDQ7Zm9yKGM9MDtjPGU7YysrKXtoW2NdPWw9ci5yZWFkQml0KGkscyk7cz0oMzE3MzUmcyk8PDF8KGMrMzxlP2RbYyszXTw8MTE6MCl8KGMrNDxlP3VbYys0XTw8NDowKXxsfX1yZXR1cm4gbn0odCxhLG8pO2NvbnN0IGM9ISFuLGw9aFtyXS5jb25jYXQocyk7bC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnktdC55fHxlLngtdC54fSkpO2NvbnN0IHU9bC5sZW5ndGgsZj1uZXcgSW50OEFycmF5KHUpLGc9bmV3IEludDhBcnJheSh1KSxwPVtdO2xldCBtLGIseT0wLHc9MCxTPTAseD0wO2ZvcihiPTA7Yjx1O2IrKyl7ZltiXT1sW2JdLng7Z1tiXT1sW2JdLnk7dz1NYXRoLm1pbih3LGxbYl0ueCk7Uz1NYXRoLm1heChTLGxbYl0ueCk7eD1NYXRoLm1pbih4LGxbYl0ueSk7Yjx1LTEmJmxbYl0ueT09PWxbYisxXS55JiZsW2JdLng9PT1sW2IrMV0ueC0xP3l8PTE8PHUtMS1iOnAucHVzaChiKX1jb25zdCBDPXAubGVuZ3RoLGs9bmV3IEludDhBcnJheShDKSx2PW5ldyBJbnQ4QXJyYXkoQyksRj1uZXcgVWludDE2QXJyYXkoQyk7Zm9yKG09MDttPEM7bSsrKXtiPXBbbV07a1ttXT1sW2JdLng7dlttXT1sW2JdLnk7RlttXT0xPDx1LTEtYn1jb25zdCBPPS13LFQ9LXgsTT10LVMsRT1kW3JdO2xldCBEPW5ldyBVaW50OEFycmF5KHQpO2NvbnN0IE49W10sUj1vLmRlY29kZXIsTD1vLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKTtsZXQgXywkLGosVSxYLEg9MCxxPTA7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7aWYoaSl7SF49Ui5yZWFkQml0KEwsRSk7aWYoSCl7Ti5wdXNoKEQpO2NvbnRpbnVlfX1EPW5ldyBVaW50OEFycmF5KEQpO04ucHVzaChEKTtmb3IoXz0wO188dDtfKyspe2lmKGMmJm5bZV1bX10pe0RbX109MDtjb250aW51ZX1pZihfPj1PJiZfPE0mJmU+PVQpe3E9cTw8MSZ5O2ZvcihiPTA7YjxDO2IrKyl7JD1lK3ZbYl07aj1fK2tbYl07VT1OWyRdW2pdO2lmKFUpe1U9RltiXTtxfD1VfX19ZWxzZXtxPTA7WD11LTE7Zm9yKGI9MDtiPHU7YisrLFgtLSl7aj1fK2ZbYl07aWYoaj49MCYmajx0KXskPWUrZ1tiXTtpZigkPj0wKXtVPU5bJF1bal07VSYmKHF8PVU8PFgpfX19fWNvbnN0IGE9Ui5yZWFkQml0KEwscSk7RFtfXT1hfX1yZXR1cm4gTn1mdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KGUsdCxhLHIsaSxuLHMsbyxjKXtsZXQgbD11W2FdLmNvZGluZzswPT09YSYmKGw9bC5jb25jYXQoW29bMF1dKSk7Y29uc3QgaD1sLmxlbmd0aCxkPW5ldyBJbnQzMkFycmF5KGgpLGc9bmV3IEludDMyQXJyYXkoaCk7bGV0IHA7Zm9yKHA9MDtwPGg7cCsrKXtkW3BdPWxbcF0ueDtnW3BdPWxbcF0ueX1sZXQgbT11W2FdLnJlZmVyZW5jZTswPT09YSYmKG09bS5jb25jYXQoW29bMV1dKSk7Y29uc3QgYj1tLmxlbmd0aCx5PW5ldyBJbnQzMkFycmF5KGIpLHc9bmV3IEludDMyQXJyYXkoYik7Zm9yKHA9MDtwPGI7cCsrKXt5W3BdPW1bcF0ueDt3W3BdPW1bcF0ueX1jb25zdCBTPXJbMF0ubGVuZ3RoLHg9ci5sZW5ndGgsQz1mW2FdLGs9W10sdj1jLmRlY29kZXIsRj1jLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR1IiKTtsZXQgTz0wO2ZvcihsZXQgYT0wO2E8dDthKyspe2lmKHMpe09ePXYucmVhZEJpdChGLEMpO2lmKE8pdGhyb3cgbmV3IEpiaWcyRXJyb3IoInByZWRpY3Rpb24gaXMgbm90IHN1cHBvcnRlZCIpfWNvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZSk7ay5wdXNoKHQpO2ZvcihsZXQgcz0wO3M8ZTtzKyspe2xldCBvLGMsbD0wO2ZvcihwPTA7cDxoO3ArKyl7bz1hK2dbcF07Yz1zK2RbcF07bzwwfHxjPDB8fGM+PWU/bDw8PTE6bD1sPDwxfGtbb11bY119Zm9yKHA9MDtwPGI7cCsrKXtvPWErd1twXS1uO2M9cyt5W3BdLWk7bzwwfHxvPj14fHxjPDB8fGM+PVM/bDw8PTE6bD1sPDwxfHJbb11bY119Y29uc3QgdT12LnJlYWRCaXQoRixsKTt0W3NdPXV9fXJldHVybiBrfWZ1bmN0aW9uIGRlY29kZVRleHRSZWdpb24oZSx0LGEscixpLG4scyxvLGMsbCxoLHUsZCxmLGcscCxtLGIseSl7aWYoZSYmdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO2NvbnN0IHc9W107bGV0IFMseDtmb3IoUz0wO1M8cjtTKyspe3g9bmV3IFVpbnQ4QXJyYXkoYSk7aWYoaSlmb3IobGV0IGU9MDtlPGE7ZSsrKXhbZV09aTt3LnB1c2goeCl9Y29uc3QgQz1tLmRlY29kZXIsaz1tLmNvbnRleHRDYWNoZTtsZXQgdj1lPy1mLnRhYmxlRGVsdGFULmRlY29kZSh5KTotZGVjb2RlSW50ZWdlcihrLCJJQURUIixDKSxGPTA7Uz0wO2Zvcig7UzxuOyl7dis9ZT9mLnRhYmxlRGVsdGFULmRlY29kZSh5KTpkZWNvZGVJbnRlZ2VyKGssIklBRFQiLEMpO0YrPWU/Zi50YWJsZUZpcnN0Uy5kZWNvZGUoeSk6ZGVjb2RlSW50ZWdlcihrLCJJQUZTIixDKTtsZXQgcj1GO2Zvcig7Oyl7bGV0IGk9MDtzPjEmJihpPWU/eS5yZWFkQml0cyhiKTpkZWNvZGVJbnRlZ2VyKGssIklBSVQiLEMpKTtjb25zdCBuPXMqditpLEY9ZT9mLnN5bWJvbElEVGFibGUuZGVjb2RlKHkpOmRlY29kZUlBSUQoayxDLGMpLE89dCYmKGU/eS5yZWFkQml0KCk6ZGVjb2RlSW50ZWdlcihrLCJJQVJJIixDKSk7bGV0IFQ9b1tGXSxNPVRbMF0ubGVuZ3RoLEU9VC5sZW5ndGg7aWYoTyl7Y29uc3QgZT1kZWNvZGVJbnRlZ2VyKGssIklBUkRXIixDKSx0PWRlY29kZUludGVnZXIoaywiSUFSREgiLEMpO00rPWU7RSs9dDtUPWRlY29kZVJlZmluZW1lbnQoTSxFLGcsVCwoZT4+MSkrZGVjb2RlSW50ZWdlcihrLCJJQVJEWCIsQyksKHQ+PjEpK2RlY29kZUludGVnZXIoaywiSUFSRFkiLEMpLCExLHAsbSl9Y29uc3QgRD1uLSgxJnU/MDpFLTEpLE49ci0oMiZ1P00tMTowKTtsZXQgUixMLF87aWYobCl7Zm9yKFI9MDtSPEU7UisrKXt4PXdbTitSXTtpZigheCljb250aW51ZTtfPVRbUl07Y29uc3QgZT1NYXRoLm1pbihhLUQsTSk7c3dpdGNoKGQpe2Nhc2UgMDpmb3IoTD0wO0w8ZTtMKyspeFtEK0xdfD1fW0xdO2JyZWFrO2Nhc2UgMjpmb3IoTD0wO0w8ZTtMKyspeFtEK0xdXj1fW0xdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7ZH0gaXMgbm90IHN1cHBvcnRlZGApfX1yKz1FLTF9ZWxzZXtmb3IoTD0wO0w8RTtMKyspe3g9d1tEK0xdO2lmKHgpe189VFtMXTtzd2l0Y2goZCl7Y2FzZSAwOmZvcihSPTA7UjxNO1IrKyl4W04rUl18PV9bUl07YnJlYWs7Y2FzZSAyOmZvcihSPTA7UjxNO1IrKyl4W04rUl1ePV9bUl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtkfSBpcyBub3Qgc3VwcG9ydGVkYCl9fX1yKz1NLTF9UysrO2NvbnN0ICQ9ZT9mLnRhYmxlRGVsdGFTLmRlY29kZSh5KTpkZWNvZGVJbnRlZ2VyKGssIklBRFMiLEMpO2lmKG51bGw9PT0kKWJyZWFrO3IrPSQraH19cmV0dXJuIHd9ZnVuY3Rpb24gcmVhZFNlZ21lbnRIZWFkZXIoZSx0KXtjb25zdCBhPXt9O2EubnVtYmVyPSgwLGkucmVhZFVpbnQzMikoZSx0KTtjb25zdCByPWVbdCs0XSxuPTYzJnI7aWYoIWxbbl0pdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK24pO2EudHlwZT1uO2EudHlwZU5hbWU9bFtuXTthLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZyKTtjb25zdCBzPSEhKDY0JnIpLG89ZVt0KzVdO2xldCBjPW8+PjUmNztjb25zdCBoPVszMSZvXTtsZXQgdT10KzY7aWYoNz09PW8pe2M9NTM2ODcwOTExJigwLGkucmVhZFVpbnQzMikoZSx1LTEpO3UrPTM7bGV0IHQ9Yys3Pj4zO2hbMF09ZVt1KytdO2Zvcig7LS10PjA7KWgucHVzaChlW3UrK10pfWVsc2UgaWYoNT09PW98fDY9PT1vKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHJlZmVycmVkLXRvIGZsYWdzIik7YS5yZXRhaW5CaXRzPWg7bGV0IGQ9NDthLm51bWJlcjw9MjU2P2Q9MTphLm51bWJlcjw9NjU1MzYmJihkPTIpO2NvbnN0IGY9W107bGV0IHAsbTtmb3IocD0wO3A8YztwKyspe2xldCB0O3Q9MT09PWQ/ZVt1XToyPT09ZD8oMCxpLnJlYWRVaW50MTYpKGUsdSk6KDAsaS5yZWFkVWludDMyKShlLHUpO2YucHVzaCh0KTt1Kz1kfWEucmVmZXJyZWRUbz1mO2lmKHMpe2EucGFnZUFzc29jaWF0aW9uPSgwLGkucmVhZFVpbnQzMikoZSx1KTt1Kz00fWVsc2UgYS5wYWdlQXNzb2NpYXRpb249ZVt1KytdO2EubGVuZ3RoPSgwLGkucmVhZFVpbnQzMikoZSx1KTt1Kz00O2lmKDQyOTQ5NjcyOTU9PT1hLmxlbmd0aCl7aWYoMzghPT1uKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt7Y29uc3QgdD1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGUsdSkscj0hISgxJmVbdStnXSksaT02LG49bmV3IFVpbnQ4QXJyYXkoaSk7aWYoIXIpe25bMF09MjU1O25bMV09MTcyfW5bMl09dC5oZWlnaHQ+Pj4yNCYyNTU7blszXT10LmhlaWdodD4+MTYmMjU1O25bNF09dC5oZWlnaHQ+PjgmMjU1O25bNV09MjU1JnQuaGVpZ2h0O2ZvcihwPXUsbT1lLmxlbmd0aDtwPG07cCsrKXtsZXQgdD0wO2Zvcig7dDxpJiZuW3RdPT09ZVtwK3RdOyl0Kys7aWYodD09PWkpe2EubGVuZ3RoPXAraTticmVha319aWYoNDI5NDk2NzI5NT09PWEubGVuZ3RoKXRocm93IG5ldyBKYmlnMkVycm9yKCJzZWdtZW50IGVuZCB3YXMgbm90IGZvdW5kIil9fWEuaGVhZGVyRW5kPXU7cmV0dXJuIGF9ZnVuY3Rpb24gcmVhZFNlZ21lbnRzKGUsdCxhLHIpe2NvbnN0IGk9W107bGV0IG49YTtmb3IoO248cjspe2NvbnN0IGE9cmVhZFNlZ21lbnRIZWFkZXIodCxuKTtuPWEuaGVhZGVyRW5kO2NvbnN0IHI9e2hlYWRlcjphLGRhdGE6dH07aWYoIWUucmFuZG9tQWNjZXNzKXtyLnN0YXJ0PW47bis9YS5sZW5ndGg7ci5lbmQ9bn1pLnB1c2gocik7aWYoNTE9PT1hLnR5cGUpYnJlYWt9aWYoZS5yYW5kb21BY2Nlc3MpZm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSsrKXtpW2VdLnN0YXJ0PW47bis9aVtlXS5oZWFkZXIubGVuZ3RoO2lbZV0uZW5kPW59cmV0dXJuIGl9ZnVuY3Rpb24gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihlLHQpe3JldHVybnt3aWR0aDooMCxpLnJlYWRVaW50MzIpKGUsdCksaGVpZ2h0OigwLGkucmVhZFVpbnQzMikoZSx0KzQpLHg6KDAsaS5yZWFkVWludDMyKShlLHQrOCkseTooMCxpLnJlYWRVaW50MzIpKGUsdCsxMiksY29tYmluYXRpb25PcGVyYXRvcjo3JmVbdCsxNl19fWNvbnN0IGc9MTc7ZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnQoZSx0KXtjb25zdCBhPWUuaGVhZGVyLHI9ZS5kYXRhLG49ZS5lbmQ7bGV0IHMsbyxjLGwsaD1lLnN0YXJ0O3N3aXRjaChhLnR5cGUpe2Nhc2UgMDpjb25zdCBlPXt9LHQ9KDAsaS5yZWFkVWludDE2KShyLGgpO2UuaHVmZm1hbj0hISgxJnQpO2UucmVmaW5lbWVudD0hISgyJnQpO2UuaHVmZm1hbkRIU2VsZWN0b3I9dD4+MiYzO2UuaHVmZm1hbkRXU2VsZWN0b3I9dD4+NCYzO2UuYml0bWFwU2l6ZVNlbGVjdG9yPXQ+PjYmMTtlLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9dD4+NyYxO2UuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JnQpO2UuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZ0KTtlLnRlbXBsYXRlPXQ+PjEwJjM7ZS5yZWZpbmVtZW50VGVtcGxhdGU9dD4+MTImMTtoKz0yO2lmKCFlLmh1ZmZtYW4pe2w9MD09PWUudGVtcGxhdGU/NDoxO289W107Zm9yKGM9MDtjPGw7YysrKXtvLnB1c2goe3g6KDAsaS5yZWFkSW50OCkocixoKSx5OigwLGkucmVhZEludDgpKHIsaCsxKX0pO2grPTJ9ZS5hdD1vfWlmKGUucmVmaW5lbWVudCYmIWUucmVmaW5lbWVudFRlbXBsYXRlKXtvPVtdO2ZvcihjPTA7YzwyO2MrKyl7by5wdXNoKHt4OigwLGkucmVhZEludDgpKHIsaCkseTooMCxpLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfWUucmVmaW5lbWVudEF0PW99ZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scz0oMCxpLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtlLm51bWJlck9mTmV3U3ltYm9scz0oMCxpLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtzPVtlLGEubnVtYmVyLGEucmVmZXJyZWRUbyxyLGgsbl07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjb25zdCB1PXt9O3UuaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKHIsaCk7aCs9Zztjb25zdCBkPSgwLGkucmVhZFVpbnQxNikocixoKTtoKz0yO3UuaHVmZm1hbj0hISgxJmQpO3UucmVmaW5lbWVudD0hISgyJmQpO3UubG9nU3RyaXBTaXplPWQ+PjImMzt1LnN0cmlwU2l6ZT0xPDx1LmxvZ1N0cmlwU2l6ZTt1LnJlZmVyZW5jZUNvcm5lcj1kPj40JjM7dS50cmFuc3Bvc2VkPSEhKDY0JmQpO3UuY29tYmluYXRpb25PcGVyYXRvcj1kPj43JjM7dS5kZWZhdWx0UGl4ZWxWYWx1ZT1kPj45JjE7dS5kc09mZnNldD1kPDwxNz4+Mjc7dS5yZWZpbmVtZW50VGVtcGxhdGU9ZD4+MTUmMTtpZih1Lmh1ZmZtYW4pe2NvbnN0IGU9KDAsaS5yZWFkVWludDE2KShyLGgpO2grPTI7dS5odWZmbWFuRlM9MyZlO3UuaHVmZm1hbkRTPWU+PjImMzt1Lmh1ZmZtYW5EVD1lPj40JjM7dS5odWZmbWFuUmVmaW5lbWVudERXPWU+PjYmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50REg9ZT4+OCYzO3UuaHVmZm1hblJlZmluZW1lbnREWD1lPj4xMCYzO3UuaHVmZm1hblJlZmluZW1lbnREWT1lPj4xMiYzO3UuaHVmZm1hblJlZmluZW1lbnRTaXplU2VsZWN0b3I9ISEoMTYzODQmZSl9aWYodS5yZWZpbmVtZW50JiYhdS5yZWZpbmVtZW50VGVtcGxhdGUpe289W107Zm9yKGM9MDtjPDI7YysrKXtvLnB1c2goe3g6KDAsaS5yZWFkSW50OCkocixoKSx5OigwLGkucmVhZEludDgpKHIsaCsxKX0pO2grPTJ9dS5yZWZpbmVtZW50QXQ9b311Lm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLGkucmVhZFVpbnQzMikocixoKTtoKz00O3M9W3UsYS5yZWZlcnJlZFRvLHIsaCxuXTticmVhaztjYXNlIDE2OmNvbnN0IGY9e30scD1yW2grK107Zi5tbXI9ISEoMSZwKTtmLnRlbXBsYXRlPXA+PjEmMztmLnBhdHRlcm5XaWR0aD1yW2grK107Zi5wYXR0ZXJuSGVpZ2h0PXJbaCsrXTtmLm1heFBhdHRlcm5JbmRleD0oMCxpLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtzPVtmLGEubnVtYmVyLHIsaCxuXTticmVhaztjYXNlIDIyOmNhc2UgMjM6Y29uc3QgbT17fTttLmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihyLGgpO2grPWc7Y29uc3QgYj1yW2grK107bS5tbXI9ISEoMSZiKTttLnRlbXBsYXRlPWI+PjEmMzttLmVuYWJsZVNraXA9ISEoOCZiKTttLmNvbWJpbmF0aW9uT3BlcmF0b3I9Yj4+NCY3O20uZGVmYXVsdFBpeGVsVmFsdWU9Yj4+NyYxO20uZ3JpZFdpZHRoPSgwLGkucmVhZFVpbnQzMikocixoKTtoKz00O20uZ3JpZEhlaWdodD0oMCxpLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShyLGgpO2grPTQ7bS5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLGkucmVhZFVpbnQzMikocixoKTtoKz00O20uZ3JpZFZlY3Rvclg9KDAsaS5yZWFkVWludDE2KShyLGgpO2grPTI7bS5ncmlkVmVjdG9yWT0oMCxpLnJlYWRVaW50MTYpKHIsaCk7aCs9MjtzPVttLGEucmVmZXJyZWRUbyxyLGgsbl07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNvbnN0IHk9e307eS5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24ocixoKTtoKz1nO2NvbnN0IHc9cltoKytdO3kubW1yPSEhKDEmdyk7eS50ZW1wbGF0ZT13Pj4xJjM7eS5wcmVkaWN0aW9uPSEhKDgmdyk7aWYoIXkubW1yKXtsPTA9PT15LnRlbXBsYXRlPzQ6MTtvPVtdO2ZvcihjPTA7YzxsO2MrKyl7by5wdXNoKHt4OigwLGkucmVhZEludDgpKHIsaCkseTooMCxpLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfXkuYXQ9b31zPVt5LHIsaCxuXTticmVhaztjYXNlIDQ4OmNvbnN0IFM9e3dpZHRoOigwLGkucmVhZFVpbnQzMikocixoKSxoZWlnaHQ6KDAsaS5yZWFkVWludDMyKShyLGgrNCkscmVzb2x1dGlvblg6KDAsaS5yZWFkVWludDMyKShyLGgrOCkscmVzb2x1dGlvblk6KDAsaS5yZWFkVWludDMyKShyLGgrMTIpfTs0Mjk0OTY3Mjk1PT09Uy5oZWlnaHQmJmRlbGV0ZSBTLmhlaWdodDtjb25zdCB4PXJbaCsxNl07KDAsaS5yZWFkVWludDE2KShyLGgrMTcpO1MubG9zc2xlc3M9ISEoMSZ4KTtTLnJlZmluZW1lbnQ9ISEoMiZ4KTtTLmRlZmF1bHRQaXhlbFZhbHVlPXg+PjImMTtTLmNvbWJpbmF0aW9uT3BlcmF0b3I9eD4+MyYzO1MucmVxdWlyZXNCdWZmZXI9ISEoMzImeCk7Uy5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmeCk7cz1bU107YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnM9W2EubnVtYmVyLHIsaCxuXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBzZWdtZW50IHR5cGUgJHthLnR5cGVOYW1lfSgke2EudHlwZX0pIGlzIG5vdCBpbXBsZW1lbnRlZGApfWNvbnN0IHU9Im9uIithLnR5cGVOYW1lO3UgaW4gdCYmdFt1XS5hcHBseSh0LHMpfWZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50cyhlLHQpe2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKylwcm9jZXNzU2VnbWVudChlW2FdLHQpfWNsYXNzIFNpbXBsZVNlZ21lbnRWaXNpdG9ye29uUGFnZUluZm9ybWF0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7Y29uc3QgdD1lLndpZHRoKzc+PjMsYT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCplLmhlaWdodCk7ZS5kZWZhdWx0UGl4ZWxWYWx1ZSYmYS5maWxsKDI1NSk7dGhpcy5idWZmZXI9YX1kcmF3Qml0bWFwKGUsdCl7Y29uc3QgYT10aGlzLmN1cnJlbnRQYWdlSW5mbyxyPWUud2lkdGgsaT1lLmhlaWdodCxuPWEud2lkdGgrNz4+MyxzPWEuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlP2UuY29tYmluYXRpb25PcGVyYXRvcjphLmNvbWJpbmF0aW9uT3BlcmF0b3Isbz10aGlzLmJ1ZmZlcixjPTEyOD4+KDcmZS54KTtsZXQgbCxoLHUsZCxmPWUueSpuKyhlLng+PjMpO3N3aXRjaChzKXtjYXNlIDA6Zm9yKGw9MDtsPGk7bCsrKXt1PWM7ZD1mO2ZvcihoPTA7aDxyO2grKyl7dFtsXVtoXSYmKG9bZF18PXUpO3U+Pj0xO2lmKCF1KXt1PTEyODtkKyt9fWYrPW59YnJlYWs7Y2FzZSAyOmZvcihsPTA7bDxpO2wrKyl7dT1jO2Q9Zjtmb3IoaD0wO2g8cjtoKyspe3RbbF1baF0mJihvW2RdXj11KTt1Pj49MTtpZighdSl7dT0xMjg7ZCsrfX1mKz1ufWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7c30gaXMgbm90IHN1cHBvcnRlZGApfX1vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24oZSx0LGEscil7Y29uc3QgaT1lLmluZm8sbj1uZXcgRGVjb2RpbmdDb250ZXh0KHQsYSxyKSxzPWRlY29kZUJpdG1hcChlLm1tcixpLndpZHRoLGkuaGVpZ2h0LGUudGVtcGxhdGUsZS5wcmVkaWN0aW9uLG51bGwsZS5hdCxuKTt0aGlzLmRyYXdCaXRtYXAoaSxzKX1vbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbigpe3RoaXMub25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKC4uLmFyZ3VtZW50cyl9b25TeW1ib2xEaWN0aW9uYXJ5KGUsdCxhLHIsbixzKXtsZXQgbyxjO2lmKGUuaHVmZm1hbil7bz1mdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhlLHQsYSl7bGV0IHIsaSxuLHMsbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOnI9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpyPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EV1NlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOmk9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EV1NlbGVjdG9yKzIpO2JyZWFrO2Nhc2UgMzppPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEVyBzZWxlY3RvciIpfWlmKGUuYml0bWFwU2l6ZVNlbGVjdG9yKXtuPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk7bysrfWVsc2Ugbj1nZXRTdGFuZGFyZFRhYmxlKDEpO3M9ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP2dldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsYSk6Z2V0U3RhbmRhcmRUYWJsZSgxKTtyZXR1cm57dGFibGVEZWx0YUhlaWdodDpyLHRhYmxlRGVsdGFXaWR0aDppLHRhYmxlQml0bWFwU2l6ZTpuLHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzOnN9fShlLGEsdGhpcy5jdXN0b21UYWJsZXMpO2M9bmV3IFJlYWRlcihyLG4scyl9bGV0IGw9dGhpcy5zeW1ib2xzO2x8fCh0aGlzLnN5bWJvbHM9bD17fSk7Y29uc3QgaD1bXTtmb3IoY29uc3QgZSBvZiBhKXtjb25zdCB0PWxbZV07dCYmaC5wdXNoKC4uLnQpfWNvbnN0IHU9bmV3IERlY29kaW5nQ29udGV4dChyLG4scyk7bFt0XT1mdW5jdGlvbiBkZWNvZGVTeW1ib2xEaWN0aW9uYXJ5KGUsdCxhLHIsbixzLG8sYyxsLGgsdSxkKXtpZihlJiZ0KXRocm93IG5ldyBKYmlnMkVycm9yKCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO2NvbnN0IGY9W107bGV0IGc9MCxwPSgwLGkubG9nMikoYS5sZW5ndGgrcik7Y29uc3QgbT11LmRlY29kZXIsYj11LmNvbnRleHRDYWNoZTtsZXQgeSx3O2lmKGUpe3k9Z2V0U3RhbmRhcmRUYWJsZSgxKTt3PVtdO3A9TWF0aC5tYXgocCwxKX1mb3IoO2YubGVuZ3RoPHI7KXtnKz1lP3MudGFibGVEZWx0YUhlaWdodC5kZWNvZGUoZCk6ZGVjb2RlSW50ZWdlcihiLCJJQURIIixtKTtsZXQgcj0wLGk9MDtjb25zdCBuPWU/dy5sZW5ndGg6MDtmb3IoOzspe2NvbnN0IG49ZT9zLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoZCk6ZGVjb2RlSW50ZWdlcihiLCJJQURXIixtKTtpZihudWxsPT09bilicmVhaztyKz1uO2krPXI7bGV0IHk7aWYodCl7Y29uc3QgaT1kZWNvZGVJbnRlZ2VyKGIsIklBQUkiLG0pO2lmKGk+MSl5PWRlY29kZVRleHRSZWdpb24oZSx0LHIsZywwLGksMSxhLmNvbmNhdChmKSxwLDAsMCwxLDAscyxsLGgsdSwwLGQpO2Vsc2V7Y29uc3QgZT1kZWNvZGVJQUlEKGIsbSxwKSx0PWRlY29kZUludGVnZXIoYiwiSUFSRFgiLG0pLGk9ZGVjb2RlSW50ZWdlcihiLCJJQVJEWSIsbSk7eT1kZWNvZGVSZWZpbmVtZW50KHIsZyxsLGU8YS5sZW5ndGg/YVtlXTpmW2UtYS5sZW5ndGhdLHQsaSwhMSxoLHUpfWYucHVzaCh5KX1lbHNlIGlmKGUpdy5wdXNoKHIpO2Vsc2V7eT1kZWNvZGVCaXRtYXAoITEscixnLG8sITEsbnVsbCxjLHUpO2YucHVzaCh5KX19aWYoZSYmIXQpe2NvbnN0IGU9cy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKGQpO2QuYnl0ZUFsaWduKCk7bGV0IHQ7aWYoMD09PWUpdD1yZWFkVW5jb21wcmVzc2VkQml0bWFwKGQsaSxnKTtlbHNle2NvbnN0IGE9ZC5lbmQscj1kLnBvc2l0aW9uK2U7ZC5lbmQ9cjt0PWRlY29kZU1NUkJpdG1hcChkLGksZywhMSk7ZC5lbmQ9YTtkLnBvc2l0aW9uPXJ9Y29uc3QgYT13Lmxlbmd0aDtpZihuPT09YS0xKWYucHVzaCh0KTtlbHNle2xldCBlLHIsaSxzLG8sYz0wO2ZvcihlPW47ZTxhO2UrKyl7cz13W2VdO2k9YytzO289W107Zm9yKHI9MDtyPGc7cisrKW8ucHVzaCh0W3JdLnN1YmFycmF5KGMsaSkpO2YucHVzaChvKTtjPWl9fX19Y29uc3QgUz1bXSx4PVtdO2xldCBDLGssdj0hMTtjb25zdCBGPWEubGVuZ3RoK3I7Zm9yKDt4Lmxlbmd0aDxGOyl7bGV0IHQ9ZT95LmRlY29kZShkKTpkZWNvZGVJbnRlZ2VyKGIsIklBRVgiLG0pO2Zvcig7dC0tOyl4LnB1c2godik7dj0hdn1mb3IoQz0wLGs9YS5sZW5ndGg7QzxrO0MrKyl4W0NdJiZTLnB1c2goYVtDXSk7Zm9yKGxldCBlPTA7ZTxyO0MrKyxlKyspeFtDXSYmUy5wdXNoKGZbZV0pO3JldHVybiBTfShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGgsZS5udW1iZXJPZk5ld1N5bWJvbHMsZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scyxvLGUudGVtcGxhdGUsZS5hdCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCx1LGMpfW9uSW1tZWRpYXRlVGV4dFJlZ2lvbihlLHQsYSxyLG4pe2NvbnN0IHM9ZS5pbmZvO2xldCBvLGM7Y29uc3QgbD10aGlzLnN5bWJvbHMsaD1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWxbZV07dCYmaC5wdXNoKC4uLnQpfWNvbnN0IHU9KDAsaS5sb2cyKShoLmxlbmd0aCk7aWYoZS5odWZmbWFuKXtjPW5ldyBSZWFkZXIoYSxyLG4pO289ZnVuY3Rpb24gZ2V0VGV4dFJlZ2lvbkh1ZmZtYW5UYWJsZXMoZSx0LGEscixpKXtjb25zdCBuPVtdO2ZvcihsZXQgZT0wO2U8PTM0O2UrKyl7Y29uc3QgdD1pLnJlYWRCaXRzKDQpO24ucHVzaChuZXcgSHVmZm1hbkxpbmUoW2UsdCwwLDBdKSl9Y29uc3Qgcz1uZXcgSHVmZm1hblRhYmxlKG4sITEpO24ubGVuZ3RoPTA7Zm9yKGxldCBlPTA7ZTxyOyl7Y29uc3QgdD1zLmRlY29kZShpKTtpZih0Pj0zMil7bGV0IGEscixzO3N3aXRjaCh0KXtjYXNlIDMyOmlmKDA9PT1lKXRocm93IG5ldyBKYmlnMkVycm9yKCJubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGUiKTtyPWkucmVhZEJpdHMoMikrMzthPW5bZS0xXS5wcmVmaXhMZW5ndGg7YnJlYWs7Y2FzZSAzMzpyPWkucmVhZEJpdHMoMykrMzthPTA7YnJlYWs7Y2FzZSAzNDpyPWkucmVhZEJpdHMoNykrMTE7YT0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgY29kZSBsZW5ndGggaW4gc3ltYm9sIElEIHRhYmxlIil9Zm9yKHM9MDtzPHI7cysrKXtuLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLGEsMCwwXSkpO2UrK319ZWxzZXtuLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLHQsMCwwXSkpO2UrK319aS5ieXRlQWxpZ24oKTtjb25zdCBvPW5ldyBIdWZmbWFuVGFibGUobiwhMSk7bGV0IGMsbCxoLHU9MDtzd2l0Y2goZS5odWZmbWFuRlMpe2Nhc2UgMDpjYXNlIDE6Yz1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkZTKzYpO2JyZWFrO2Nhc2UgMzpjPWdldEN1c3RvbUh1ZmZtYW5UYWJsZSh1LHQsYSk7dSsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBGUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EUyl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6bD1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRTKzgpO2JyZWFrO2Nhc2UgMzpsPWdldEN1c3RvbUh1ZmZtYW5UYWJsZSh1LHQsYSk7dSsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6aD1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6aD1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFQgc2VsZWN0b3IiKX1pZihlLnJlZmluZW1lbnQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm57c3ltYm9sSURUYWJsZTpvLHRhYmxlRmlyc3RTOmMsdGFibGVEZWx0YVM6bCx0YWJsZURlbHRhVDpofX0oZSx0LHRoaXMuY3VzdG9tVGFibGVzLGgubGVuZ3RoLGMpfWNvbnN0IGQ9bmV3IERlY29kaW5nQ29udGV4dChhLHIsbiksZj1kZWNvZGVUZXh0UmVnaW9uKGUuaHVmZm1hbixlLnJlZmluZW1lbnQscy53aWR0aCxzLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsZS5zdHJpcFNpemUsaCx1LGUudHJhbnNwb3NlZCxlLmRzT2Zmc2V0LGUucmVmZXJlbmNlQ29ybmVyLGUuY29tYmluYXRpb25PcGVyYXRvcixvLGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LGQsZS5sb2dTdHJpcFNpemUsYyk7dGhpcy5kcmF3Qml0bWFwKHMsZil9b25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlVGV4dFJlZ2lvbiguLi5hcmd1bWVudHMpfW9uUGF0dGVybkRpY3Rpb25hcnkoZSx0LGEscixpKXtsZXQgbj10aGlzLnBhdHRlcm5zO258fCh0aGlzLnBhdHRlcm5zPW49e30pO2NvbnN0IHM9bmV3IERlY29kaW5nQ29udGV4dChhLHIsaSk7blt0XT1mdW5jdGlvbiBkZWNvZGVQYXR0ZXJuRGljdGlvbmFyeShlLHQsYSxyLGksbil7Y29uc3Qgcz1bXTtpZighZSl7cy5wdXNoKHt4Oi10LHk6MH0pOzA9PT1pJiZzLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSl9Y29uc3Qgbz1kZWNvZGVCaXRtYXAoZSwocisxKSp0LGEsaSwhMSxudWxsLHMsbiksYz1bXTtmb3IobGV0IGU9MDtlPD1yO2UrKyl7Y29uc3Qgcj1bXSxpPXQqZSxuPWkrdDtmb3IobGV0IGU9MDtlPGE7ZSsrKXIucHVzaChvW2VdLnN1YmFycmF5KGksbikpO2MucHVzaChyKX1yZXR1cm4gY30oZS5tbXIsZS5wYXR0ZXJuV2lkdGgsZS5wYXR0ZXJuSGVpZ2h0LGUubWF4UGF0dGVybkluZGV4LGUudGVtcGxhdGUscyl9b25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihlLHQsYSxyLG4pe2NvbnN0IHM9dGhpcy5wYXR0ZXJuc1t0WzBdXSxvPWUuaW5mbyxjPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLG4pLGw9ZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24oZSx0LGEscixuLHMsbyxjLGwsaCx1LGQsZixnLHApe2lmKG8pdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNraXAgaXMgbm90IHN1cHBvcnRlZCIpO2lmKDAhPT1jKXRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAiJHtjfSIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb25gKTtjb25zdCBtPVtdO2xldCBiLHksdztmb3IoYj0wO2I8bjtiKyspe3c9bmV3IFVpbnQ4QXJyYXkocik7aWYocylmb3IoeT0wO3k8cjt5Kyspd1t5XT1zO20ucHVzaCh3KX1jb25zdCBTPXQubGVuZ3RoLHg9dFswXSxDPXhbMF0ubGVuZ3RoLGs9eC5sZW5ndGgsdj0oMCxpLmxvZzIpKFMpLEY9W107aWYoIWUpe0YucHVzaCh7eDphPD0xPzM6Mix5Oi0xfSk7MD09PWEmJkYucHVzaCh7eDotMyx5Oi0xfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTJ9KX1jb25zdCBPPVtdO2xldCBULE0sRSxELE4sUixMLF8sJCxqLFU7ZSYmKFQ9bmV3IFJlYWRlcihwLmRhdGEscC5zdGFydCxwLmVuZCkpO2ZvcihiPXYtMTtiPj0wO2ItLSl7TT1lP2RlY29kZU1NUkJpdG1hcChULGwsaCwhMCk6ZGVjb2RlQml0bWFwKCExLGwsaCxhLCExLG51bGwsRixwKTtPW2JdPU19Zm9yKEU9MDtFPGg7RSsrKWZvcihEPTA7RDxsO0QrKyl7Tj0wO1I9MDtmb3IoeT12LTE7eT49MDt5LS0pe05ePU9beV1bRV1bRF07Unw9Tjw8eX1MPXRbUl07Xz11K0UqZytEKmY+Pjg7JD1kK0UqZi1EKmc+Pjg7aWYoXz49MCYmXytDPD1yJiYkPj0wJiYkK2s8PW4pZm9yKGI9MDtiPGs7YisrKXtVPW1bJCtiXTtqPUxbYl07Zm9yKHk9MDt5PEM7eSsrKVVbXyt5XXw9alt5XX1lbHNle2xldCBlLHQ7Zm9yKGI9MDtiPGs7YisrKXt0PSQrYjtpZighKHQ8MHx8dD49bikpe1U9bVt0XTtqPUxbYl07Zm9yKHk9MDt5PEM7eSsrKXtlPV8reTtlPj0wJiZlPHImJihVW2VdfD1qW3ldKX19fX19cmV0dXJuIG19KGUubW1yLHMsZS50ZW1wbGF0ZSxvLndpZHRoLG8uaGVpZ2h0LGUuZGVmYXVsdFBpeGVsVmFsdWUsZS5lbmFibGVTa2lwLGUuY29tYmluYXRpb25PcGVyYXRvcixlLmdyaWRXaWR0aCxlLmdyaWRIZWlnaHQsZS5ncmlkT2Zmc2V0WCxlLmdyaWRPZmZzZXRZLGUuZ3JpZFZlY3RvclgsZS5ncmlkVmVjdG9yWSxjKTt0aGlzLmRyYXdCaXRtYXAobyxsKX1vbkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24oLi4uYXJndW1lbnRzKX1vblRhYmxlcyhlLHQsYSxyKXtsZXQgbj10aGlzLmN1c3RvbVRhYmxlcztufHwodGhpcy5jdXN0b21UYWJsZXM9bj17fSk7bltlXT1mdW5jdGlvbiBkZWNvZGVUYWJsZXNTZWdtZW50KGUsdCxhKXtjb25zdCByPWVbdF0sbj00Mjk0OTY3Mjk1JigwLGkucmVhZFVpbnQzMikoZSx0KzEpLHM9NDI5NDk2NzI5NSYoMCxpLnJlYWRVaW50MzIpKGUsdCs1KSxvPW5ldyBSZWFkZXIoZSx0KzksYSksYz0xKyhyPj4xJjcpLGw9MSsocj4+NCY3KSxoPVtdO2xldCB1LGQsZj1uO2Rve3U9by5yZWFkQml0cyhjKTtkPW8ucmVhZEJpdHMobCk7aC5wdXNoKG5ldyBIdWZmbWFuTGluZShbZix1LGQsMF0pKTtmKz0xPDxkfXdoaWxlKGY8cyk7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW24tMSx1LDMyLDAsImxvd2VyIl0pKTt1PW8ucmVhZEJpdHMoYyk7aC5wdXNoKG5ldyBIdWZmbWFuTGluZShbcyx1LDMyLDBdKSk7aWYoMSZyKXt1PW8ucmVhZEJpdHMoYyk7aC5wdXNoKG5ldyBIdWZmbWFuTGluZShbdSwwXSkpfXJldHVybiBuZXcgSHVmZm1hblRhYmxlKGgsITEpfSh0LGEscil9fWNsYXNzIEh1ZmZtYW5MaW5le2NvbnN0cnVjdG9yKGUpe2lmKDI9PT1lLmxlbmd0aCl7dGhpcy5pc09PQj0hMDt0aGlzLnJhbmdlTG93PTA7dGhpcy5wcmVmaXhMZW5ndGg9ZVswXTt0aGlzLnJhbmdlTGVuZ3RoPTA7dGhpcy5wcmVmaXhDb2RlPWVbMV07dGhpcy5pc0xvd2VyUmFuZ2U9ITF9ZWxzZXt0aGlzLmlzT09CPSExO3RoaXMucmFuZ2VMb3c9ZVswXTt0aGlzLnByZWZpeExlbmd0aD1lWzFdO3RoaXMucmFuZ2VMZW5ndGg9ZVsyXTt0aGlzLnByZWZpeENvZGU9ZVszXTt0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09ZVs0XX19fWNsYXNzIEh1ZmZtYW5UcmVlTm9kZXtjb25zdHJ1Y3RvcihlKXt0aGlzLmNoaWxkcmVuPVtdO2lmKGUpe3RoaXMuaXNMZWFmPSEwO3RoaXMucmFuZ2VMZW5ndGg9ZS5yYW5nZUxlbmd0aDt0aGlzLnJhbmdlTG93PWUucmFuZ2VMb3c7dGhpcy5pc0xvd2VyUmFuZ2U9ZS5pc0xvd2VyUmFuZ2U7dGhpcy5pc09PQj1lLmlzT09CfWVsc2UgdGhpcy5pc0xlYWY9ITF9YnVpbGRUcmVlKGUsdCl7Y29uc3QgYT1lLnByZWZpeENvZGU+PnQmMTtpZih0PD0wKXRoaXMuY2hpbGRyZW5bYV09bmV3IEh1ZmZtYW5UcmVlTm9kZShlKTtlbHNle2xldCByPXRoaXMuY2hpbGRyZW5bYV07cnx8KHRoaXMuY2hpbGRyZW5bYV09cj1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpKTtyLmJ1aWxkVHJlZShlLHQtMSl9fWRlY29kZU5vZGUoZSl7aWYodGhpcy5pc0xlYWYpe2lmKHRoaXMuaXNPT0IpcmV0dXJuIG51bGw7Y29uc3QgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX1jb25zdCB0PXRoaXMuY2hpbGRyZW5bZS5yZWFkQml0KCldO2lmKCF0KXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gZGF0YSIpO3JldHVybiB0LmRlY29kZU5vZGUoZSl9fWNsYXNzIEh1ZmZtYW5UYWJsZXtjb25zdHJ1Y3RvcihlLHQpe3R8fHRoaXMuYXNzaWduUHJlZml4Q29kZXMoZSk7dGhpcy5yb290Tm9kZT1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1lW3RdO2EucHJlZml4TGVuZ3RoPjAmJnRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKGEsYS5wcmVmaXhMZW5ndGgtMSl9fWRlY29kZShlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfWFzc2lnblByZWZpeENvZGVzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MDtmb3IobGV0IHI9MDtyPHQ7cisrKWE9TWF0aC5tYXgoYSxlW3JdLnByZWZpeExlbmd0aCk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkoYSsxKTtmb3IobGV0IGE9MDthPHQ7YSsrKXJbZVthXS5wcmVmaXhMZW5ndGhdKys7bGV0IGksbixzLG89MSxjPTA7clswXT0wO2Zvcig7bzw9YTspe2M9YytyW28tMV08PDE7aT1jO249MDtmb3IoO248dDspe3M9ZVtuXTtpZihzLnByZWZpeExlbmd0aD09PW8pe3MucHJlZml4Q29kZT1pO2krK31uKyt9bysrfX19Y29uc3QgcD17fTtmdW5jdGlvbiBnZXRTdGFuZGFyZFRhYmxlKGUpe2xldCB0LGE9cFtlXTtpZihhKXJldHVybiBhO3N3aXRjaChlKXtjYXNlIDE6dD1bWzAsMSw0LDBdLFsxNiwyLDgsMl0sWzI3MiwzLDE2LDZdLFs2NTgwOCwzLDMyLDddXTticmVhaztjYXNlIDI6dD1bWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbNzUsNiwzMiw2Ml0sWzYsNjNdXTticmVhaztjYXNlIDM6dD1bWy0yNTYsOCw4LDI1NF0sWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbLTI1Nyw4LDMyLDI1NSwibG93ZXIiXSxbNzUsNywzMiwxMjZdLFs2LDYyXV07YnJlYWs7Y2FzZSA0OnQ9W1sxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWzc2LDUsMzIsMzFdXTticmVhaztjYXNlIDU6dD1bWy0yNTUsNyw4LDEyNl0sWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDAsNl0sWzQsNCwzLDE0XSxbMTIsNSw2LDMwXSxbLTI1Niw3LDMyLDEyNywibG93ZXIiXSxbNzYsNiwzMiw2Ml1dO2JyZWFrO2Nhc2UgNjp0PVtbLTIwNDgsNSwxMCwyOF0sWy0xMDI0LDQsOSw4XSxbLTUxMiw0LDgsOV0sWy0yNTYsNCw3LDEwXSxbLTEyOCw1LDYsMjldLFstNjQsNSw1LDMwXSxbLTMyLDQsNSwxMV0sWzAsMiw3LDBdLFsxMjgsMyw3LDJdLFsyNTYsMyw4LDNdLFs1MTIsNCw5LDEyXSxbMTAyNCw0LDEwLDEzXSxbLTIwNDksNiwzMiw2MiwibG93ZXIiXSxbMjA0OCw2LDMyLDYzXV07YnJlYWs7Y2FzZSA3OnQ9W1stMTAyNCw0LDksOF0sWy01MTIsMyw4LDBdLFstMjU2LDQsNyw5XSxbLTEyOCw1LDYsMjZdLFstNjQsNSw1LDI3XSxbLTMyLDQsNSwxMF0sWzAsNCw1LDExXSxbMzIsNSw1LDI4XSxbNjQsNSw2LDI5XSxbMTI4LDQsNywxMl0sWzI1NiwzLDgsMV0sWzUxMiwzLDksMl0sWzEwMjQsMywxMCwzXSxbLTEwMjUsNSwzMiwzMCwibG93ZXIiXSxbMjA0OCw1LDMyLDMxXV07YnJlYWs7Y2FzZSA4OnQ9W1stMTUsOCwzLDI1Ml0sWy03LDksMSw1MDhdLFstNSw4LDEsMjUzXSxbLTMsOSwwLDUwOV0sWy0yLDcsMCwxMjRdLFstMSw0LDAsMTBdLFswLDIsMSwwXSxbMiw1LDAsMjZdLFszLDYsMCw1OF0sWzQsMyw0LDRdLFsyMCw2LDEsNTldLFsyMiw0LDQsMTFdLFszOCw0LDUsMTJdLFs3MCw1LDYsMjddLFsxMzQsNSw3LDI4XSxbMjYyLDYsNyw2MF0sWzM5MCw3LDgsMTI1XSxbNjQ2LDYsMTAsNjFdLFstMTYsOSwzMiw1MTAsImxvd2VyIl0sWzE2NzAsOSwzMiw1MTFdLFsyLDFdXTticmVhaztjYXNlIDk6dD1bWy0zMSw4LDQsMjUyXSxbLTE1LDksMiw1MDhdLFstMTEsOCwyLDI1M10sWy03LDksMSw1MDldLFstNSw3LDEsMTI0XSxbLTMsNCwxLDEwXSxbLTEsMywxLDJdLFsxLDMsMSwzXSxbMyw1LDEsMjZdLFs1LDYsMSw1OF0sWzcsMyw1LDRdLFszOSw2LDIsNTldLFs0Myw0LDUsMTFdLFs3NSw0LDYsMTJdLFsxMzksNSw3LDI3XSxbMjY3LDUsOCwyOF0sWzUyMyw2LDgsNjBdLFs3NzksNyw5LDEyNV0sWzEyOTEsNiwxMSw2MV0sWy0zMiw5LDMyLDUxMCwibG93ZXIiXSxbMzMzOSw5LDMyLDUxMV0sWzIsMF1dO2JyZWFrO2Nhc2UgMTA6dD1bWy0yMSw3LDQsMTIyXSxbLTUsOCwwLDI1Ml0sWy00LDcsMCwxMjNdLFstMyw1LDAsMjRdLFstMiwyLDIsMF0sWzIsNSwwLDI1XSxbMyw2LDAsNTRdLFs0LDcsMCwxMjRdLFs1LDgsMCwyNTNdLFs2LDIsNiwxXSxbNzAsNSw1LDI2XSxbMTAyLDYsNSw1NV0sWzEzNCw2LDYsNTZdLFsxOTgsNiw3LDU3XSxbMzI2LDYsOCw1OF0sWzU4Miw2LDksNTldLFsxMDk0LDYsMTAsNjBdLFsyMTE4LDcsMTEsMTI1XSxbLTIyLDgsMzIsMjU0LCJsb3dlciJdLFs0MTY2LDgsMzIsMjU1XSxbMiwyXV07YnJlYWs7Y2FzZSAxMTp0PVtbMSwxLDAsMF0sWzIsMiwxLDJdLFs0LDQsMCwxMl0sWzUsNCwxLDEzXSxbNyw1LDEsMjhdLFs5LDUsMiwyOV0sWzEzLDYsMiw2MF0sWzE3LDcsMiwxMjJdLFsyMSw3LDMsMTIzXSxbMjksNyw0LDEyNF0sWzQ1LDcsNSwxMjVdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxMjp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMSw2XSxbNSw1LDAsMjhdLFs2LDUsMSwyOV0sWzgsNiwxLDYwXSxbMTAsNywwLDEyMl0sWzExLDcsMSwxMjNdLFsxMyw3LDIsMTI0XSxbMTcsNywzLDEyNV0sWzI1LDcsNCwxMjZdLFs0MSw4LDUsMjU0XSxbNzMsOCwzMiwyNTVdXTticmVhaztjYXNlIDEzOnQ9W1sxLDEsMCwwXSxbMiwzLDAsNF0sWzMsNCwwLDEyXSxbNCw1LDAsMjhdLFs1LDQsMSwxM10sWzcsMywzLDVdLFsxNSw2LDEsNThdLFsxNyw2LDIsNTldLFsyMSw2LDMsNjBdLFsyOSw2LDQsNjFdLFs0NSw2LDUsNjJdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxNDp0PVtbLTIsMywwLDRdLFstMSwzLDAsNV0sWzAsMSwwLDBdLFsxLDMsMCw2XSxbMiwzLDAsN11dO2JyZWFrO2Nhc2UgMTU6dD1bWy0yNCw3LDQsMTI0XSxbLTgsNiwyLDYwXSxbLTQsNSwxLDI4XSxbLTIsNCwwLDEyXSxbLTEsMywwLDRdLFswLDEsMCwwXSxbMSwzLDAsNV0sWzIsNCwwLDEzXSxbMyw1LDEsMjldLFs1LDYsMiw2MV0sWzksNyw0LDEyNV0sWy0yNSw3LDMyLDEyNiwibG93ZXIiXSxbMjUsNywzMiwxMjddXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBzdGFuZGFyZCB0YWJsZSBCLiR7ZX0gZG9lcyBub3QgZXhpc3RgKX1mb3IobGV0IGU9MCxhPXQubGVuZ3RoO2U8YTtlKyspdFtlXT1uZXcgSHVmZm1hbkxpbmUodFtlXSk7YT1uZXcgSHVmZm1hblRhYmxlKHQsITApO3BbZV09YTtyZXR1cm4gYX1jbGFzcyBSZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuZGF0YT1lO3RoaXMuc3RhcnQ9dDt0aGlzLmVuZD1hO3RoaXMucG9zaXRpb249dDt0aGlzLnNoaWZ0PS0xO3RoaXMuY3VycmVudEJ5dGU9MH1yZWFkQml0KCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgSmJpZzJFcnJvcigiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdO3RoaXMuc2hpZnQ9N31jb25zdCBlPXRoaXMuY3VycmVudEJ5dGU+PnRoaXMuc2hpZnQmMTt0aGlzLnNoaWZ0LS07cmV0dXJuIGV9cmVhZEJpdHMoZSl7bGV0IHQsYT0wO2Zvcih0PWUtMTt0Pj0wO3QtLSlhfD10aGlzLnJlYWRCaXQoKTw8dDtyZXR1cm4gYX1ieXRlQWxpZ24oKXt0aGlzLnNoaWZ0PS0xfW5leHQoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj49dGhpcy5lbmQ/LTE6dGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK119fWZ1bmN0aW9uIGdldEN1c3RvbUh1ZmZtYW5UYWJsZShlLHQsYSl7bGV0IHI9MDtmb3IobGV0IGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspe2NvbnN0IG49YVt0W2ldXTtpZihuKXtpZihlPT09cilyZXR1cm4gbjtyKyt9fXRocm93IG5ldyBKYmlnMkVycm9yKCJjYW4ndCBmaW5kIGN1c3RvbSBIdWZmbWFuIHRhYmxlIil9ZnVuY3Rpb24gcmVhZFVuY29tcHJlc3NlZEJpdG1hcChlLHQsYSl7Y29uc3Qgcj1bXTtmb3IobGV0IGk9MDtpPGE7aSsrKXtjb25zdCBhPW5ldyBVaW50OEFycmF5KHQpO3IucHVzaChhKTtmb3IobGV0IHI9MDtyPHQ7cisrKWFbcl09ZS5yZWFkQml0KCk7ZS5ieXRlQWxpZ24oKX1yZXR1cm4gcn1mdW5jdGlvbiBkZWNvZGVNTVJCaXRtYXAoZSx0LGEscil7Y29uc3QgaT17SzotMSxDb2x1bW5zOnQsUm93czphLEJsYWNrSXMxOiEwLEVuZE9mQmxvY2s6cn0sbj1uZXcgcy5DQ0lUVEZheERlY29kZXIoZSxpKSxvPVtdO2xldCBjLGw9ITE7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3QgZT1uZXcgVWludDhBcnJheSh0KTtvLnB1c2goZSk7bGV0IGE9LTE7Zm9yKGxldCByPTA7cjx0O3IrKyl7aWYoYTwwKXtjPW4ucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1jKXtjPTA7bD0hMH1hPTd9ZVtyXT1jPj5hJjE7YS0tfX1pZihyJiYhbCl7Y29uc3QgZT01O2ZvcihsZXQgdD0wO3Q8ZSYmLTEhPT1uLnJlYWROZXh0Q2hhcigpO3QrKyk7fXJldHVybiBvfXQuSmJpZzJJbWFnZT1jbGFzcyBKYmlnMkltYWdle3BhcnNlQ2h1bmtzKGUpe3JldHVybiBmdW5jdGlvbiBwYXJzZUpiaWcyQ2h1bmtzKGUpe2NvbnN0IHQ9bmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1lW2FdO3Byb2Nlc3NTZWdtZW50cyhyZWFkU2VnbWVudHMoe30sci5kYXRhLHIuc3RhcnQsci5lbmQpLHQpfXJldHVybiB0LmJ1ZmZlcn0oZSl9cGFyc2UoZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IEpiaWcySW1hZ2UucGFyc2UiKX19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkFyaXRobWV0aWNEZWNvZGVyPXZvaWQgMDtjb25zdCBhPVt7cWU6MjIwMTcsbm1wczoxLG5scHM6MSxzd2l0Y2hGbGFnOjF9LHtxZToxMzMxMyxubXBzOjIsbmxwczo2LHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczozLG5scHM6OSxzd2l0Y2hGbGFnOjB9LHtxZToyNzUzLG5tcHM6NCxubHBzOjEyLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczo1LG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzgsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjcsbmxwczo2LHN3aXRjaEZsYWc6MX0se3FlOjIxNTA1LG5tcHM6OCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6OSxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjE0MzM3LG5tcHM6MTAsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjExLG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjEyLG5scHM6MTgsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjEzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI5LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczoxNSxubHBzOjE0LHN3aXRjaEZsYWc6MX0se3FlOjIxNTA1LG5tcHM6MTYsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToyMDczNyxubXBzOjE3LG5scHM6MTUsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczoxOCxubHBzOjE2LHN3aXRjaEZsYWc6MH0se3FlOjE0MzM3LG5tcHM6MTksbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZToxMzMxMyxubXBzOjIwLG5scHM6MTgsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoyMSxubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjEwMjQxLG5tcHM6MjIsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MjMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo4NzA1LG5tcHM6MjQsbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MjUsbmxwczoyMixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MjYsbmxwczoyMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjcsbmxwczoyNCxzd2l0Y2hGbGFnOjB9LHtxZTo1MTIxLG5tcHM6MjgsbmxwczoyNSxzd2l0Y2hGbGFnOjB9LHtxZTo0NjA5LG5tcHM6MjksbmxwczoyNixzd2l0Y2hGbGFnOjB9LHtxZTo0MzUzLG5tcHM6MzAsbmxwczoyNyxzd2l0Y2hGbGFnOjB9LHtxZToyNzUzLG5tcHM6MzEsbmxwczoyOCxzd2l0Y2hGbGFnOjB9LHtxZToyNDk3LG5tcHM6MzIsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZToyMjA5LG5tcHM6MzMsbmxwczozMCxzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6MzQsbmxwczozMSxzd2l0Y2hGbGFnOjB9LHtxZToxMDg5LG5tcHM6MzUsbmxwczozMixzd2l0Y2hGbGFnOjB9LHtxZTo2NzMsbm1wczozNixubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM3LG5scHM6MzQsc3dpdGNoRmxhZzowfSx7cWU6MzIxLG5tcHM6MzgsbmxwczozNSxzd2l0Y2hGbGFnOjB9LHtxZToyNzMsbm1wczozOSxubHBzOjM2LHN3aXRjaEZsYWc6MH0se3FlOjEzMyxubXBzOjQwLG5scHM6Mzcsc3dpdGNoRmxhZzowfSx7cWU6NzMsbm1wczo0MSxubHBzOjM4LHN3aXRjaEZsYWc6MH0se3FlOjM3LG5tcHM6NDIsbmxwczozOSxzd2l0Y2hGbGFnOjB9LHtxZToyMSxubXBzOjQzLG5scHM6NDAsc3dpdGNoRmxhZzowfSx7cWU6OSxubXBzOjQ0LG5scHM6NDEsc3dpdGNoRmxhZzowfSx7cWU6NSxubXBzOjQ1LG5scHM6NDIsc3dpdGNoRmxhZzowfSx7cWU6MSxubXBzOjQ1LG5scHM6NDMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo0NixubHBzOjQ2LHN3aXRjaEZsYWc6MH1dO3QuQXJpdGhtZXRpY0RlY29kZXI9Y2xhc3MgQXJpdGhtZXRpY0RlY29kZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuZGF0YT1lO3RoaXMuYnA9dDt0aGlzLmRhdGFFbmQ9YTt0aGlzLmNoaWdoPWVbdF07dGhpcy5jbG93PTA7dGhpcy5ieXRlSW4oKTt0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDcmNjU1MzV8dGhpcy5jbG93Pj45JjEyNzt0aGlzLmNsb3c9dGhpcy5jbG93PDw3JjY1NTM1O3RoaXMuY3QtPTc7dGhpcy5hPTMyNzY4fWJ5dGVJbigpe2NvbnN0IGU9dGhpcy5kYXRhO2xldCB0PXRoaXMuYnA7aWYoMjU1PT09ZVt0XSlpZihlW3QrMV0+MTQzKXt0aGlzLmNsb3crPTY1MjgwO3RoaXMuY3Q9OH1lbHNle3QrKzt0aGlzLmNsb3crPWVbdF08PDk7dGhpcy5jdD03O3RoaXMuYnA9dH1lbHNle3QrKzt0aGlzLmNsb3crPXQ8dGhpcy5kYXRhRW5kP2VbdF08PDg6NjUyODA7dGhpcy5jdD04O3RoaXMuYnA9dH1pZih0aGlzLmNsb3c+NjU1MzUpe3RoaXMuY2hpZ2grPXRoaXMuY2xvdz4+MTY7dGhpcy5jbG93Jj02NTUzNX19cmVhZEJpdChlLHQpe2xldCByPWVbdF0+PjEsaT0xJmVbdF07Y29uc3Qgbj1hW3JdLHM9bi5xZTtsZXQgbyxjPXRoaXMuYS1zO2lmKHRoaXMuY2hpZ2g8cylpZihjPHMpe2M9cztvPWk7cj1uLm5tcHN9ZWxzZXtjPXM7bz0xXmk7MT09PW4uc3dpdGNoRmxhZyYmKGk9byk7cj1uLm5scHN9ZWxzZXt0aGlzLmNoaWdoLT1zO2lmKDAhPSgzMjc2OCZjKSl7dGhpcy5hPWM7cmV0dXJuIGl9aWYoYzxzKXtvPTFeaTsxPT09bi5zd2l0Y2hGbGFnJiYoaT1vKTtyPW4ubmxwc31lbHNle289aTtyPW4ubm1wc319ZG97MD09PXRoaXMuY3QmJnRoaXMuYnl0ZUluKCk7Yzw8PTE7dGhpcy5jaGlnaD10aGlzLmNoaWdoPDwxJjY1NTM1fHRoaXMuY2xvdz4+MTUmMTt0aGlzLmNsb3c9dGhpcy5jbG93PDwxJjY1NTM1O3RoaXMuY3QtLX13aGlsZSgwPT0oMzI3NjgmYykpO3RoaXMuYT1jO2VbdF09cjw8MXxpO3JldHVybiBvfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcGVnU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KSxpPWEoNCksbj1hKDI3KSxzPWEoMik7Y2xhc3MgSnBlZ1N0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtsZXQgcjtmb3IoOy0xIT09KHI9ZS5nZXRCeXRlKCkpOylpZigyNTU9PT1yKXtlLnNraXAoLTEpO2JyZWFrfXN1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxzLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZigodGhpcy5mb3JjZVJHQkF8fHRoaXMuZm9yY2VSR0IpJiZBcnJheS5pc0FycmF5KHQpKXtjb25zdCBhPXRoaXMuZGljdC5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxyPXQubGVuZ3RoLGk9bmV3IEludDMyQXJyYXkocik7bGV0IG49ITE7Y29uc3Qgcz0oMTw8YSktMTtmb3IobGV0IGU9MDtlPHI7ZSs9Mil7aVtlXT0yNTYqKHRbZSsxXS10W2VdKXwwO2lbZSsxXT10W2VdKnN8MDsyNTY9PT1pW2VdJiYwPT09aVtlKzFdfHwobj0hMCl9biYmKGUuZGVjb2RlVHJhbnNmb3JtPWkpfWlmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCB0PXRoaXMucGFyYW1zLmdldCgiQ29sb3JUcmFuc2Zvcm0iKTtOdW1iZXIuaXNJbnRlZ2VyKHQpJiYoZS5jb2xvclRyYW5zZm9ybT10KX1jb25zdCBhPW5ldyBuLkpwZWdJbWFnZShlKTthLnBhcnNlKHRoaXMuYnl0ZXMpO2NvbnN0IHI9YS5nZXREYXRhKHt3aWR0aDp0aGlzLmRyYXdXaWR0aCxoZWlnaHQ6dGhpcy5kcmF3SGVpZ2h0LGZvcmNlUkdCQTp0aGlzLmZvcmNlUkdCQSxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9cjt0aGlzLmJ1ZmZlckxlbmd0aD1yLmxlbmd0aDt0aGlzLmVvZj0hMH19dC5KcGVnU3RyZWFtPUpwZWdTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcGVnSW1hZ2U9dm9pZCAwO3ZhciByPWEoMiksaT1hKDI4KSxuPWEoMyk7Y2xhc3MgSnBlZ0Vycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBKUEVHIGVycm9yOiAke2V9YCwiSnBlZ0Vycm9yIil9fWNsYXNzIEROTE1hcmtlckVycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiRE5MTWFya2VyRXJyb3IiKTt0aGlzLnNjYW5MaW5lcz10fX1jbGFzcyBFT0lNYXJrZXJFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJFT0lNYXJrZXJFcnJvciIpfX1jb25zdCBzPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksbz00MDE3LGM9Nzk5LGw9MzQwNixoPTIyNzYsdT0xNTY3LGQ9Mzc4NCxmPTU3OTMsZz0yODk2O2Z1bmN0aW9uIGJ1aWxkSHVmZm1hblRhYmxlKGUsdCl7bGV0IGEscixpPTAsbj0xNjtmb3IoO24+MCYmIWVbbi0xXTspbi0tO2NvbnN0IHM9W3tjaGlsZHJlbjpbXSxpbmRleDowfV07bGV0IG8sYz1zWzBdO2ZvcihhPTA7YTxuO2ErKyl7Zm9yKHI9MDtyPGVbYV07cisrKXtjPXMucG9wKCk7Yy5jaGlsZHJlbltjLmluZGV4XT10W2ldO2Zvcig7Yy5pbmRleD4wOyljPXMucG9wKCk7Yy5pbmRleCsrO3MucHVzaChjKTtmb3IoO3MubGVuZ3RoPD1hOyl7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfWkrK31pZihhKzE8bil7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfX1yZXR1cm4gc1swXS5jaGlsZHJlbn1mdW5jdGlvbiBnZXRCbG9ja0J1ZmZlck9mZnNldChlLHQsYSl7cmV0dXJuIDY0KigoZS5ibG9ja3NQZXJMaW5lKzEpKnQrYSl9ZnVuY3Rpb24gZGVjb2RlU2NhbihlLHQsYSxpLG8sYyxsLGgsdSxkPSExKXtjb25zdCBmPWEubWN1c1BlckxpbmUsZz1hLnByb2dyZXNzaXZlLHA9dDtsZXQgbT0wLGI9MDtmdW5jdGlvbiByZWFkQml0KCl7aWYoYj4wKXtiLS07cmV0dXJuIG0+PmImMX1tPWVbdCsrXTtpZigyNTU9PT1tKXtjb25zdCByPWVbdCsrXTtpZihyKXtpZigyMjA9PT1yJiZkKXt0Kz0yO2NvbnN0IHI9KDAsbi5yZWFkVWludDE2KShlLHQpO3QrPTI7aWYocj4wJiZyIT09YS5zY2FuTGluZXMpdGhyb3cgbmV3IEROTE1hcmtlckVycm9yKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixyKX1lbHNlIGlmKDIxNz09PXIpe2lmKGQpe2NvbnN0IGU9eCooOD09PWEucHJlY2lzaW9uPzg6MCk7aWYoZT4wJiZNYXRoLnJvdW5kKGEuc2NhbkxpbmVzL2UpPj01KXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLGUpfXRocm93IG5ldyBFT0lNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIpfXRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KG08PDh8cikudG9TdHJpbmcoMTYpfWApfX1iPTc7cmV0dXJuIG0+Pj43fWZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4oZSl7bGV0IHQ9ZTtmb3IoOzspe3Q9dFtyZWFkQml0KCldO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJudW1iZXIiOnJldHVybiB0O2Nhc2Uib2JqZWN0Ijpjb250aW51ZX10aHJvdyBuZXcgSnBlZ0Vycm9yKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gcmVjZWl2ZShlKXtsZXQgdD0wO2Zvcig7ZT4wOyl7dD10PDwxfHJlYWRCaXQoKTtlLS19cmV0dXJuIHR9ZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChlKXtpZigxPT09ZSlyZXR1cm4gMT09PXJlYWRCaXQoKT8xOi0xO2NvbnN0IHQ9cmVjZWl2ZShlKTtyZXR1cm4gdD49MTw8ZS0xP3Q6dCsoLTE8PGUpKzF9bGV0IHk9MDtsZXQgdyxTPTA7bGV0IHg9MDtmdW5jdGlvbiBkZWNvZGVNY3UoZSx0LGEscixpKXtjb25zdCBuPWElZjt4PShhL2Z8MCkqZS52K3I7Y29uc3Qgcz1uKmUuaCtpO3QoZSxnZXRCbG9ja0J1ZmZlck9mZnNldChlLHgscykpfWZ1bmN0aW9uIGRlY29kZUJsb2NrKGUsdCxhKXt4PWEvZS5ibG9ja3NQZXJMaW5lfDA7Y29uc3Qgcj1hJWUuYmxvY2tzUGVyTGluZTt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx4LHIpKX1jb25zdCBDPWkubGVuZ3RoO2xldCBrLHYsRixPLFQsTTtNPWc/MD09PWM/MD09PWg/ZnVuY3Rpb24gZGVjb2RlRENGaXJzdChlLHQpe2NvbnN0IGE9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZURDKSxyPTA9PT1hPzA6cmVjZWl2ZUFuZEV4dGVuZChhKTw8dTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPXJ9OmZ1bmN0aW9uIGRlY29kZURDU3VjY2Vzc2l2ZShlLHQpe2UuYmxvY2tEYXRhW3RdfD1yZWFkQml0KCk8PHV9OjA9PT1oP2Z1bmN0aW9uIGRlY29kZUFDRmlyc3QoZSx0KXtpZih5PjApe3ktLTtyZXR1cm59bGV0IGE9Yztjb25zdCByPWw7Zm9yKDthPD1yOyl7Y29uc3Qgcj1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLGk9MTUmcixuPXI+PjQ7aWYoMD09PWkpe2lmKG48MTUpe3k9cmVjZWl2ZShuKSsoMTw8biktMTticmVha31hKz0xNjtjb250aW51ZX1hKz1uO2NvbnN0IG89c1thXTtlLmJsb2NrRGF0YVt0K29dPXJlY2VpdmVBbmRFeHRlbmQoaSkqKDE8PHUpO2ErK319OmZ1bmN0aW9uIGRlY29kZUFDU3VjY2Vzc2l2ZShlLHQpe2xldCBhPWM7Y29uc3Qgcj1sO2xldCBpLG4sbz0wO2Zvcig7YTw9cjspe2NvbnN0IHI9dCtzW2FdLGM9ZS5ibG9ja0RhdGFbcl08MD8tMToxO3N3aXRjaChTKXtjYXNlIDA6bj1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpO2k9MTUmbjtvPW4+PjQ7aWYoMD09PWkpaWYobzwxNSl7eT1yZWNlaXZlKG8pKygxPDxvKTtTPTR9ZWxzZXtvPTE2O1M9MX1lbHNle2lmKDEhPT1pKXRocm93IG5ldyBKcGVnRXJyb3IoImludmFsaWQgQUNuIGVuY29kaW5nIik7dz1yZWNlaXZlQW5kRXh0ZW5kKGkpO1M9bz8yOjN9Y29udGludWU7Y2FzZSAxOmNhc2UgMjppZihlLmJsb2NrRGF0YVtyXSllLmJsb2NrRGF0YVtyXSs9YyoocmVhZEJpdCgpPDx1KTtlbHNle28tLTswPT09byYmKFM9Mj09PVM/MzowKX1icmVhaztjYXNlIDM6aWYoZS5ibG9ja0RhdGFbcl0pZS5ibG9ja0RhdGFbcl0rPWMqKHJlYWRCaXQoKTw8dSk7ZWxzZXtlLmJsb2NrRGF0YVtyXT13PDx1O1M9MH1icmVhaztjYXNlIDQ6ZS5ibG9ja0RhdGFbcl0mJihlLmJsb2NrRGF0YVtyXSs9YyoocmVhZEJpdCgpPDx1KSl9YSsrfWlmKDQ9PT1TKXt5LS07MD09PXkmJihTPTApfX06ZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoZSx0KXtjb25zdCBhPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVEQykscj0wPT09YT8wOnJlY2VpdmVBbmRFeHRlbmQoYSk7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1yO2xldCBpPTE7Zm9yKDtpPDY0Oyl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLHI9MTUmYSxuPWE+PjQ7aWYoMD09PXIpe2lmKG48MTUpYnJlYWs7aSs9MTY7Y29udGludWV9aSs9bjtjb25zdCBvPXNbaV07ZS5ibG9ja0RhdGFbdCtvXT1yZWNlaXZlQW5kRXh0ZW5kKHIpO2krK319O2xldCBFLEQsTixSLEw9MDtEPTE9PT1DP2lbMF0uYmxvY2tzUGVyTGluZSppWzBdLmJsb2Nrc1BlckNvbHVtbjpmKmEubWN1c1BlckNvbHVtbjtmb3IoO0w8PUQ7KXtjb25zdCBhPW8/TWF0aC5taW4oRC1MLG8pOkQ7aWYoYT4wKXtmb3Iodj0wO3Y8Qzt2KyspaVt2XS5wcmVkPTA7eT0wO2lmKDE9PT1DKXtrPWlbMF07Zm9yKFQ9MDtUPGE7VCsrKXtkZWNvZGVCbG9jayhrLE0sTCk7TCsrfX1lbHNlIGZvcihUPTA7VDxhO1QrKyl7Zm9yKHY9MDt2PEM7disrKXtrPWlbdl07Tj1rLmg7Uj1rLnY7Zm9yKEY9MDtGPFI7RisrKWZvcihPPTA7TzxOO08rKylkZWNvZGVNY3UoayxNLEwsRixPKX1MKyt9fWI9MDtFPWZpbmROZXh0RmlsZU1hcmtlcihlLHQpO2lmKCFFKWJyZWFrO2lmKEUuaW52YWxpZCl7Y29uc3QgZT1hPjA/InVuZXhwZWN0ZWQiOiJleGNlc3NpdmUiOygwLHIud2FybikoYGRlY29kZVNjYW4gLSAke2V9IE1DVSBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogJHtFLmludmFsaWR9YCk7dD1FLm9mZnNldH1pZighKEUubWFya2VyPj02NTQ4OCYmRS5tYXJrZXI8PTY1NDk1KSlicmVhazt0Kz0yfXJldHVybiB0LXB9ZnVuY3Rpb24gcXVhbnRpemVBbmRJbnZlcnNlKGUsdCxhKXtjb25zdCByPWUucXVhbnRpemF0aW9uVGFibGUsaT1lLmJsb2NrRGF0YTtsZXQgbixzLHAsbSxiLHksdyxTLHgsQyxrLHYsRixPLFQsTSxFO2lmKCFyKXRocm93IG5ldyBKcGVnRXJyb3IoIm1pc3NpbmcgcmVxdWlyZWQgUXVhbnRpemF0aW9uIFRhYmxlLiIpO2ZvcihsZXQgZT0wO2U8NjQ7ZSs9OCl7eD1pW3QrZV07Qz1pW3QrZSsxXTtrPWlbdCtlKzJdO3Y9aVt0K2UrM107Rj1pW3QrZSs0XTtPPWlbdCtlKzVdO1Q9aVt0K2UrNl07TT1pW3QrZSs3XTt4Kj1yW2VdO2lmKDAhPShDfGt8dnxGfE98VHxNKSl7Qyo9cltlKzFdO2sqPXJbZSsyXTt2Kj1yW2UrM107Rio9cltlKzRdO08qPXJbZSs1XTtUKj1yW2UrNl07TSo9cltlKzddO249Zip4KzEyOD4+ODtzPWYqRisxMjg+Pjg7cD1rO209VDtiPWcqKEMtTSkrMTI4Pj44O1M9ZyooQytNKSsxMjg+Pjg7eT12PDw0O3c9Tzw8NDtuPW4rcysxPj4xO3M9bi1zO0U9cCpkK20qdSsxMjg+Pjg7cD1wKnUtbSpkKzEyOD4+ODttPUU7Yj1iK3crMT4+MTt3PWItdztTPVMreSsxPj4xO3k9Uy15O249bittKzE+PjE7bT1uLW07cz1zK3ArMT4+MTtwPXMtcDtFPWIqaCtTKmwrMjA0OD4+MTI7Yj1iKmwtUypoKzIwNDg+PjEyO1M9RTtFPXkqYyt3Km8rMjA0OD4+MTI7eT15Km8tdypjKzIwNDg+PjEyO3c9RTthW2VdPW4rUzthW2UrN109bi1TO2FbZSsxXT1zK3c7YVtlKzZdPXMtdzthW2UrMl09cCt5O2FbZSs1XT1wLXk7YVtlKzNdPW0rYjthW2UrNF09bS1ifWVsc2V7RT1mKngrNTEyPj4xMDthW2VdPUU7YVtlKzFdPUU7YVtlKzJdPUU7YVtlKzNdPUU7YVtlKzRdPUU7YVtlKzVdPUU7YVtlKzZdPUU7YVtlKzddPUV9fWZvcihsZXQgZT0wO2U8ODsrK2Upe3g9YVtlXTtDPWFbZSs4XTtrPWFbZSsxNl07dj1hW2UrMjRdO0Y9YVtlKzMyXTtPPWFbZSs0MF07VD1hW2UrNDhdO009YVtlKzU2XTtpZigwIT0oQ3xrfHZ8RnxPfFR8TSkpe249Zip4KzIwNDg+PjEyO3M9ZipGKzIwNDg+PjEyO3A9azttPVQ7Yj1nKihDLU0pKzIwNDg+PjEyO1M9ZyooQytNKSsyMDQ4Pj4xMjt5PXY7dz1PO249NDExMisobitzKzE+PjEpO3M9bi1zO0U9cCpkK20qdSsyMDQ4Pj4xMjtwPXAqdS1tKmQrMjA0OD4+MTI7bT1FO2I9Yit3KzE+PjE7dz1iLXc7Uz1TK3krMT4+MTt5PVMteTtuPW4rbSsxPj4xO209bi1tO3M9cytwKzE+PjE7cD1zLXA7RT1iKmgrUypsKzIwNDg+PjEyO2I9YipsLVMqaCsyMDQ4Pj4xMjtTPUU7RT15KmMrdypvKzIwNDg+PjEyO3k9eSpvLXcqYysyMDQ4Pj4xMjt3PUU7eD1uK1M7TT1uLVM7Qz1zK3c7VD1zLXc7az1wK3k7Tz1wLXk7dj1tK2I7Rj1tLWI7eDwxNj94PTA6eD49NDA4MD94PTI1NTp4Pj49NDtDPDE2P0M9MDpDPj00MDgwP0M9MjU1OkM+Pj00O2s8MTY/az0wOms+PTQwODA/az0yNTU6az4+PTQ7djwxNj92PTA6dj49NDA4MD92PTI1NTp2Pj49NDtGPDE2P0Y9MDpGPj00MDgwP0Y9MjU1OkY+Pj00O088MTY/Tz0wOk8+PTQwODA/Tz0yNTU6Tz4+PTQ7VDwxNj9UPTA6VD49NDA4MD9UPTI1NTpUPj49NDtNPDE2P009MDpNPj00MDgwP009MjU1Ok0+Pj00O2lbdCtlXT14O2lbdCtlKzhdPUM7aVt0K2UrMTZdPWs7aVt0K2UrMjRdPXY7aVt0K2UrMzJdPUY7aVt0K2UrNDBdPU87aVt0K2UrNDhdPVQ7aVt0K2UrNTZdPU19ZWxzZXtFPWYqeCs4MTkyPj4xNDtFPUU8LTIwNDA/MDpFPj0yMDI0PzI1NTpFKzIwNTY+PjQ7aVt0K2VdPUU7aVt0K2UrOF09RTtpW3QrZSsxNl09RTtpW3QrZSsyNF09RTtpW3QrZSszMl09RTtpW3QrZSs0MF09RTtpW3QrZSs0OF09RTtpW3QrZSs1Nl09RX19fWZ1bmN0aW9uIGJ1aWxkQ29tcG9uZW50RGF0YShlLHQpe2NvbnN0IGE9dC5ibG9ja3NQZXJMaW5lLHI9dC5ibG9ja3NQZXJDb2x1bW4saT1uZXcgSW50MTZBcnJheSg2NCk7Zm9yKGxldCBlPTA7ZTxyO2UrKylmb3IobGV0IHI9MDtyPGE7cisrKXtxdWFudGl6ZUFuZEludmVyc2UodCxnZXRCbG9ja0J1ZmZlck9mZnNldCh0LGUsciksaSl9cmV0dXJuIHQuYmxvY2tEYXRhfWZ1bmN0aW9uIGZpbmROZXh0RmlsZU1hcmtlcihlLHQsYT10KXtjb25zdCByPWUubGVuZ3RoLTE7bGV0IGk9YTx0P2E6dDtpZih0Pj1yKXJldHVybiBudWxsO2NvbnN0IHM9KDAsbi5yZWFkVWludDE2KShlLHQpO2lmKHM+PTY1NDcyJiZzPD02NTUzNClyZXR1cm57aW52YWxpZDpudWxsLG1hcmtlcjpzLG9mZnNldDp0fTtsZXQgbz0oMCxuLnJlYWRVaW50MTYpKGUsaSk7Zm9yKDshKG8+PTY1NDcyJiZvPD02NTUzNCk7KXtpZigrK2k+PXIpcmV0dXJuIG51bGw7bz0oMCxuLnJlYWRVaW50MTYpKGUsaSl9cmV0dXJue2ludmFsaWQ6cy50b1N0cmluZygxNiksbWFya2VyOm8sb2Zmc2V0Oml9fXQuSnBlZ0ltYWdlPWNsYXNzIEpwZWdJbWFnZXtjb25zdHJ1Y3Rvcih7ZGVjb2RlVHJhbnNmb3JtOmU9bnVsbCxjb2xvclRyYW5zZm9ybTp0PS0xfT17fSl7dGhpcy5fZGVjb2RlVHJhbnNmb3JtPWU7dGhpcy5fY29sb3JUcmFuc2Zvcm09dH1wYXJzZShlLHtkbmxTY2FuTGluZXM6dD1udWxsfT17fSl7ZnVuY3Rpb24gcmVhZERhdGFCbG9jaygpe2NvbnN0IHQ9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7bGV0IGE9byt0LTI7Y29uc3QgaT1maW5kTmV4dEZpbGVNYXJrZXIoZSxhLG8pO2lmKGk/LmludmFsaWQpeygwLHIud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpO2E9aS5vZmZzZXR9Y29uc3Qgcz1lLnN1YmFycmF5KG8sYSk7bys9cy5sZW5ndGg7cmV0dXJuIHN9ZnVuY3Rpb24gcHJlcGFyZUNvbXBvbmVudHMoZSl7Y29uc3QgdD1NYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84L2UubWF4SCksYT1NYXRoLmNlaWwoZS5zY2FuTGluZXMvOC9lLm1heFYpO2Zvcihjb25zdCByIG9mIGUuY29tcG9uZW50cyl7Y29uc3QgaT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqci5oL2UubWF4SCksbj1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKnIudi9lLm1heFYpLHM9dCpyLmgsbz02NCooYSpyLnYpKihzKzEpO3IuYmxvY2tEYXRhPW5ldyBJbnQxNkFycmF5KG8pO3IuYmxvY2tzUGVyTGluZT1pO3IuYmxvY2tzUGVyQ29sdW1uPW59ZS5tY3VzUGVyTGluZT10O2UubWN1c1BlckNvbHVtbj1hfWxldCBhLGksbz0wLGM9bnVsbCxsPW51bGwsaD0wO2NvbnN0IHU9W10sZD1bXSxmPVtdO2xldCBnPSgwLG4ucmVhZFVpbnQxNikoZSxvKTtvKz0yO2lmKDY1NDk2IT09Zyl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJTT0kgbm90IGZvdW5kIik7Zz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9MjtlOmZvcig7NjU0OTchPT1nOyl7bGV0IHAsbSxiO3N3aXRjaChnKXtjYXNlIDY1NTA0OmNhc2UgNjU1MDU6Y2FzZSA2NTUwNjpjYXNlIDY1NTA3OmNhc2UgNjU1MDg6Y2FzZSA2NTUwOTpjYXNlIDY1NTEwOmNhc2UgNjU1MTE6Y2FzZSA2NTUxMjpjYXNlIDY1NTEzOmNhc2UgNjU1MTQ6Y2FzZSA2NTUxNTpjYXNlIDY1NTE2OmNhc2UgNjU1MTc6Y2FzZSA2NTUxODpjYXNlIDY1NTE5OmNhc2UgNjU1MzQ6Y29uc3QgeT1yZWFkRGF0YUJsb2NrKCk7NjU1MDQ9PT1nJiY3ND09PXlbMF0mJjcwPT09eVsxXSYmNzM9PT15WzJdJiY3MD09PXlbM10mJjA9PT15WzRdJiYoYz17dmVyc2lvbjp7bWFqb3I6eVs1XSxtaW5vcjp5WzZdfSxkZW5zaXR5VW5pdHM6eVs3XSx4RGVuc2l0eTp5WzhdPDw4fHlbOV0seURlbnNpdHk6eVsxMF08PDh8eVsxMV0sdGh1bWJXaWR0aDp5WzEyXSx0aHVtYkhlaWdodDp5WzEzXSx0aHVtYkRhdGE6eS5zdWJhcnJheSgxNCwxNCszKnlbMTJdKnlbMTNdKX0pOzY1NTE4PT09ZyYmNjU9PT15WzBdJiYxMDA9PT15WzFdJiYxMTE9PT15WzJdJiY5OD09PXlbM10mJjEwMT09PXlbNF0mJihsPXt2ZXJzaW9uOnlbNV08PDh8eVs2XSxmbGFnczA6eVs3XTw8OHx5WzhdLGZsYWdzMTp5WzldPDw4fHlbMTBdLHRyYW5zZm9ybUNvZGU6eVsxMV19KTticmVhaztjYXNlIDY1NDk5OmNvbnN0IHc9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7Y29uc3QgUz13K28tMjtsZXQgeDtmb3IoO288Uzspe2NvbnN0IHQ9ZVtvKytdLGE9bmV3IFVpbnQxNkFycmF5KDY0KTtpZih0Pj40PT0wKWZvcihtPTA7bTw2NDttKyspe3g9c1ttXTthW3hdPWVbbysrXX1lbHNle2lmKHQ+PjQhPTEpdGhyb3cgbmV3IEpwZWdFcnJvcigiRFFUIC0gaW52YWxpZCB0YWJsZSBzcGVjIik7Zm9yKG09MDttPDY0O20rKyl7eD1zW21dO2FbeF09KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTJ9fXVbMTUmdF09YX1icmVhaztjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDppZihhKXRocm93IG5ldyBKcGVnRXJyb3IoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO28rPTI7YT17fTthLmV4dGVuZGVkPTY1NDczPT09ZzthLnByb2dyZXNzaXZlPTY1NDc0PT09ZzthLnByZWNpc2lvbj1lW28rK107Y29uc3QgQz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9MjthLnNjYW5MaW5lcz10fHxDO2Euc2FtcGxlc1BlckxpbmU9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7YS5jb21wb25lbnRzPVtdO2EuY29tcG9uZW50SWRzPXt9O2NvbnN0IGs9ZVtvKytdO2xldCB2PTAsRj0wO2ZvcihwPTA7cDxrO3ArKyl7Y29uc3QgdD1lW29dLHI9ZVtvKzFdPj40LGk9MTUmZVtvKzFdO3Y8ciYmKHY9cik7RjxpJiYoRj1pKTtjb25zdCBuPWVbbysyXTtiPWEuY29tcG9uZW50cy5wdXNoKHtoOnIsdjppLHF1YW50aXphdGlvbklkOm4scXVhbnRpemF0aW9uVGFibGU6bnVsbH0pO2EuY29tcG9uZW50SWRzW3RdPWItMTtvKz0zfWEubWF4SD12O2EubWF4Vj1GO3ByZXBhcmVDb21wb25lbnRzKGEpO2JyZWFrO2Nhc2UgNjU0NzY6Y29uc3QgTz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9Mjtmb3IocD0yO3A8Tzspe2NvbnN0IHQ9ZVtvKytdLGE9bmV3IFVpbnQ4QXJyYXkoMTYpO2xldCByPTA7Zm9yKG09MDttPDE2O20rKyxvKyspcis9YVttXT1lW29dO2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkocik7Zm9yKG09MDttPHI7bSsrLG8rKylpW21dPWVbb107cCs9MTcrcjsodD4+ND09MD9mOmQpWzE1JnRdPWJ1aWxkSHVmZm1hblRhYmxlKGEsaSl9YnJlYWs7Y2FzZSA2NTUwMTpvKz0yO2k9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7YnJlYWs7Y2FzZSA2NTQ5ODpjb25zdCBUPTE9PSsraCYmIXQ7bys9Mjtjb25zdCBNPWVbbysrXSxFPVtdO2ZvcihwPTA7cDxNO3ArKyl7Y29uc3QgdD1lW28rK10scj1hLmNvbXBvbmVudElkc1t0XSxpPWEuY29tcG9uZW50c1tyXTtpLmluZGV4PXQ7Y29uc3Qgbj1lW28rK107aS5odWZmbWFuVGFibGVEQz1mW24+PjRdO2kuaHVmZm1hblRhYmxlQUM9ZFsxNSZuXTtFLnB1c2goaSl9Y29uc3QgRD1lW28rK10sTj1lW28rK10sUj1lW28rK107dHJ5e2NvbnN0IHQ9ZGVjb2RlU2NhbihlLG8sYSxFLGksRCxOLFI+PjQsMTUmUixUKTtvKz10fWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcil7KDAsci53YXJuKShgJHt0Lm1lc3NhZ2V9IC0tIGF0dGVtcHRpbmcgdG8gcmUtcGFyc2UgdGhlIEpQRUcgaW1hZ2UuYCk7cmV0dXJuIHRoaXMucGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQuc2NhbkxpbmVzfSl9aWYodCBpbnN0YW5jZW9mIEVPSU1hcmtlckVycm9yKXsoMCxyLndhcm4pKGAke3QubWVzc2FnZX0gLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuYCk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bys9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbb10mJm8tLTticmVhaztkZWZhdWx0OmNvbnN0IEw9ZmluZE5leHRGaWxlTWFya2VyKGUsby0yLG8tMyk7aWYoTD8uaW52YWxpZCl7KDAsci53YXJuKSgiSnBlZ0ltYWdlLnBhcnNlIC0gdW5leHBlY3RlZCBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogIitMLmludmFsaWQpO289TC5vZmZzZXQ7YnJlYWt9aWYoIUx8fG8+PWUubGVuZ3RoLTEpeygwLHIud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UgZGF0YSB3aXRob3V0IGZpbmRpbmcgYW4gRU9JIG1hcmtlciAoMHhGRkQ5KS4iKTticmVhayBlfXRocm93IG5ldyBKcGVnRXJyb3IoIkpwZWdJbWFnZS5wYXJzZSAtIHVua25vd24gbWFya2VyOiAiK2cudG9TdHJpbmcoMTYpKX1nPSgwLG4ucmVhZFVpbnQxNikoZSxvKTtvKz0yfXRoaXMud2lkdGg9YS5zYW1wbGVzUGVyTGluZTt0aGlzLmhlaWdodD1hLnNjYW5MaW5lczt0aGlzLmpmaWY9Yzt0aGlzLmFkb2JlPWw7dGhpcy5jb21wb25lbnRzPVtdO2Zvcihjb25zdCBlIG9mIGEuY29tcG9uZW50cyl7Y29uc3QgdD11W2UucXVhbnRpemF0aW9uSWRdO3QmJihlLnF1YW50aXphdGlvblRhYmxlPXQpO3RoaXMuY29tcG9uZW50cy5wdXNoKHtpbmRleDplLmluZGV4LG91dHB1dDpidWlsZENvbXBvbmVudERhdGEoMCxlKSxzY2FsZVg6ZS5oL2EubWF4SCxzY2FsZVk6ZS52L2EubWF4VixibG9ja3NQZXJMaW5lOmUuYmxvY2tzUGVyTGluZSxibG9ja3NQZXJDb2x1bW46ZS5ibG9ja3NQZXJDb2x1bW59KX10aGlzLm51bUNvbXBvbmVudHM9dGhpcy5jb21wb25lbnRzLmxlbmd0aH1fZ2V0TGluZWFyaXplZEJsb2NrRGF0YShlLHQsYT0hMSl7Y29uc3Qgcj10aGlzLndpZHRoL2UsaT10aGlzLmhlaWdodC90O2xldCBuLHMsbyxjLGwsaCx1LGQsZixnLHAsbT0wO2NvbnN0IGI9dGhpcy5jb21wb25lbnRzLmxlbmd0aCx5PWUqdCpiLHc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHkpLFM9bmV3IFVpbnQzMkFycmF5KGUpLHg9NDI5NDk2NzI4ODtsZXQgQztmb3IodT0wO3U8Yjt1Kyspe249dGhpcy5jb21wb25lbnRzW3VdO3M9bi5zY2FsZVgqcjtvPW4uc2NhbGVZKmk7bT11O3A9bi5vdXRwdXQ7Yz1uLmJsb2Nrc1BlckxpbmUrMTw8MztpZihzIT09Qyl7Zm9yKGw9MDtsPGU7bCsrKXtkPTB8bCpzO1NbbF09KGQmeCk8PDN8NyZkfUM9c31mb3IoaD0wO2g8dDtoKyspe2Q9MHxoKm87Zz1jKihkJngpfCg3JmQpPDwzO2ZvcihsPTA7bDxlO2wrKyl7d1ttXT1wW2crU1tsXV07bSs9Yn19fWxldCBrPXRoaXMuX2RlY29kZVRyYW5zZm9ybTthfHw0IT09Ynx8a3x8KGs9bmV3IEludDMyQXJyYXkoWy0yNTYsMjU1LC0yNTYsMjU1LC0yNTYsMjU1LC0yNTYsMjU1XSkpO2lmKGspZm9yKHU9MDt1PHk7KWZvcihkPTAsZj0wO2Q8YjtkKyssdSsrLGYrPTIpd1t1XT0od1t1XSprW2ZdPj44KStrW2YrMV07cmV0dXJuIHd9Z2V0IF9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCgpe3JldHVybiB0aGlzLmFkb2JlPyEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlOjM9PT10aGlzLm51bUNvbXBvbmVudHM/MCE9PXRoaXMuX2NvbG9yVHJhbnNmb3JtJiYoODIhPT10aGlzLmNvbXBvbmVudHNbMF0uaW5kZXh8fDcxIT09dGhpcy5jb21wb25lbnRzWzFdLmluZGV4fHw2NiE9PXRoaXMuY29tcG9uZW50c1syXS5pbmRleCk6MT09PXRoaXMuX2NvbG9yVHJhbnNmb3JtfV9jb252ZXJ0WWNjVG9SZ2IoZSl7bGV0IHQsYSxyO2ZvcihsZXQgaT0wLG49ZS5sZW5ndGg7aTxuO2krPTMpe3Q9ZVtpXTthPWVbaSsxXTtyPWVbaSsyXTtlW2ldPXQtMTc5LjQ1NisxLjQwMipyO2VbaSsxXT10KzEzNS40NTktLjM0NCphLS43MTQqcjtlW2krMl09dC0yMjYuODE2KzEuNzcyKmF9cmV0dXJuIGV9X2NvbnZlcnRZY2NUb1JnYmEoZSx0KXtmb3IobGV0IGE9MCxyPTAsaT1lLmxlbmd0aDthPGk7YSs9MyxyKz00KXtjb25zdCBpPWVbYV0sbj1lW2ErMV0scz1lW2ErMl07dFtyXT1pLTE3OS40NTYrMS40MDIqczt0W3IrMV09aSsxMzUuNDU5LS4zNDQqbi0uNzE0KnM7dFtyKzJdPWktMjI2LjgxNisxLjc3MipuO3RbciszXT0yNTV9cmV0dXJuIHR9X2NvbnZlcnRZY2NrVG9SZ2IoZSl7bGV0IHQsYSxyLGksbj0wO2ZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrPTQpe3Q9ZVtzXTthPWVbcysxXTtyPWVbcysyXTtpPWVbcyszXTtlW24rK109YSooLTY2MDYzNTY2OTQyMDM2NGUtMTkqYSsuMDAwNDM3MTMwNDc1OTI2MjMyKnItNTQwODA2MTAwNjQ1OTllLTE4KnQrLjAwMDQ4NDQ5Nzk3MTIwMjgxKmktLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K3IqKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKnIrLjAwMDgxNzA3NjkxMTM0NjYyNSp0LS4wMDQ3NzI3MTQwNTQwODc0NyppKzEuNTMzODAyNTMyMjE3MzQpK3QqKC4wMDA5NjEyNTAxODQxMzA2ODgqdC0uMDAyNjYyNTczMzIyODM5MzMqaSsuNDgzNTcwODg0NTEyNjUpK2kqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KmkrLjQ4NDc5MTU2MTQ5MDc3Nik7ZVtuKytdPTEwNy4yNjgwMzkzOTc3MjQrYSooMjE5OTI3MTA0NTI1NzQxZS0xOSphLS4wMDA2NDA5OTIwMTgyOTc5NDUqcisuMDAwNjU5Mzk3MDAxMjQ1NTc3KnQrLjAwMDQyNjEwNTY1MjkzODgzNyppLS4xNzY0OTE3OTI0NjI4NzUpK3IqKC0uMDAwNzc4MjY5OTQxNTEzNjgzKnIrLjAwMTMwODcyMjYxNDA4Mjc1KnQrLjAwMDc3MDQ4MjYzMTgwMTEzMippLS4xNTEwNTE0OTI3NzU1NjIpK3QqKC4wMDEyNjkzNTM2ODExNDg0Myp0LS4wMDI2NTA5MDE4OTAxMDg5OCppKy4yNTgwMjkxMDIwNjg0NSkraSooLS4wMDAzMTg5MTMxMTc1ODgzMjgqaS0uMjEzNzQyNDAwMzIzNjY1KTtlW24rK109YSooLS4wMDA1NzAxMTUxOTY5NzM2NzcqYS0yNjM0MDkwNTEwMDQ1ODllLTE5KnIrLjAwMjA3NDEwODgxMTUwMTIqdC0uMDAyODgyNjAyMzY4NTM0NDIqaSsuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrciooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqci0uMDAwMTMyNjg5MDQzOTYxNDQ2KnQrLjAwMDU2MDgzMzY5MTI0MjgxMippLS4xOTUxNTIwMjc1MzQwNDkpK3QqKC4wMDE3NDQxODEzMjkyNzU4Mip0LS4wMDI1NTI0MzMyMTQzOTM0NyppKy4xMTY5MzUwMjA0NjUxNDUpK2kqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KmkrLjI0MTY1MjYwMjMyNDA3KX1yZXR1cm4gZS5zdWJhcnJheSgwLG4pfV9jb252ZXJ0WWNja1RvUmdiYShlKXtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kz00KXtjb25zdCBhPWVbdF0scj1lW3QrMV0saT1lW3QrMl0sbj1lW3QrM107ZVt0XT1yKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSpyKy4wMDA0MzcxMzA0NzU5MjYyMzIqaS01NDA4MDYxMDA2NDU5OWUtMTgqYSsuMDAwNDg0NDk3OTcxMjAyODEqbi0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQraSooLS4wMDA5NTc5NjQzNzg0NDU3NzMqaSsuMDAwODE3MDc2OTExMzQ2NjI1KmEtLjAwNDc3MjcxNDA1NDA4NzQ3Km4rMS41MzM4MDI1MzIyMTczNCkrYSooLjAwMDk2MTI1MDE4NDEzMDY4OCphLS4wMDI2NjI1NzMzMjI4MzkzMypuKy40ODM1NzA4ODQ1MTI2NSkrbiooLS4wMDAzMzYxOTcxNzc2MTgzOTQqbisuNDg0NzkxNTYxNDkwNzc2KTtlW3QrMV09MTA3LjI2ODAzOTM5NzcyNCtyKigyMTk5MjcxMDQ1MjU3NDFlLTE5KnItLjAwMDY0MDk5MjAxODI5Nzk0NSppKy4wMDA2NTkzOTcwMDEyNDU1NzcqYSsuMDAwNDI2MTA1NjUyOTM4ODM3Km4tLjE3NjQ5MTc5MjQ2Mjg3NSkraSooLS4wMDA3NzgyNjk5NDE1MTM2ODMqaSsuMDAxMzA4NzIyNjE0MDgyNzUqYSsuMDAwNzcwNDgyNjMxODAxMTMyKm4tLjE1MTA1MTQ5Mjc3NTU2MikrYSooLjAwMTI2OTM1MzY4MTE0ODQzKmEtLjAwMjY1MDkwMTg5MDEwODk4Km4rLjI1ODAyOTEwMjA2ODQ1KStuKigtLjAwMDMxODkxMzExNzU4ODMyOCpuLS4yMTM3NDI0MDAzMjM2NjUpO2VbdCsyXT1yKigtLjAwMDU3MDExNTE5Njk3MzY3NypyLTI2MzQwOTA1MTAwNDU4OWUtMTkqaSsuMDAyMDc0MTA4ODExNTAxMiphLS4wMDI4ODI2MDIzNjg1MzQ0MipuKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytpKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSppLS4wMDAxMzI2ODkwNDM5NjE0NDYqYSsuMDAwNTYwODMzNjkxMjQyODEyKm4tLjE5NTE1MjAyNzUzNDA0OSkrYSooLjAwMTc0NDE4MTMyOTI3NTgyKmEtLjAwMjU1MjQzMzIxNDM5MzQ3Km4rLjExNjkzNTAyMDQ2NTE0NSkrbiooLS4wMDAzNDM1MzE5OTY1MTA1NTUqbisuMjQxNjUyNjAyMzI0MDcpO2VbdCszXT0yNTV9cmV0dXJuIGV9X2NvbnZlcnRZY2NrVG9DbXlrKGUpe2xldCB0LGEscjtmb3IobGV0IGk9MCxuPWUubGVuZ3RoO2k8bjtpKz00KXt0PWVbaV07YT1lW2krMV07cj1lW2krMl07ZVtpXT00MzQuNDU2LXQtMS40MDIqcjtlW2krMV09MTE5LjU0MS10Ky4zNDQqYSsuNzE0KnI7ZVtpKzJdPTQ4MS44MTYtdC0xLjc3MiphfXJldHVybiBlfV9jb252ZXJ0Q215a1RvUmdiKGUpe2xldCB0LGEscixpLG49MDtmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKz00KXt0PWVbc107YT1lW3MrMV07cj1lW3MrMl07aT1lW3MrM107ZVtuKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNyphKy4wMDAyODk0NzE4MTg4NjQzMjk0KnIrLjAwMzI2NDIzMTA1NzUzNzgwNippLTEuMTE4NTYxMTg2NzIwMzkzNykrYSooMjYzNzQxMDc2MTYwODk0MDVlLTIxKmEtODYyNjk0OTE1ODYzODU3MmUtMjAqci0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSppLS4wMjE1NTY4ODc5NDk3ODk2NykrciooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKnItLjAwMDMyNjc4MDgyNzk0ODUyODYqaSsuMDY4Njc0MjIzODU5NTM0NSktaSooLjAwMDMzNjE5NzE3NzYxODM5MzcqaSsuNzQzMDY1OTE1MTM0MjI1NCk7ZVtuKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KmErLjAwMDEwNTY3MzU5NjE4NjgzNTkzKnIrLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqaS0uMzEwOTY4OTU4NzUxNTg3NSkrYSooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCphKy4wMDAyNzAyODQ1MjUzNTM0NzE0KnIrLjAwMjAyMDAzMDg5NzczMDcxNTYqaS0uNzQ4ODA1MjE2NzAxNTQ5NCkrciooNjgzNDgxNTk5ODIzNTY2MmUtMjAqcisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqaS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWkqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmkrLjczNjQ4ODM4MDc3MzMxNjgpO2VbbisrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKmErLjAwMDQ3NTE5ODUwOTc1ODM1ODkqci0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqaS0uMDU1NjIxODY5ODAyNjQwMzQpK2EqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NiphKy4wMDA5NjkyMjM5MTMwNzI1MTg2KnIrLjAwMDc3ODI2OTI0NTAwMzYyNTMqaS0uNDQwMTUyMzIzNjc1MjY0NjMpK3IqKDUuMDY4ODgyOTE0MDY4NzY5ZS03KnIrLjAwMTc3NzgzNjkwMTEzNzUwNzEqaS0uNzU5MTQ1NDY0OTc0OTYwOSktaSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqaSsuNzA2Mzc3MDE4NjE2MDE0NCl9cmV0dXJuIGUuc3ViYXJyYXkoMCxuKX1fY29udmVydENteWtUb1JnYmEoZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCs9NCl7Y29uc3QgYT1lW3RdLHI9ZVt0KzFdLGk9ZVt0KzJdLG49ZVt0KzNdO2VbdF09MjU1K2EqKC02NzQ3MTQ3MDczNjAyNDQxZS0yMCphKy4wMDA4Mzc5MjYyMTIxMDEzNzI3KnIrLjAwMDI4OTQ3MTgxODg2NDMyOTQqaSsuMDAzMjY0MjMxMDU3NTM3ODA2Km4tMS4xMTg1NjExODY3MjAzOTM3KStyKigyNjM3NDEwNzYxNjA4OTQwNWUtMjEqci04NjI2OTQ5MTU4NjM4NTcyZS0yMCppLS4wMDAyNzQ4NzY5MDY3NDk5NDkxKm4tLjAyMTU1Njg4Nzk0OTc4OTY3KStpKigtMzg3ODA5OTIxMjg2OTM2M2UtMjAqaS0uMDAwMzI2NzgwODI3OTQ4NTI4NipuKy4wNjg2NzQyMjM4NTk1MzQ1KS1uKiguMDAwMzM2MTk3MTc3NjE4MzkzNypuKy43NDMwNjU5MTUxMzQyMjU0KTtlW3QrMV09MjU1K2EqKC4wMDAxMzU5NjM3MjgxMzU4ODg0OCphKy4wMDA5MjQ1MzcxMzI1NzM1ODUqcisuMDAwMTA1NjczNTk2MTg2ODM1OTMqaSsuMDAwNDc5MTg2NDY4NzQzNjUxMipuLS4zMTA5Njg5NTg3NTE1ODc1KStyKigtLjAwMDIzNTQ1MzQ2MTA4MzcwMzQ0KnIrLjAwMDI3MDI4NDUyNTM1MzQ3MTQqaSsuMDAyMDIwMDMwODk3NzMwNzE1NipuLS43NDg4MDUyMTY3MDE1NDk0KStpKig2ODM0ODE1OTk4MjM1NjYyZS0yMCppKy4wMDAxNTE2ODQ1MjM2MzQ2MDk3MypuLS4wOTc1MTkyNzc3NDcyODkzMyktbiooLjAwMDMxODkxMzExNzU4ODMyODEqbisuNzM2NDg4MzgwNzczMzE2OCk7ZVt0KzJdPTI1NSthKigxMzU5ODY1MDQxMTM4NTMwN2UtMjEqYSsuMDAwMTI0MjM5NTYxNzU0OTA4NTEqcisuMDAwNDc1MTk4NTA5NzU4MzU4OSppLTM2NzI5MzE3NDc2NjMwNDIyZS0yMipuLS4wNTU2MjE4Njk4MDI2NDAzNCkrciooLjAwMDE2MTQxMzgwNTk4NzI0Njc2KnIrLjAwMDk2OTIyMzkxMzA3MjUxODYqaSsuMDAwNzc4MjY5MjQ1MDAzNjI1MypuLS40NDAxNTIzMjM2NzUyNjQ2MykraSooNS4wNjg4ODI5MTQwNjg3NjllLTcqaSsuMDAxNzc3ODM2OTAxMTM3NTA3MSpuLS43NTkxNDU0NjQ5NzQ5NjA5KS1uKiguMDAwMzQzNTMxOTk2NTEwNTU1MypuKy43MDYzNzcwMTg2MTYwMTQ0KTtlW3QrM109MjU1fXJldHVybiBlfWdldERhdGEoe3dpZHRoOmUsaGVpZ2h0OnQsZm9yY2VSR0JBOmE9ITEsZm9yY2VSR0I6cj0hMSxpc1NvdXJjZVBERjpuPSExfSl7aWYodGhpcy5udW1Db21wb25lbnRzPjQpdGhyb3cgbmV3IEpwZWdFcnJvcigiVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSIpO2NvbnN0IHM9dGhpcy5fZ2V0TGluZWFyaXplZEJsb2NrRGF0YShlLHQsbik7aWYoMT09PXRoaXMubnVtQ29tcG9uZW50cyYmKGF8fHIpKXtjb25zdCBlPXMubGVuZ3RoKihhPzQ6MyksdD1uZXcgVWludDhDbGFtcGVkQXJyYXkoZSk7bGV0IHI9MDtpZihhKSgwLGkuZ3JheVRvUkdCQSkocyxuZXcgVWludDMyQXJyYXkodC5idWZmZXIpKTtlbHNlIGZvcihjb25zdCBlIG9mIHMpe3RbcisrXT1lO3RbcisrXT1lO3RbcisrXT1lfXJldHVybiB0fWlmKDM9PT10aGlzLm51bUNvbXBvbmVudHMmJnRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKXtpZihhKXtjb25zdCBlPW5ldyBVaW50OENsYW1wZWRBcnJheShzLmxlbmd0aC8zKjQpO3JldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2JhKHMsZSl9cmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihzKX1pZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiYShzKTpyP3RoaXMuX2NvbnZlcnRZY2NrVG9SZ2Iocyk6dGhpcy5fY29udmVydFljY2tUb0NteWsocyk7aWYoYSlyZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYmEocyk7aWYocilyZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYihzKX1yZXR1cm4gc319fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkE9Y29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkE7dC5jb252ZXJ0VG9SR0JBPWZ1bmN0aW9uIGNvbnZlcnRUb1JHQkEoZSl7c3dpdGNoKGUua2luZCl7Y2FzZSByLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpyZXR1cm4gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoZSk7Y2FzZSByLkltYWdlS2luZC5SR0JfMjRCUFA6cmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRSR0JUb1JHQkEoe3NyYzplLHNyY1Bvczp0PTAsZGVzdDphLGRlc3RQb3M6aT0wLHdpZHRoOm4saGVpZ2h0OnN9KXtsZXQgbz0wO2NvbnN0IGM9ZS5sZW5ndGg+PjIsbD1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsdCxjKTtpZihyLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKXtmb3IoO288Yy0yO28rPTMsaSs9NCl7Y29uc3QgZT1sW29dLHQ9bFtvKzFdLHI9bFtvKzJdO2FbaV09NDI3ODE5MDA4MHxlO2FbaSsxXT1lPj4+MjR8dDw8OHw0Mjc4MTkwMDgwO2FbaSsyXT10Pj4+MTZ8cjw8MTZ8NDI3ODE5MDA4MDthW2krM109cj4+Pjh8NDI3ODE5MDA4MH1mb3IobGV0IHQ9NCpvLHI9ZS5sZW5ndGg7dDxyO3QrPTMpYVtpKytdPWVbdF18ZVt0KzFdPDw4fGVbdCsyXTw8MTZ8NDI3ODE5MDA4MH1lbHNle2Zvcig7bzxjLTI7bys9MyxpKz00KXtjb25zdCBlPWxbb10sdD1sW28rMV0scj1sW28rMl07YVtpXT0yNTV8ZTthW2krMV09ZTw8MjR8dD4+Pjh8MjU1O2FbaSsyXT10PDwxNnxyPj4+MTZ8MjU1O2FbaSszXT1yPDw4fDI1NX1mb3IobGV0IHQ9NCpvLHI9ZS5sZW5ndGg7dDxyO3QrPTMpYVtpKytdPWVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fDI1NX1yZXR1cm57c3JjUG9zOnQsZGVzdFBvczppfX0oZSl9cmV0dXJuIG51bGx9O3QuZ3JheVRvUkdCQT1mdW5jdGlvbiBncmF5VG9SR0JBKGUsdCl7aWYoci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbilmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspdFthXT02NTc5MyplW2FdfDQyNzgxOTAwODA7ZWxzZSBmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspdFthXT0xNjg0MzAwOCplW2FdfDI1NX07dmFyIHI9YSgyKTtmdW5jdGlvbiBjb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQSh7c3JjOmUsc3JjUG9zOnQ9MCxkZXN0OmEsd2lkdGg6aSxoZWlnaHQ6bixub25CbGFja0NvbG9yOnM9NDI5NDk2NzI5NSxpbnZlcnNlRGVjb2RlOm89ITF9KXtjb25zdCBjPXIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsW2wsaF09bz9bcyxjXTpbYyxzXSx1PWk+PjMsZD03JmksZj1lLmxlbmd0aDthPW5ldyBVaW50MzJBcnJheShhLmJ1ZmZlcik7bGV0IGc9MDtmb3IobGV0IHI9MDtyPG47cisrKXtmb3IoY29uc3Qgcj10K3U7dDxyO3QrKyl7Y29uc3Qgcj10PGY/ZVt0XToyNTU7YVtnKytdPTEyOCZyP2g6bDthW2crK109NjQmcj9oOmw7YVtnKytdPTMyJnI/aDpsO2FbZysrXT0xNiZyP2g6bDthW2crK109OCZyP2g6bDthW2crK109NCZyP2g6bDthW2crK109MiZyP2g6bDthW2crK109MSZyP2g6bH1pZigwPT09ZCljb250aW51ZTtjb25zdCByPXQ8Zj9lW3QrK106MjU1O2ZvcihsZXQgZT0wO2U8ZDtlKyspYVtnKytdPXImMTw8Ny1lP2g6bH1yZXR1cm57c3JjUG9zOnQsZGVzdFBvczpnfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcHhTdHJlYW09dm9pZCAwO3ZhciByPWEoMTgpLGk9YSgzMCksbj1hKDIpO2NsYXNzIEpweFN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcih0KTt0aGlzLnN0cmVhbT1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5tYXliZUxlbmd0aD10O3RoaXMucGFyYW1zPWF9Z2V0IGJ5dGVzKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9ZW5zdXJlQnVmZmVyKGUpe31yZWFkQmxvY2soKXtpZih0aGlzLmVvZilyZXR1cm47Y29uc3QgZT1uZXcgaS5KcHhJbWFnZTtlLnBhcnNlKHRoaXMuYnl0ZXMpO2NvbnN0IHQ9ZS53aWR0aCxhPWUuaGVpZ2h0LHI9ZS5jb21wb25lbnRzQ291bnQsbj1lLnRpbGVzLmxlbmd0aDtpZigxPT09bil0aGlzLmJ1ZmZlcj1lLnRpbGVzWzBdLml0ZW1zO2Vsc2V7Y29uc3QgaT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCphKnIpO2ZvcihsZXQgYT0wO2E8bjthKyspe2NvbnN0IG49ZS50aWxlc1thXSxzPW4ud2lkdGgsbz1uLmhlaWdodCxjPW4ubGVmdCxsPW4udG9wLGg9bi5pdGVtcztsZXQgdT0wLGQ9KHQqbCtjKSpyO2NvbnN0IGY9dCpyLGc9cypyO2ZvcihsZXQgZT0wO2U8bztlKyspe2NvbnN0IGU9aC5zdWJhcnJheSh1LHUrZyk7aS5zZXQoZSxkKTt1Kz1nO2QrPWZ9fXRoaXMuYnVmZmVyPWl9dGhpcy5idWZmZXJMZW5ndGg9dGhpcy5idWZmZXIubGVuZ3RoO3RoaXMuZW9mPSEwfX10LkpweFN0cmVhbT1KcHhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcHhJbWFnZT12b2lkIDA7dmFyIHI9YSgyKSxpPWEoMyksbj1hKDI1KTtjbGFzcyBKcHhFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihgSlBYIGVycm9yOiAke2V9YCwiSnB4RXJyb3IiKX19Y29uc3Qgcz17TEw6MCxMSDoxLEhMOjEsSEg6Mn07dC5KcHhJbWFnZT1jbGFzcyBKcHhJbWFnZXtjb25zdHJ1Y3Rvcigpe3RoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2U9ITF9cGFyc2UoZSl7aWYoNjUzNTk9PT0oMCxpLnJlYWRVaW50MTYpKGUsMCkpe3RoaXMucGFyc2VDb2Rlc3RyZWFtKGUsMCxlLmxlbmd0aCk7cmV0dXJufWNvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8dDspe2xldCBuPTgscz0oMCxpLnJlYWRVaW50MzIpKGUsYSk7Y29uc3Qgbz0oMCxpLnJlYWRVaW50MzIpKGUsYSs0KTthKz1uO2lmKDE9PT1zKXtzPTQyOTQ5NjcyOTYqKDAsaS5yZWFkVWludDMyKShlLGEpKygwLGkucmVhZFVpbnQzMikoZSxhKzQpO2ErPTg7bis9OH0wPT09cyYmKHM9dC1hK24pO2lmKHM8bil0aHJvdyBuZXcgSnB4RXJyb3IoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTtjb25zdCBjPXMtbjtsZXQgbD0hMDtzd2l0Y2gobyl7Y2FzZSAxNzg1NzM3ODMyOmw9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOmNvbnN0IHQ9ZVthXTtpZigxPT09dCl7Y29uc3QgdD0oMCxpLnJlYWRVaW50MzIpKGUsYSszKTtzd2l0Y2godCl7Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6YnJlYWs7ZGVmYXVsdDooMCxyLndhcm4pKCJVbmtub3duIGNvbG9yc3BhY2UgIit0KX19ZWxzZSAyPT09dCYmKDAsci5pbmZvKSgiSUNDIHByb2ZpbGUgbm90IHN1cHBvcnRlZCIpO2JyZWFrO2Nhc2UgMTc4NTczNzgyNzp0aGlzLnBhcnNlQ29kZXN0cmVhbShlLGEsYStjKTticmVhaztjYXNlIDE3ODM2MzZlMzoyMTg3OTM3MzghPT0oMCxpLnJlYWRVaW50MzIpKGUsYSkmJigwLHIud2FybikoIkludmFsaWQgSlAyIHNpZ25hdHVyZSIpO2JyZWFrO2Nhc2UgMTc4MzYzNDQ1ODpjYXNlIDE3MTg5MDkyOTY6Y2FzZSAxOTIwMDk5Njk3OmNhc2UgMTkxOTI1MTIzMjpjYXNlIDE3Njg0NDkxMzg6YnJlYWs7ZGVmYXVsdDpjb25zdCBuPVN0cmluZy5mcm9tQ2hhckNvZGUobz4+MjQmMjU1LG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyk7KDAsci53YXJuKShgVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgJHtvfSAoJHtufSkuYCl9bCYmKGErPWMpfX1wYXJzZUltYWdlUHJvcGVydGllcyhlKXtsZXQgdD1lLmdldEJ5dGUoKTtmb3IoO3Q+PTA7KXtjb25zdCBhPXQ7dD1lLmdldEJ5dGUoKTtpZig2NTM2MT09PShhPDw4fHQpKXtlLnNraXAoNCk7Y29uc3QgdD1lLmdldEludDMyKCk+Pj4wLGE9ZS5nZXRJbnQzMigpPj4+MCxyPWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wO2Uuc2tpcCgxNik7Y29uc3Qgbj1lLmdldFVpbnQxNigpO3RoaXMud2lkdGg9dC1yO3RoaXMuaGVpZ2h0PWEtaTt0aGlzLmNvbXBvbmVudHNDb3VudD1uO3RoaXMuYml0c1BlckNvbXBvbmVudD04O3JldHVybn19dGhyb3cgbmV3IEpweEVycm9yKCJObyBzaXplIG1hcmtlciBmb3VuZCBpbiBKUFggc3RyZWFtIil9cGFyc2VDb2Rlc3RyZWFtKGUsdCxhKXtjb25zdCBuPXt9O2xldCBzPSExO3RyeXtsZXQgbz10O2Zvcig7bysxPGE7KXtjb25zdCB0PSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2xldCBhLGMsbCxoLHUsZCxmPTA7c3dpdGNoKHQpe2Nhc2UgNjUzNTk6bi5tYWluSGVhZGVyPSEwO2JyZWFrO2Nhc2UgNjU0OTc6YnJlYWs7Y2FzZSA2NTM2MTpmPSgwLGkucmVhZFVpbnQxNikoZSxvKTtjb25zdCBnPXt9O2cuWHNpej0oMCxpLnJlYWRVaW50MzIpKGUsbys0KTtnLllzaXo9KDAsaS5yZWFkVWludDMyKShlLG8rOCk7Zy5YT3Npej0oMCxpLnJlYWRVaW50MzIpKGUsbysxMik7Zy5ZT3Npej0oMCxpLnJlYWRVaW50MzIpKGUsbysxNik7Zy5YVHNpej0oMCxpLnJlYWRVaW50MzIpKGUsbysyMCk7Zy5ZVHNpej0oMCxpLnJlYWRVaW50MzIpKGUsbysyNCk7Zy5YVE9zaXo9KDAsaS5yZWFkVWludDMyKShlLG8rMjgpO2cuWVRPc2l6PSgwLGkucmVhZFVpbnQzMikoZSxvKzMyKTtjb25zdCBwPSgwLGkucmVhZFVpbnQxNikoZSxvKzM2KTtnLkNzaXo9cDtjb25zdCBtPVtdO2E9byszODtmb3IobGV0IHQ9MDt0PHA7dCsrKXtjb25zdCB0PXtwcmVjaXNpb246MSsoMTI3JmVbYV0pLGlzU2lnbmVkOiEhKDEyOCZlW2FdKSxYUnNpejplW2ErMV0sWVJzaXo6ZVthKzJdfTthKz0zO2NhbGN1bGF0ZUNvbXBvbmVudERpbWVuc2lvbnModCxnKTttLnB1c2godCl9bi5TSVo9ZztuLmNvbXBvbmVudHM9bTtjYWxjdWxhdGVUaWxlR3JpZHMobixtKTtuLlFDQz1bXTtuLkNPQz1bXTticmVhaztjYXNlIDY1MzcyOmY9KDAsaS5yZWFkVWludDE2KShlLG8pO2NvbnN0IGI9e307YT1vKzI7Yz1lW2ErK107c3dpdGNoKDMxJmMpe2Nhc2UgMDpoPTg7dT0hMDticmVhaztjYXNlIDE6aD0xNjt1PSExO2JyZWFrO2Nhc2UgMjpoPTE2O3U9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1FjZCB2YWx1ZSAiK2MpfWIubm9RdWFudGl6YXRpb249OD09PWg7Yi5zY2FsYXJFeHBvdW5kZWQ9dTtiLmd1YXJkQml0cz1jPj41O2w9W107Zm9yKDthPGYrbzspe2NvbnN0IHQ9e307aWYoOD09PWgpe3QuZXBzaWxvbj1lW2ErK10+PjM7dC5tdT0wfWVsc2V7dC5lcHNpbG9uPWVbYV0+PjM7dC5tdT0oNyZlW2FdKTw8OHxlW2ErMV07YSs9Mn1sLnB1c2godCl9Yi5TUHFjZHM9bDtpZihuLm1haW5IZWFkZXIpbi5RQ0Q9YjtlbHNle24uY3VycmVudFRpbGUuUUNEPWI7bi5jdXJyZW50VGlsZS5RQ0M9W119YnJlYWs7Y2FzZSA2NTM3MzpmPSgwLGkucmVhZFVpbnQxNikoZSxvKTtjb25zdCB5PXt9O2E9bysyO2xldCB3O2lmKG4uU0laLkNzaXo8MjU3KXc9ZVthKytdO2Vsc2V7dz0oMCxpLnJlYWRVaW50MTYpKGUsYSk7YSs9Mn1jPWVbYSsrXTtzd2l0Y2goMzEmYyl7Y2FzZSAwOmg9ODt1PSEwO2JyZWFrO2Nhc2UgMTpoPTE2O3U9ITE7YnJlYWs7Y2FzZSAyOmg9MTY7dT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrYyl9eS5ub1F1YW50aXphdGlvbj04PT09aDt5LnNjYWxhckV4cG91bmRlZD11O3kuZ3VhcmRCaXRzPWM+PjU7bD1bXTtmb3IoO2E8ZitvOyl7Y29uc3QgdD17fTtpZig4PT09aCl7dC5lcHNpbG9uPWVbYSsrXT4+Mzt0Lm11PTB9ZWxzZXt0LmVwc2lsb249ZVthXT4+Mzt0Lm11PSg3JmVbYV0pPDw4fGVbYSsxXTthKz0yfWwucHVzaCh0KX15LlNQcWNkcz1sO24ubWFpbkhlYWRlcj9uLlFDQ1t3XT15Om4uY3VycmVudFRpbGUuUUNDW3ddPXk7YnJlYWs7Y2FzZSA2NTM2MjpmPSgwLGkucmVhZFVpbnQxNikoZSxvKTtjb25zdCBTPXt9O2E9bysyO2NvbnN0IHg9ZVthKytdO1MuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cz0hISgxJngpO1Muc29wTWFya2VyVXNlZD0hISgyJngpO1MuZXBoTWFya2VyVXNlZD0hISg0JngpO1MucHJvZ3Jlc3Npb25PcmRlcj1lW2ErK107Uy5sYXllcnNDb3VudD0oMCxpLnJlYWRVaW50MTYpKGUsYSk7YSs9MjtTLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtPWVbYSsrXTtTLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudD1lW2ErK107Uy54Y2I9MisoMTUmZVthKytdKTtTLnljYj0yKygxNSZlW2ErK10pO2NvbnN0IEM9ZVthKytdO1Muc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcz0hISgxJkMpO1MucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcz0hISgyJkMpO1MudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzPSEhKDQmQyk7Uy52ZXJ0aWNhbGx5U3RyaXBlPSEhKDgmQyk7Uy5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uPSEhKDE2JkMpO1Muc2VnbWVudGF0aW9uU3ltYm9sVXNlZD0hISgzMiZDKTtTLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbj1lW2ErK107aWYoUy5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKXtjb25zdCB0PVtdO2Zvcig7YTxmK287KXtjb25zdCByPWVbYSsrXTt0LnB1c2goe1BQeDoxNSZyLFBQeTpyPj40fSl9Uy5wcmVjaW5jdHNTaXplcz10fWNvbnN0IGs9W107Uy5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzJiZrLnB1c2goInNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MiKTtTLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyYmay5wdXNoKCJ0ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MiKTtTLnZlcnRpY2FsbHlTdHJpcGUmJmsucHVzaCgidmVydGljYWxseVN0cmlwZSIpO1MucHJlZGljdGFibGVUZXJtaW5hdGlvbiYmay5wdXNoKCJwcmVkaWN0YWJsZVRlcm1pbmF0aW9uIik7aWYoay5sZW5ndGg+MCl7cz0hMDsoMCxyLndhcm4pKGBKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgke2suam9pbigiLCAiKX0pLmApfWlmKG4ubWFpbkhlYWRlciluLkNPRD1TO2Vsc2V7bi5jdXJyZW50VGlsZS5DT0Q9UztuLmN1cnJlbnRUaWxlLkNPQz1bXX1icmVhaztjYXNlIDY1NDI0OmY9KDAsaS5yZWFkVWludDE2KShlLG8pO2Q9e307ZC5pbmRleD0oMCxpLnJlYWRVaW50MTYpKGUsbysyKTtkLmxlbmd0aD0oMCxpLnJlYWRVaW50MzIpKGUsbys0KTtkLmRhdGFFbmQ9ZC5sZW5ndGgrby0yO2QucGFydEluZGV4PWVbbys4XTtkLnBhcnRzQ291bnQ9ZVtvKzldO24ubWFpbkhlYWRlcj0hMTtpZigwPT09ZC5wYXJ0SW5kZXgpe2QuQ09EPW4uQ09EO2QuQ09DPW4uQ09DLnNsaWNlKDApO2QuUUNEPW4uUUNEO2QuUUNDPW4uUUNDLnNsaWNlKDApfW4uY3VycmVudFRpbGU9ZDticmVhaztjYXNlIDY1NDI3OmQ9bi5jdXJyZW50VGlsZTtpZigwPT09ZC5wYXJ0SW5kZXgpe2luaXRpYWxpemVUaWxlKG4sZC5pbmRleCk7YnVpbGRQYWNrZXRzKG4pfWY9ZC5kYXRhRW5kLW87cGFyc2VUaWxlUGFja2V0cyhuLGUsbyxmKTticmVhaztjYXNlIDY1MzYzOigwLHIud2FybikoIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDpmPSgwLGkucmVhZFVpbnQxNikoZSxvKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrdC50b1N0cmluZygxNikpfW8rPWZ9fWNhdGNoKGUpe2lmKHN8fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IEpweEVycm9yKGUubWVzc2FnZSk7KDAsci53YXJuKShgSlBYOiBUcnlpbmcgdG8gcmVjb3ZlciBmcm9tOiAiJHtlLm1lc3NhZ2V9Ii5gKX10aGlzLnRpbGVzPWZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudHMoZSl7Y29uc3QgdD1lLlNJWixhPWUuY29tcG9uZW50cyxyPXQuQ3NpeixpPVtdO2ZvcihsZXQgdD0wLG49ZS50aWxlcy5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lLnRpbGVzW3RdLHM9W107Zm9yKGxldCB0PTA7dDxyO3QrKylzW3RdPXRyYW5zZm9ybVRpbGUoZSxuLHQpO2NvbnN0IG89c1swXSxjPW5ldyBVaW50OENsYW1wZWRBcnJheShvLml0ZW1zLmxlbmd0aCpyKSxsPXtsZWZ0Om8ubGVmdCx0b3A6by50b3Asd2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHQsaXRlbXM6Y307bGV0IGgsdSxkLGYsZyxwLG0sYj0wO2lmKG4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybSl7Y29uc3QgZT00PT09cix0PXNbMF0uaXRlbXMsaT1zWzFdLml0ZW1zLG89c1syXS5pdGVtcyxsPWU/c1szXS5pdGVtczpudWxsO2g9YVswXS5wcmVjaXNpb24tODt1PS41KygxMjg8PGgpO2NvbnN0IHk9bi5jb21wb25lbnRzWzBdLHc9ci0zO2Y9dC5sZW5ndGg7aWYoeS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKWZvcihkPTA7ZDxmO2QrKyxiKz13KXtnPXRbZF0rdTtwPWlbZF07bT1vW2RdO2NvbnN0IGU9Zy0obStwPj4yKTtjW2IrK109ZSttPj5oO2NbYisrXT1lPj5oO2NbYisrXT1lK3A+Pmh9ZWxzZSBmb3IoZD0wO2Q8ZjtkKyssYis9dyl7Zz10W2RdK3U7cD1pW2RdO209b1tkXTtjW2IrK109ZysxLjQwMiptPj5oO2NbYisrXT1nLS4zNDQxMypwLS43MTQxNCptPj5oO2NbYisrXT1nKzEuNzcyKnA+Pmh9aWYoZSlmb3IoZD0wLGI9MztkPGY7ZCsrLGIrPTQpY1tiXT1sW2RdK3U+Pmh9ZWxzZSBmb3IobGV0IGU9MDtlPHI7ZSsrKXtjb25zdCB0PXNbZV0uaXRlbXM7aD1hW2VdLnByZWNpc2lvbi04O3U9LjUrKDEyODw8aCk7Zm9yKGI9ZSxkPTAsZj10Lmxlbmd0aDtkPGY7ZCsrKXtjW2JdPXRbZF0rdT4+aDtiKz1yfX1pLnB1c2gobCl9cmV0dXJuIGl9KG4pO3RoaXMud2lkdGg9bi5TSVouWHNpei1uLlNJWi5YT3Npejt0aGlzLmhlaWdodD1uLlNJWi5Zc2l6LW4uU0laLllPc2l6O3RoaXMuY29tcG9uZW50c0NvdW50PW4uU0laLkNzaXp9fTtmdW5jdGlvbiBjYWxjdWxhdGVDb21wb25lbnREaW1lbnNpb25zKGUsdCl7ZS54MD1NYXRoLmNlaWwodC5YT3Npei9lLlhSc2l6KTtlLngxPU1hdGguY2VpbCh0LlhzaXovZS5YUnNpeik7ZS55MD1NYXRoLmNlaWwodC5ZT3Npei9lLllSc2l6KTtlLnkxPU1hdGguY2VpbCh0LllzaXovZS5ZUnNpeik7ZS53aWR0aD1lLngxLWUueDA7ZS5oZWlnaHQ9ZS55MS1lLnkwfWZ1bmN0aW9uIGNhbGN1bGF0ZVRpbGVHcmlkcyhlLHQpe2NvbnN0IGE9ZS5TSVoscj1bXTtsZXQgaTtjb25zdCBuPU1hdGguY2VpbCgoYS5Yc2l6LWEuWFRPc2l6KS9hLlhUc2l6KSxzPU1hdGguY2VpbCgoYS5Zc2l6LWEuWVRPc2l6KS9hLllUc2l6KTtmb3IobGV0IGU9MDtlPHM7ZSsrKWZvcihsZXQgdD0wO3Q8bjt0Kyspe2k9e307aS50eDA9TWF0aC5tYXgoYS5YVE9zaXordCphLlhUc2l6LGEuWE9zaXopO2kudHkwPU1hdGgubWF4KGEuWVRPc2l6K2UqYS5ZVHNpeixhLllPc2l6KTtpLnR4MT1NYXRoLm1pbihhLlhUT3NpeisodCsxKSphLlhUc2l6LGEuWHNpeik7aS50eTE9TWF0aC5taW4oYS5ZVE9zaXorKGUrMSkqYS5ZVHNpeixhLllzaXopO2kud2lkdGg9aS50eDEtaS50eDA7aS5oZWlnaHQ9aS50eTEtaS50eTA7aS5jb21wb25lbnRzPVtdO3IucHVzaChpKX1lLnRpbGVzPXI7Zm9yKGxldCBlPTAsbj1hLkNzaXo7ZTxuO2UrKyl7Y29uc3QgYT10W2VdO2ZvcihsZXQgdD0wLG49ci5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj17fTtpPXJbdF07bi50Y3gwPU1hdGguY2VpbChpLnR4MC9hLlhSc2l6KTtuLnRjeTA9TWF0aC5jZWlsKGkudHkwL2EuWVJzaXopO24udGN4MT1NYXRoLmNlaWwoaS50eDEvYS5YUnNpeik7bi50Y3kxPU1hdGguY2VpbChpLnR5MS9hLllSc2l6KTtuLndpZHRoPW4udGN4MS1uLnRjeDA7bi5oZWlnaHQ9bi50Y3kxLW4udGN5MDtpLmNvbXBvbmVudHNbZV09bn19fWZ1bmN0aW9uIGdldEJsb2Nrc0RpbWVuc2lvbnMoZSx0LGEpe2NvbnN0IHI9dC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsaT17fTtpZihyLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2kuUFB4PXIucHJlY2luY3RzU2l6ZXNbYV0uUFB4O2kuUFB5PXIucHJlY2luY3RzU2l6ZXNbYV0uUFB5fWVsc2V7aS5QUHg9MTU7aS5QUHk9MTV9aS54Y2JfPWE+MD9NYXRoLm1pbihyLnhjYixpLlBQeC0xKTpNYXRoLm1pbihyLnhjYixpLlBQeCk7aS55Y2JfPWE+MD9NYXRoLm1pbihyLnljYixpLlBQeS0xKTpNYXRoLm1pbihyLnljYixpLlBQeSk7cmV0dXJuIGl9ZnVuY3Rpb24gYnVpbGRQcmVjaW5jdHMoZSx0LGEpe2NvbnN0IHI9MTw8YS5QUHgsaT0xPDxhLlBQeSxuPTA9PT10LnJlc0xldmVsLHM9MTw8YS5QUHgrKG4/MDotMSksbz0xPDxhLlBQeSsobj8wOi0xKSxjPXQudHJ4MT50LnRyeDA/TWF0aC5jZWlsKHQudHJ4MS9yKS1NYXRoLmZsb29yKHQudHJ4MC9yKTowLGw9dC50cnkxPnQudHJ5MD9NYXRoLmNlaWwodC50cnkxL2kpLU1hdGguZmxvb3IodC50cnkwL2kpOjAsaD1jKmw7dC5wcmVjaW5jdFBhcmFtZXRlcnM9e3ByZWNpbmN0V2lkdGg6cixwcmVjaW5jdEhlaWdodDppLG51bXByZWNpbmN0c3dpZGU6YyxudW1wcmVjaW5jdHNoaWdoOmwsbnVtcHJlY2luY3RzOmgscHJlY2luY3RXaWR0aEluU3ViYmFuZDpzLHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kOm99fWZ1bmN0aW9uIGJ1aWxkQ29kZWJsb2NrcyhlLHQsYSl7Y29uc3Qgcj1hLnhjYl8saT1hLnljYl8sbj0xPDxyLHM9MTw8aSxvPXQudGJ4MD4+cixjPXQudGJ5MD4+aSxsPXQudGJ4MStuLTE+PnIsaD10LnRieTErcy0xPj5pLHU9dC5yZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycyxkPVtdLGY9W107bGV0IGcscCxtLGI7Zm9yKHA9YztwPGg7cCsrKWZvcihnPW87ZzxsO2crKyl7bT17Y2J4OmcsY2J5OnAsdGJ4MDpuKmcsdGJ5MDpzKnAsdGJ4MTpuKihnKzEpLHRieTE6cyoocCsxKX07bS50YngwXz1NYXRoLm1heCh0LnRieDAsbS50YngwKTttLnRieTBfPU1hdGgubWF4KHQudGJ5MCxtLnRieTApO20udGJ4MV89TWF0aC5taW4odC50YngxLG0udGJ4MSk7bS50YnkxXz1NYXRoLm1pbih0LnRieTEsbS50YnkxKTtiPU1hdGguZmxvb3IoKG0udGJ4MF8tdC50YngwKS91LnByZWNpbmN0V2lkdGhJblN1YmJhbmQpK01hdGguZmxvb3IoKG0udGJ5MF8tdC50YnkwKS91LnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKSp1Lm51bXByZWNpbmN0c3dpZGU7bS5wcmVjaW5jdE51bWJlcj1iO20uc3ViYmFuZFR5cGU9dC50eXBlO20uTGJsb2NrPTM7aWYobS50YngxXzw9bS50YngwX3x8bS50YnkxXzw9bS50YnkwXyljb250aW51ZTtkLnB1c2gobSk7bGV0IGU9ZltiXTtpZih2b2lkIDAhPT1lKXtnPGUuY2J4TWluP2UuY2J4TWluPWc6Zz5lLmNieE1heCYmKGUuY2J4TWF4PWcpO3A8ZS5jYnlNaW4/ZS5jYnhNaW49cDpwPmUuY2J5TWF4JiYoZS5jYnlNYXg9cCl9ZWxzZSBmW2JdPWU9e2NieE1pbjpnLGNieU1pbjpwLGNieE1heDpnLGNieU1heDpwfTttLnByZWNpbmN0PWV9dC5jb2RlYmxvY2tQYXJhbWV0ZXJzPXtjb2RlYmxvY2tXaWR0aDpyLGNvZGVibG9ja0hlaWdodDppLG51bWNvZGVibG9ja3dpZGU6bC1vKzEsbnVtY29kZWJsb2NraGlnaDpoLWMrMX07dC5jb2RlYmxvY2tzPWQ7dC5wcmVjaW5jdHM9Zn1mdW5jdGlvbiBjcmVhdGVQYWNrZXQoZSx0LGEpe2NvbnN0IHI9W10saT1lLnN1YmJhbmRzO2ZvcihsZXQgZT0wLGE9aS5sZW5ndGg7ZTxhO2UrKyl7Y29uc3QgYT1pW2VdLmNvZGVibG9ja3M7Zm9yKGxldCBlPTAsaT1hLmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBpPWFbZV07aS5wcmVjaW5jdE51bWJlcj09PXQmJnIucHVzaChpKX19cmV0dXJue2xheWVyTnVtYmVyOmEsY29kZWJsb2NrczpyfX1mdW5jdGlvbiBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxpPXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxuPXQuQ3NpejtsZXQgcz0wO2ZvcihsZXQgZT0wO2U8bjtlKyspcz1NYXRoLm1heChzLHIuY29tcG9uZW50c1tlXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTtsZXQgbz0wLGM9MCxsPTAsaD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCl7Zm9yKDtvPGk7bysrKXtmb3IoO2M8PXM7YysrKXtmb3IoO2w8bjtsKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2xdO2lmKGM+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KWNvbnRpbnVlO2NvbnN0IHQ9ZS5yZXNvbHV0aW9uc1tjXSxhPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztmb3IoO2g8YTspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQsaCxvKTtoKys7cmV0dXJuIGV9aD0wfWw9MH1jPTB9dGhyb3cgbmV3IEpweEVycm9yKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBSZXNvbHV0aW9uTGF5ZXJDb21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxpPXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxuPXQuQ3NpejtsZXQgcz0wO2ZvcihsZXQgZT0wO2U8bjtlKyspcz1NYXRoLm1heChzLHIuY29tcG9uZW50c1tlXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTtsZXQgbz0wLGM9MCxsPTAsaD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCl7Zm9yKDtvPD1zO28rKyl7Zm9yKDtjPGk7YysrKXtmb3IoO2w8bjtsKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2xdO2lmKG8+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KWNvbnRpbnVlO2NvbnN0IHQ9ZS5yZXNvbHV0aW9uc1tvXSxhPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztmb3IoO2g8YTspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQsaCxjKTtoKys7cmV0dXJuIGV9aD0wfWw9MH1jPTB9dGhyb3cgbmV3IEpweEVycm9yKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBSZXNvbHV0aW9uUG9zaXRpb25Db21wb25lbnRMYXllckl0ZXJhdG9yKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxpPXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxuPXQuQ3NpejtsZXQgcyxvLGMsbCxoPTA7Zm9yKGM9MDtjPG47YysrKXtjb25zdCBlPXIuY29tcG9uZW50c1tjXTtoPU1hdGgubWF4KGgsZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KX1jb25zdCB1PW5ldyBJbnQzMkFycmF5KGgrMSk7Zm9yKG89MDtvPD1oOysrbyl7bGV0IGU9MDtmb3IoYz0wO2M8bjsrK2Mpe2NvbnN0IHQ9ci5jb21wb25lbnRzW2NdLnJlc29sdXRpb25zO288dC5sZW5ndGgmJihlPU1hdGgubWF4KGUsdFtvXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzKSl9dVtvXT1lfXM9MDtvPTA7Yz0wO2w9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7bzw9aDtvKyspe2Zvcig7bDx1W29dO2wrKyl7Zm9yKDtjPG47YysrKXtjb25zdCBlPXIuY29tcG9uZW50c1tjXTtpZihvPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCljb250aW51ZTtjb25zdCB0PWUucmVzb2x1dGlvbnNbb10sYT10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7aWYoIShsPj1hKSl7Zm9yKDtzPGk7KXtjb25zdCBlPWNyZWF0ZVBhY2tldCh0LGwscyk7cysrO3JldHVybiBlfXM9MH19Yz0wfWw9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLGk9ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LG49dC5Dc2l6LHM9Z2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZShyKSxvPXM7bGV0IGM9MCxsPTAsaD0wLHU9MCxkPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO2Q8by5tYXhOdW1IaWdoO2QrKyl7Zm9yKDt1PG8ubWF4TnVtV2lkZTt1Kyspe2Zvcig7aDxuO2grKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbaF0sdD1lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7Zm9yKDtsPD10O2wrKyl7Y29uc3QgdD1lLnJlc29sdXRpb25zW2xdLGE9cy5jb21wb25lbnRzW2hdLnJlc29sdXRpb25zW2xdLHI9Z2V0UHJlY2luY3RJbmRleElmRXhpc3QodSxkLGEsbyx0KTtpZihudWxsIT09cil7Zm9yKDtjPGk7KXtjb25zdCBlPWNyZWF0ZVBhY2tldCh0LHIsYyk7YysrO3JldHVybiBlfWM9MH19bD0wfWg9MH11PTB9dGhyb3cgbmV3IEpweEVycm9yKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBDb21wb25lbnRQb3NpdGlvblJlc29sdXRpb25MYXllckl0ZXJhdG9yKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxpPXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxuPXQuQ3NpeixzPWdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUocik7bGV0IG89MCxjPTAsbD0wLGg9MCx1PTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO2w8bjsrK2wpe2NvbnN0IGU9ci5jb21wb25lbnRzW2xdLHQ9cy5jb21wb25lbnRzW2xdLGE9ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O2Zvcig7dTx0Lm1heE51bUhpZ2g7dSsrKXtmb3IoO2g8dC5tYXhOdW1XaWRlO2grKyl7Zm9yKDtjPD1hO2MrKyl7Y29uc3QgYT1lLnJlc29sdXRpb25zW2NdLHI9dC5yZXNvbHV0aW9uc1tjXSxuPWdldFByZWNpbmN0SW5kZXhJZkV4aXN0KGgsdSxyLHQsYSk7aWYobnVsbCE9PW4pe2Zvcig7bzxpOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQoYSxuLG8pO28rKztyZXR1cm4gZX1vPTB9fWM9MH1oPTB9dT0wfXRocm93IG5ldyBKcHhFcnJvcigiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QoZSx0LGEscixpKXtjb25zdCBuPWUqci5taW5XaWR0aCxzPXQqci5taW5IZWlnaHQ7aWYobiVhLndpZHRoIT0wfHxzJWEuaGVpZ2h0IT0wKXJldHVybiBudWxsO2NvbnN0IG89cy9hLndpZHRoKmkucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7cmV0dXJuIG4vYS5oZWlnaHQrb31mdW5jdGlvbiBnZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKGUpe2NvbnN0IHQ9ZS5jb21wb25lbnRzLmxlbmd0aDtsZXQgYT1OdW1iZXIuTUFYX1ZBTFVFLHI9TnVtYmVyLk1BWF9WQUxVRSxpPTAsbj0wO2NvbnN0IHM9bmV3IEFycmF5KHQpO2ZvcihsZXQgbz0wO288dDtvKyspe2NvbnN0IHQ9ZS5jb21wb25lbnRzW29dLGM9dC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LGw9bmV3IEFycmF5KGMrMSk7bGV0IGg9TnVtYmVyLk1BWF9WQUxVRSx1PU51bWJlci5NQVhfVkFMVUUsZD0wLGY9MCxnPTE7Zm9yKGxldCBlPWM7ZT49MDstLWUpe2NvbnN0IGE9dC5yZXNvbHV0aW9uc1tlXSxyPWcqYS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCxpPWcqYS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7aD1NYXRoLm1pbihoLHIpO3U9TWF0aC5taW4odSxpKTtkPU1hdGgubWF4KGQsYS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZSk7Zj1NYXRoLm1heChmLGEucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpO2xbZV09e3dpZHRoOnIsaGVpZ2h0Oml9O2c8PD0xfWE9TWF0aC5taW4oYSxoKTtyPU1hdGgubWluKHIsdSk7aT1NYXRoLm1heChpLGQpO249TWF0aC5tYXgobixmKTtzW29dPXtyZXNvbHV0aW9uczpsLG1pbldpZHRoOmgsbWluSGVpZ2h0OnUsbWF4TnVtV2lkZTpkLG1heE51bUhpZ2g6Zn19cmV0dXJue2NvbXBvbmVudHM6cyxtaW5XaWR0aDphLG1pbkhlaWdodDpyLG1heE51bVdpZGU6aSxtYXhOdW1IaWdoOm59fWZ1bmN0aW9uIGJ1aWxkUGFja2V0cyhlKXtjb25zdCB0PWUuU0laLGE9ZS5jdXJyZW50VGlsZS5pbmRleCxyPWUudGlsZXNbYV0saT10LkNzaXo7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7Y29uc3QgdD1yLmNvbXBvbmVudHNbZV0sYT10LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsaT1bXSxuPVtdO2ZvcihsZXQgZT0wO2U8PWE7ZSsrKXtjb25zdCByPWdldEJsb2Nrc0RpbWVuc2lvbnMoMCx0LGUpLHM9e30sbz0xPDxhLWU7cy50cngwPU1hdGguY2VpbCh0LnRjeDAvbyk7cy50cnkwPU1hdGguY2VpbCh0LnRjeTAvbyk7cy50cngxPU1hdGguY2VpbCh0LnRjeDEvbyk7cy50cnkxPU1hdGguY2VpbCh0LnRjeTEvbyk7cy5yZXNMZXZlbD1lO2J1aWxkUHJlY2luY3RzKDAscyxyKTtpLnB1c2gocyk7bGV0IGM7aWYoMD09PWUpe2M9e307Yy50eXBlPSJMTCI7Yy50YngwPU1hdGguY2VpbCh0LnRjeDAvbyk7Yy50YnkwPU1hdGguY2VpbCh0LnRjeTAvbyk7Yy50YngxPU1hdGguY2VpbCh0LnRjeDEvbyk7Yy50YnkxPU1hdGguY2VpbCh0LnRjeTEvbyk7Yy5yZXNvbHV0aW9uPXM7YnVpbGRDb2RlYmxvY2tzKDAsYyxyKTtuLnB1c2goYyk7cy5zdWJiYW5kcz1bY119ZWxzZXtjb25zdCBpPTE8PGEtZSsxLG89W107Yz17fTtjLnR5cGU9IkhMIjtjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9pLS41KTtjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9pKTtjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9pLS41KTtjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9pKTtjLnJlc29sdXRpb249cztidWlsZENvZGVibG9ja3MoMCxjLHIpO24ucHVzaChjKTtvLnB1c2goYyk7Yz17fTtjLnR5cGU9IkxIIjtjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9pKTtjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9pLS41KTtjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9pKTtjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9pLS41KTtjLnJlc29sdXRpb249cztidWlsZENvZGVibG9ja3MoMCxjLHIpO24ucHVzaChjKTtvLnB1c2goYyk7Yz17fTtjLnR5cGU9IkhIIjtjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9pLS41KTtjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9pLS41KTtjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9pLS41KTtjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9pLS41KTtjLnJlc29sdXRpb249cztidWlsZENvZGVibG9ja3MoMCxjLHIpO24ucHVzaChjKTtvLnB1c2goYyk7cy5zdWJiYW5kcz1vfX10LnJlc29sdXRpb25zPWk7dC5zdWJiYW5kcz1ufWNvbnN0IG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLnByb2dyZXNzaW9uT3JkZXI7c3dpdGNoKG4pe2Nhc2UgMDpyLnBhY2tldHNJdGVyYXRvcj1uZXcgTGF5ZXJSZXNvbHV0aW9uQ29tcG9uZW50UG9zaXRpb25JdGVyYXRvcihlKTticmVhaztjYXNlIDE6ci5wYWNrZXRzSXRlcmF0b3I9bmV3IFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSk7YnJlYWs7Y2FzZSAyOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBSZXNvbHV0aW9uUG9zaXRpb25Db21wb25lbnRMYXllckl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgMzpyLnBhY2tldHNJdGVyYXRvcj1uZXcgUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKTticmVhaztjYXNlIDQ6ci5wYWNrZXRzSXRlcmF0b3I9bmV3IENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSnB4RXJyb3IoYFVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICR7bn1gKX19ZnVuY3Rpb24gcGFyc2VUaWxlUGFja2V0cyhlLHQsYSxyKXtsZXQgbixzPTAsbz0wLGM9ITE7ZnVuY3Rpb24gcmVhZEJpdHMoZSl7Zm9yKDtvPGU7KXtjb25zdCBlPXRbYStzXTtzKys7aWYoYyl7bj1uPDw3fGU7bys9NztjPSExfWVsc2V7bj1uPDw4fGU7bys9OH0yNTU9PT1lJiYoYz0hMCl9by09ZTtyZXR1cm4gbj4+Pm8mKDE8PGUpLTF9ZnVuY3Rpb24gc2tpcE1hcmtlcklmRXF1YWwoZSl7aWYoMjU1PT09dFthK3MtMV0mJnRbYStzXT09PWUpe3NraXBCeXRlcygxKTtyZXR1cm4hMH1pZigyNTU9PT10W2Erc10mJnRbYStzKzFdPT09ZSl7c2tpcEJ5dGVzKDIpO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHNraXBCeXRlcyhlKXtzKz1lfWZ1bmN0aW9uIGFsaWduVG9CeXRlKCl7bz0wO2lmKGMpe3MrKztjPSExfX1mdW5jdGlvbiByZWFkQ29kaW5ncGFzc2VzKCl7aWYoMD09PXJlYWRCaXRzKDEpKXJldHVybiAxO2lmKDA9PT1yZWFkQml0cygxKSlyZXR1cm4gMjtsZXQgZT1yZWFkQml0cygyKTtpZihlPDMpcmV0dXJuIGUrMztlPXJlYWRCaXRzKDUpO2lmKGU8MzEpcmV0dXJuIGUrNjtlPXJlYWRCaXRzKDcpO3JldHVybiBlKzM3fWNvbnN0IGw9ZS5jdXJyZW50VGlsZS5pbmRleCxoPWUudGlsZXNbbF0sdT1lLkNPRC5zb3BNYXJrZXJVc2VkLGQ9ZS5DT0QuZXBoTWFya2VyVXNlZCxmPWgucGFja2V0c0l0ZXJhdG9yO2Zvcig7czxyOyl7YWxpZ25Ub0J5dGUoKTt1JiZza2lwTWFya2VySWZFcXVhbCgxNDUpJiZza2lwQnl0ZXMoNCk7Y29uc3QgZT1mLm5leHRQYWNrZXQoKTtpZighcmVhZEJpdHMoMSkpY29udGludWU7Y29uc3Qgcj1lLmxheWVyTnVtYmVyLG49W107bGV0IG87Zm9yKGxldCB0PTAsYT1lLmNvZGVibG9ja3MubGVuZ3RoO3Q8YTt0Kyspe289ZS5jb2RlYmxvY2tzW3RdO2xldCBhPW8ucHJlY2luY3Q7Y29uc3Qgcz1vLmNieC1hLmNieE1pbixjPW8uY2J5LWEuY2J5TWluO2xldCBsLGgsdT0hMSxkPSExO2lmKHZvaWQgMCE9PW8uaW5jbHVkZWQpdT0hIXJlYWRCaXRzKDEpO2Vsc2V7YT1vLnByZWNpbmN0O2xldCBlO2lmKHZvaWQgMCE9PWEuaW5jbHVzaW9uVHJlZSllPWEuaW5jbHVzaW9uVHJlZTtlbHNle2NvbnN0IHQ9YS5jYnhNYXgtYS5jYnhNaW4rMSxpPWEuY2J5TWF4LWEuY2J5TWluKzE7ZT1uZXcgSW5jbHVzaW9uVHJlZSh0LGkscik7aD1uZXcgVGFnVHJlZSh0LGkpO2EuaW5jbHVzaW9uVHJlZT1lO2EuemVyb0JpdFBsYW5lc1RyZWU9aDtmb3IobGV0IGU9MDtlPHI7ZSsrKWlmKDAhPT1yZWFkQml0cygxKSl0aHJvdyBuZXcgSnB4RXJyb3IoIkludmFsaWQgdGFnIHRyZWUiKX1pZihlLnJlc2V0KHMsYyxyKSlmb3IoOzspe2lmKCFyZWFkQml0cygxKSl7ZS5pbmNyZW1lbnRWYWx1ZShyKTticmVha31sPSFlLm5leHRMZXZlbCgpO2lmKGwpe28uaW5jbHVkZWQ9ITA7dT1kPSEwO2JyZWFrfX19aWYoIXUpY29udGludWU7aWYoZCl7aD1hLnplcm9CaXRQbGFuZXNUcmVlO2gucmVzZXQocyxjKTtmb3IoOzspaWYocmVhZEJpdHMoMSkpe2w9IWgubmV4dExldmVsKCk7aWYobClicmVha31lbHNlIGguaW5jcmVtZW50VmFsdWUoKTtvLnplcm9CaXRQbGFuZXM9aC52YWx1ZX1jb25zdCBmPXJlYWRDb2RpbmdwYXNzZXMoKTtmb3IoO3JlYWRCaXRzKDEpOylvLkxibG9jaysrO2NvbnN0IGc9KDAsaS5sb2cyKShmKSxwPXJlYWRCaXRzKChmPDE8PGc/Zy0xOmcpK28uTGJsb2NrKTtuLnB1c2goe2NvZGVibG9jazpvLGNvZGluZ3Bhc3NlczpmLGRhdGFMZW5ndGg6cH0pfWFsaWduVG9CeXRlKCk7ZCYmc2tpcE1hcmtlcklmRXF1YWwoMTQ2KTtmb3IoO24ubGVuZ3RoPjA7KXtjb25zdCBlPW4uc2hpZnQoKTtvPWUuY29kZWJsb2NrO3ZvaWQgMD09PW8uZGF0YSYmKG8uZGF0YT1bXSk7by5kYXRhLnB1c2goe2RhdGE6dCxzdGFydDphK3MsZW5kOmErcytlLmRhdGFMZW5ndGgsY29kaW5ncGFzc2VzOmUuY29kaW5ncGFzc2VzfSk7cys9ZS5kYXRhTGVuZ3RofX1yZXR1cm4gc31mdW5jdGlvbiBjb3B5Q29lZmZpY2llbnRzKGUsdCxhLHIsaSxzLG8sYyxsKXtjb25zdCBoPXIudGJ4MCx1PXIudGJ5MCxkPXIudGJ4MS1yLnRieDAsZj1yLmNvZGVibG9ja3MsZz0iSCI9PT1yLnR5cGUuY2hhckF0KDApPzE6MCxwPSJIIj09PXIudHlwZS5jaGFyQXQoMSk/dDowO2ZvcihsZXQgYT0wLG09Zi5sZW5ndGg7YTxtOysrYSl7Y29uc3QgbT1mW2FdLGI9bS50YngxXy1tLnRieDBfLHk9bS50YnkxXy1tLnRieTBfO2lmKDA9PT1ifHwwPT09eSljb250aW51ZTtpZih2b2lkIDA9PT1tLmRhdGEpY29udGludWU7Y29uc3Qgdz1uZXcgQml0TW9kZWwoYix5LG0uc3ViYmFuZFR5cGUsbS56ZXJvQml0UGxhbmVzLHMpO2xldCBTPTI7Y29uc3QgeD1tLmRhdGE7bGV0IEMsayx2LEY9MCxPPTA7Zm9yKEM9MCxrPXgubGVuZ3RoO0M8aztDKyspe3Y9eFtDXTtGKz12LmVuZC12LnN0YXJ0O08rPXYuY29kaW5ncGFzc2VzfWNvbnN0IFQ9bmV3IFVpbnQ4QXJyYXkoRik7bGV0IE09MDtmb3IoQz0wLGs9eC5sZW5ndGg7QzxrO0MrKyl7dj14W0NdO2NvbnN0IGU9di5kYXRhLnN1YmFycmF5KHYuc3RhcnQsdi5lbmQpO1Quc2V0KGUsTSk7TSs9ZS5sZW5ndGh9Y29uc3QgRT1uZXcgbi5Bcml0aG1ldGljRGVjb2RlcihULDAsRik7dy5zZXREZWNvZGVyKEUpO2ZvcihDPTA7QzxPO0MrKyl7c3dpdGNoKFMpe2Nhc2UgMDp3LnJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpO2JyZWFrO2Nhc2UgMTp3LnJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCk7YnJlYWs7Y2FzZSAyOncucnVuQ2xlYW51cFBhc3MoKTtjJiZ3LmNoZWNrU2VnbWVudGF0aW9uU3ltYm9sKCl9bCYmdy5yZXNldCgpO1M9KFMrMSklM31sZXQgRD1tLnRieDBfLWgrKG0udGJ5MF8tdSkqZDtjb25zdCBOPXcuY29lZmZpY2VudHNTaWduLFI9dy5jb2VmZmljZW50c01hZ25pdHVkZSxMPXcuYml0c0RlY29kZWQsXz1vPzA6LjU7bGV0ICQsaixVO009MDtjb25zdCBYPSJMTCIhPT1yLnR5cGU7Zm9yKEM9MDtDPHk7QysrKXtjb25zdCBhPTIqKEQvZHwwKSoodC1kKStnK3A7Zm9yKCQ9MDskPGI7JCsrKXtqPVJbTV07aWYoMCE9PWope2o9KGorXykqaTswIT09TltNXSYmKGo9LWopO1U9TFtNXTtjb25zdCB0PVg/YSsoRDw8MSk6RDtlW3RdPW8mJlU+PXM/ajpqKigxPDxzLVUpfUQrKztNKyt9RCs9ZC1ifX19ZnVuY3Rpb24gdHJhbnNmb3JtVGlsZShlLHQsYSl7Y29uc3Qgcj10LmNvbXBvbmVudHNbYV0saT1yLmNvZGluZ1N0eWxlUGFyYW1ldGVycyxuPXIucXVhbnRpemF0aW9uUGFyYW1ldGVycyxvPWkuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LGM9bi5TUHFjZHMsbD1uLnNjYWxhckV4cG91bmRlZCxoPW4uZ3VhcmRCaXRzLHU9aS5zZWdtZW50YXRpb25TeW1ib2xVc2VkLGQ9aS5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzLGY9ZS5jb21wb25lbnRzW2FdLnByZWNpc2lvbixnPWkucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uLHA9Zz9uZXcgUmV2ZXJzaWJsZVRyYW5zZm9ybTpuZXcgSXJyZXZlcnNpYmxlVHJhbnNmb3JtLG09W107bGV0IGI9MDtmb3IobGV0IGU9MDtlPD1vO2UrKyl7Y29uc3QgdD1yLnJlc29sdXRpb25zW2VdLGE9dC50cngxLXQudHJ4MCxpPXQudHJ5MS10LnRyeTAsbj1uZXcgRmxvYXQzMkFycmF5KGEqaSk7Zm9yKGxldCByPTAsaT10LnN1YmJhbmRzLmxlbmd0aDtyPGk7cisrKXtsZXQgaSxvO2lmKGwpe2k9Y1tiXS5tdTtvPWNbYl0uZXBzaWxvbjtiKyt9ZWxzZXtpPWNbMF0ubXU7bz1jWzBdLmVwc2lsb24rKGU+MD8xLWU6MCl9Y29uc3QgcD10LnN1YmJhbmRzW3JdLG09c1twLnR5cGVdO2NvcHlDb2VmZmljaWVudHMobixhLDAscCxnPzE6MioqKGYrbS1vKSooMStpLzIwNDgpLGgrby0xLGcsdSxkKX1tLnB1c2goe3dpZHRoOmEsaGVpZ2h0OmksaXRlbXM6bn0pfWNvbnN0IHk9cC5jYWxjdWxhdGUobSxyLnRjeDAsci50Y3kwKTtyZXR1cm57bGVmdDpyLnRjeDAsdG9wOnIudGN5MCx3aWR0aDp5LndpZHRoLGhlaWdodDp5LmhlaWdodCxpdGVtczp5Lml0ZW1zfX1mdW5jdGlvbiBpbml0aWFsaXplVGlsZShlLHQpe2NvbnN0IGE9ZS5TSVouQ3NpeixyPWUudGlsZXNbdF07Zm9yKGxldCB0PTA7dDxhO3QrKyl7Y29uc3QgYT1yLmNvbXBvbmVudHNbdF0saT12b2lkIDAhPT1lLmN1cnJlbnRUaWxlLlFDQ1t0XT9lLmN1cnJlbnRUaWxlLlFDQ1t0XTplLmN1cnJlbnRUaWxlLlFDRDthLnF1YW50aXphdGlvblBhcmFtZXRlcnM9aTtjb25zdCBuPXZvaWQgMCE9PWUuY3VycmVudFRpbGUuQ09DW3RdP2UuY3VycmVudFRpbGUuQ09DW3RdOmUuY3VycmVudFRpbGUuQ09EO2EuY29kaW5nU3R5bGVQYXJhbWV0ZXJzPW59ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzPWUuY3VycmVudFRpbGUuQ09EfWNsYXNzIFRhZ1RyZWV7Y29uc3RydWN0b3IoZSx0KXtjb25zdCBhPSgwLGkubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IobGV0IHI9MDtyPGE7cisrKXtjb25zdCBhPXt3aWR0aDplLGhlaWdodDp0LGl0ZW1zOltdfTt0aGlzLmxldmVscy5wdXNoKGEpO2U9TWF0aC5jZWlsKGUvMik7dD1NYXRoLmNlaWwodC8yKX19cmVzZXQoZSx0KXtsZXQgYSxyPTAsaT0wO2Zvcig7cjx0aGlzLmxldmVscy5sZW5ndGg7KXthPXRoaXMubGV2ZWxzW3JdO2NvbnN0IG49ZSt0KmEud2lkdGg7aWYodm9pZCAwIT09YS5pdGVtc1tuXSl7aT1hLml0ZW1zW25dO2JyZWFrfWEuaW5kZXg9bjtlPj49MTt0Pj49MTtyKyt9ci0tO2E9dGhpcy5sZXZlbHNbcl07YS5pdGVtc1thLmluZGV4XT1pO3RoaXMuY3VycmVudExldmVsPXI7ZGVsZXRlIHRoaXMudmFsdWV9aW5jcmVtZW50VmFsdWUoKXtjb25zdCBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9bmV4dExldmVsKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07ZS0tO2lmKGU8MCl7dGhpcy52YWx1ZT1hO3JldHVybiExfXRoaXMuY3VycmVudExldmVsPWU7dD10aGlzLmxldmVsc1tlXTt0Lml0ZW1zW3QuaW5kZXhdPWE7cmV0dXJuITB9fWNsYXNzIEluY2x1c2lvblRyZWV7Y29uc3RydWN0b3IoZSx0LGEpe2NvbnN0IHI9KDAsaS5sb2cyKShNYXRoLm1heChlLHQpKSsxO3RoaXMubGV2ZWxzPVtdO2ZvcihsZXQgaT0wO2k8cjtpKyspe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZSp0KTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXT1hO2NvbnN0IGk9e3dpZHRoOmUsaGVpZ2h0OnQsaXRlbXM6cn07dGhpcy5sZXZlbHMucHVzaChpKTtlPU1hdGguY2VpbChlLzIpO3Q9TWF0aC5jZWlsKHQvMil9fXJlc2V0KGUsdCxhKXtsZXQgcj0wO2Zvcig7cjx0aGlzLmxldmVscy5sZW5ndGg7KXtjb25zdCBpPXRoaXMubGV2ZWxzW3JdLG49ZSt0Kmkud2lkdGg7aS5pbmRleD1uO2NvbnN0IHM9aS5pdGVtc1tuXTtpZigyNTU9PT1zKWJyZWFrO2lmKHM+YSl7dGhpcy5jdXJyZW50TGV2ZWw9cjt0aGlzLnByb3BhZ2F0ZVZhbHVlcygpO3JldHVybiExfWU+Pj0xO3Q+Pj0xO3IrK310aGlzLmN1cnJlbnRMZXZlbD1yLTE7cmV0dXJuITB9aW5jcmVtZW50VmFsdWUoZSl7Y29uc3QgdD10aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07dC5pdGVtc1t0LmluZGV4XT1lKzE7dGhpcy5wcm9wYWdhdGVWYWx1ZXMoKX1wcm9wYWdhdGVWYWx1ZXMoKXtsZXQgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdO2NvbnN0IGE9dC5pdGVtc1t0LmluZGV4XTtmb3IoOy0tZT49MDspe3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hfX1uZXh0TGV2ZWwoKXtsZXQgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdO2NvbnN0IGE9dC5pdGVtc1t0LmluZGV4XTt0Lml0ZW1zW3QuaW5kZXhdPTI1NTtlLS07aWYoZTwwKXJldHVybiExO3RoaXMuY3VycmVudExldmVsPWU7dD10aGlzLmxldmVsc1tlXTt0Lml0ZW1zW3QuaW5kZXhdPWE7cmV0dXJuITB9fWNsYXNzIEJpdE1vZGVse3N0YXRpYyBVTklGT1JNX0NPTlRFWFQ9MTc7c3RhdGljIFJVTkxFTkdUSF9DT05URVhUPTE4O3N0YXRpYyBMTEFuZExIQ29udGV4dHNMYWJlbD1uZXcgVWludDhBcnJheShbMCw1LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwxLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDhdKTtzdGF0aWMgSExDb250ZXh0TGFiZWw9bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSk7c3RhdGljIEhIQ29udGV4dExhYmVsPW5ldyBVaW50OEFycmF5KFswLDEsMiwwLDEsMiwyLDAsMiwyLDIsMCwwLDAsMCwwLDMsNCw1LDAsNCw1LDUsMCw1LDUsNSwwLDAsMCwwLDAsNiw3LDcsMCw3LDcsNywwLDcsNyw3LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDgsMCwwLDAsMCwwLDgsOCw4LDAsOCw4LDgsMCw4LDgsOF0pO2NvbnN0cnVjdG9yKGUsdCxhLHIsaSl7dGhpcy53aWR0aD1lO3RoaXMuaGVpZ2h0PXQ7bGV0IG47bj0iSEgiPT09YT9CaXRNb2RlbC5ISENvbnRleHRMYWJlbDoiSEwiPT09YT9CaXRNb2RlbC5ITENvbnRleHRMYWJlbDpCaXRNb2RlbC5MTEFuZExIQ29udGV4dHNMYWJlbDt0aGlzLmNvbnRleHRMYWJlbFRhYmxlPW47Y29uc3Qgcz1lKnQ7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkocyk7dGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkocyk7bGV0IG87bz1pPjE0P25ldyBVaW50MzJBcnJheShzKTppPjY/bmV3IFVpbnQxNkFycmF5KHMpOm5ldyBVaW50OEFycmF5KHMpO3RoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9bzt0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShzKTtjb25zdCBjPW5ldyBVaW50OEFycmF5KHMpO2lmKDAhPT1yKWZvcihsZXQgZT0wO2U8cztlKyspY1tlXT1yO3RoaXMuYml0c0RlY29kZWQ9Yzt0aGlzLnJlc2V0KCl9c2V0RGVjb2RlcihlKXt0aGlzLmRlY29kZXI9ZX1yZXNldCgpe3RoaXMuY29udGV4dHM9bmV3IEludDhBcnJheSgxOSk7dGhpcy5jb250ZXh0c1swXT04O3RoaXMuY29udGV4dHNbQml0TW9kZWwuVU5JRk9STV9DT05URVhUXT05Mjt0aGlzLmNvbnRleHRzW0JpdE1vZGVsLlJVTkxFTkdUSF9DT05URVhUXT02fXNldE5laWdoYm9yc1NpZ25pZmljYW5jZShlLHQsYSl7Y29uc3Qgcj10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxpPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxzPXQ+MCxvPXQrMTxpO2xldCBjO2lmKGU+MCl7Yz1hLWk7cyYmKHJbYy0xXSs9MTYpO28mJihyW2MrMV0rPTE2KTtyW2NdKz00fWlmKGUrMTxuKXtjPWEraTtzJiYocltjLTFdKz0xNik7byYmKHJbYysxXSs9MTYpO3JbY10rPTR9cyYmKHJbYS0xXSs9MSk7byYmKHJbYSsxXSs9MSk7clthXXw9MTI4fXJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LHI9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxpPXRoaXMuY29lZmZpY2VudHNTaWduLG49dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2Uscz10aGlzLnByb2Nlc3NpbmdGbGFncyxvPXRoaXMuY29udGV4dHMsYz10aGlzLmNvbnRleHRMYWJlbFRhYmxlLGw9dGhpcy5iaXRzRGVjb2RlZDtmb3IobGV0IGg9MDtoPGE7aCs9NClmb3IobGV0IHU9MDt1PHQ7dSsrKXtsZXQgZD1oKnQrdTtmb3IobGV0IGY9MDtmPDQ7ZisrLGQrPXQpe2NvbnN0IHQ9aCtmO2lmKHQ+PWEpYnJlYWs7c1tkXSY9LTI7aWYocltkXXx8IW5bZF0pY29udGludWU7Y29uc3QgZz1jW25bZF1dO2lmKGUucmVhZEJpdChvLGcpKXtjb25zdCBlPXRoaXMuZGVjb2RlU2lnbkJpdCh0LHUsZCk7aVtkXT1lO3JbZF09MTt0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZSh0LHUsZCk7c1tkXXw9Mn1sW2RdKys7c1tkXXw9MX19fWRlY29kZVNpZ25CaXQoZSx0LGEpe2NvbnN0IHI9dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LG49dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxzPXRoaXMuY29lZmZpY2VudHNTaWduO2xldCBvLGMsbCxoLHUsZDtoPXQ+MCYmMCE9PW5bYS0xXTtpZih0KzE8ciYmMCE9PW5bYSsxXSl7bD1zW2ErMV07aWYoaCl7Yz1zW2EtMV07bz0xLWwtY31lbHNlIG89MS1sLWx9ZWxzZSBpZihoKXtjPXNbYS0xXTtvPTEtYy1jfWVsc2Ugbz0wO2NvbnN0IGY9MypvO2g9ZT4wJiYwIT09blthLXJdO2lmKGUrMTxpJiYwIT09blthK3JdKXtsPXNbYStyXTtpZihoKXtjPXNbYS1yXTtvPTEtbC1jK2Z9ZWxzZSBvPTEtbC1sK2Z9ZWxzZSBpZihoKXtjPXNbYS1yXTtvPTEtYy1jK2Z9ZWxzZSBvPWY7aWYobz49MCl7dT05K287ZD10aGlzLmRlY29kZXIucmVhZEJpdCh0aGlzLmNvbnRleHRzLHUpfWVsc2V7dT05LW87ZD0xXnRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsdSl9cmV0dXJuIGR9cnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKXtjb25zdCBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgsYT10aGlzLmhlaWdodCxyPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsaT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxuPXRoaXMuY29udGV4dHMscz10aGlzLmJpdHNEZWNvZGVkLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3MsYz10KmEsbD00KnQ7Zm9yKGxldCBhLGg9MDtoPGM7aD1hKXthPU1hdGgubWluKGMsaCtsKTtmb3IobGV0IGM9MDtjPHQ7YysrKWZvcihsZXQgbD1oK2M7bDxhO2wrPXQpe2lmKCFyW2xdfHwwIT0oMSZvW2xdKSljb250aW51ZTtsZXQgdD0xNjtpZigwIT0oMiZvW2xdKSl7b1tsXV49Mjt0PTA9PT0oMTI3JmlbbF0pPzE1OjE0fWNvbnN0IGE9ZS5yZWFkQml0KG4sdCk7cltsXT1yW2xdPDwxfGE7c1tsXSsrO29bbF18PTF9fX1ydW5DbGVhbnVwUGFzcygpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LHI9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLG49dGhpcy5jb2VmZmljZW50c1NpZ24scz10aGlzLmNvbnRleHRzLG89dGhpcy5jb250ZXh0TGFiZWxUYWJsZSxjPXRoaXMuYml0c0RlY29kZWQsbD10aGlzLnByb2Nlc3NpbmdGbGFncyxoPXQsdT0yKnQsZD0zKnQ7bGV0IGY7Zm9yKGxldCBnPTA7ZzxhO2c9Zil7Zj1NYXRoLm1pbihnKzQsYSk7Y29uc3QgcD1nKnQsbT1nKzM8YTtmb3IobGV0IGE9MDthPHQ7YSsrKXtjb25zdCBiPXArYTtsZXQgeSx3PTAsUz1iLHg9ZztpZihtJiYwPT09bFtiXSYmMD09PWxbYitoXSYmMD09PWxbYit1XSYmMD09PWxbYitkXSYmMD09PXJbYl0mJjA9PT1yW2IraF0mJjA9PT1yW2IrdV0mJjA9PT1yW2IrZF0pe2lmKCFlLnJlYWRCaXQocyxCaXRNb2RlbC5SVU5MRU5HVEhfQ09OVEVYVCkpe2NbYl0rKztjW2IraF0rKztjW2IrdV0rKztjW2IrZF0rKztjb250aW51ZX13PWUucmVhZEJpdChzLEJpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVCk8PDF8ZS5yZWFkQml0KHMsQml0TW9kZWwuVU5JRk9STV9DT05URVhUKTtpZigwIT09dyl7eD1nK3c7Uys9dyp0fXk9dGhpcy5kZWNvZGVTaWduQml0KHgsYSxTKTtuW1NdPXk7aVtTXT0xO3RoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHgsYSxTKTtsW1NdfD0yO1M9Yjtmb3IobGV0IGU9ZztlPD14O2UrKyxTKz10KWNbU10rKzt3Kyt9Zm9yKHg9Zyt3O3g8Zjt4KyssUys9dCl7aWYoaVtTXXx8MCE9KDEmbFtTXSkpY29udGludWU7Y29uc3QgdD1vW3JbU11dO2lmKDE9PT1lLnJlYWRCaXQocyx0KSl7eT10aGlzLmRlY29kZVNpZ25CaXQoeCxhLFMpO25bU109eTtpW1NdPTE7dGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoeCxhLFMpO2xbU118PTJ9Y1tTXSsrfX19fWNoZWNrU2VnbWVudGF0aW9uU3ltYm9sKCl7Y29uc3QgZT10aGlzLmRlY29kZXIsdD10aGlzLmNvbnRleHRzO2lmKDEwIT09KGUucmVhZEJpdCh0LEJpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVCk8PDN8ZS5yZWFkQml0KHQsQml0TW9kZWwuVU5JRk9STV9DT05URVhUKTw8MnxlLnJlYWRCaXQodCxCaXRNb2RlbC5VTklGT1JNX0NPTlRFWFQpPDwxfGUucmVhZEJpdCh0LEJpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVCkpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCBzZWdtZW50YXRpb24gc3ltYm9sIil9fWNsYXNzIFRyYW5zZm9ybXtjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1UcmFuc2Zvcm0mJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBUcmFuc2Zvcm0uIil9Y2FsY3VsYXRlKGUsdCxhKXtsZXQgcj1lWzBdO2ZvcihsZXQgaT0xLG49ZS5sZW5ndGg7aTxuO2krKylyPXRoaXMuaXRlcmF0ZShyLGVbaV0sdCxhKTtyZXR1cm4gcn1leHRlbmQoZSx0LGEpe2xldCByPXQtMSxpPXQrMSxuPXQrYS0yLHM9dCthO2Vbci0tXT1lW2krK107ZVtzKytdPWVbbi0tXTtlW3ItLV09ZVtpKytdO2VbcysrXT1lW24tLV07ZVtyLS1dPWVbaSsrXTtlW3MrK109ZVtuLS1dO2Vbcl09ZVtpXTtlW3NdPWVbbl19ZmlsdGVyKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBmaWx0ZXJgIGNhbGxlZCIpfWl0ZXJhdGUoZSx0LGEscil7Y29uc3QgaT1lLndpZHRoLG49ZS5oZWlnaHQ7bGV0IHM9ZS5pdGVtcztjb25zdCBvPXQud2lkdGgsYz10LmhlaWdodCxsPXQuaXRlbXM7bGV0IGgsdSxkLGYsZyxwO2ZvcihkPTAsaD0wO2g8bjtoKyspe2Y9MipoKm87Zm9yKHU9MDt1PGk7dSsrLGQrKyxmKz0yKWxbZl09c1tkXX1zPWUuaXRlbXM9bnVsbDtjb25zdCBtPW5ldyBGbG9hdDMyQXJyYXkobys4KTtpZigxPT09byl7aWYoMCE9KDEmYSkpZm9yKHA9MCxkPTA7cDxjO3ArKyxkKz1vKWxbZF0qPS41fWVsc2UgZm9yKHA9MCxkPTA7cDxjO3ArKyxkKz1vKXttLnNldChsLnN1YmFycmF5KGQsZCtvKSw0KTt0aGlzLmV4dGVuZChtLDQsbyk7dGhpcy5maWx0ZXIobSw0LG8pO2wuc2V0KG0uc3ViYXJyYXkoNCw0K28pLGQpfWxldCBiPTE2O2NvbnN0IHk9W107Zm9yKGg9MDtoPGI7aCsrKXkucHVzaChuZXcgRmxvYXQzMkFycmF5KGMrOCkpO2xldCB3LFM9MDtlPTQrYztpZigxPT09Yyl7aWYoMCE9KDEmcikpZm9yKGc9MDtnPG87ZysrKWxbZ10qPS41fWVsc2UgZm9yKGc9MDtnPG87ZysrKXtpZigwPT09Uyl7Yj1NYXRoLm1pbihvLWcsYik7Zm9yKGQ9ZyxmPTQ7ZjxlO2QrPW8sZisrKWZvcih3PTA7dzxiO3crKyl5W3ddW2ZdPWxbZCt3XTtTPWJ9Uy0tO2NvbnN0IHQ9eVtTXTt0aGlzLmV4dGVuZCh0LDQsYyk7dGhpcy5maWx0ZXIodCw0LGMpO2lmKDA9PT1TKXtkPWctYisxO2ZvcihmPTQ7ZjxlO2QrPW8sZisrKWZvcih3PTA7dzxiO3crKylsW2Qrd109eVt3XVtmXX19cmV0dXJue3dpZHRoOm8saGVpZ2h0OmMsaXRlbXM6bH19fWNsYXNzIElycmV2ZXJzaWJsZVRyYW5zZm9ybSBleHRlbmRzIFRyYW5zZm9ybXtmaWx0ZXIoZSx0LGEpe2NvbnN0IHI9YT4+MTtsZXQgaSxuLHMsbztjb25zdCBjPS0xLjU4NjEzNDM0MjA1OTkyNCxsPS0uMDUyOTgwMTE4NTcyOTYxLGg9Ljg4MjkxMTA3NTUzMDkzNCx1PS40NDM1MDY4NTIwNDM5NzEsZD0xLjIzMDE3NDEwNDkxNDAwMTtpPSh0fD0wKS0zO2ZvcihuPXIrNDtuLS07aSs9MillW2ldKj0uODEyODkzMDY2MTE1OTYwOTtpPXQtMjtzPXUqZVtpLTFdO2ZvcihuPXIrMztuLS07aSs9Mil7bz11KmVbaSsxXTtlW2ldPWQqZVtpXS1zLW87aWYoIW4tLSlicmVhaztpKz0yO3M9dSplW2krMV07ZVtpXT1kKmVbaV0tcy1vfWk9dC0xO3M9aCplW2ktMV07Zm9yKG49cisyO24tLTtpKz0yKXtvPWgqZVtpKzFdO2VbaV0tPXMrbztpZighbi0tKWJyZWFrO2krPTI7cz1oKmVbaSsxXTtlW2ldLT1zK299aT10O3M9bCplW2ktMV07Zm9yKG49cisxO24tLTtpKz0yKXtvPWwqZVtpKzFdO2VbaV0tPXMrbztpZighbi0tKWJyZWFrO2krPTI7cz1sKmVbaSsxXTtlW2ldLT1zK299aWYoMCE9PXIpe2k9dCsxO3M9YyplW2ktMV07Zm9yKG49cjtuLS07aSs9Mil7bz1jKmVbaSsxXTtlW2ldLT1zK287aWYoIW4tLSlicmVhaztpKz0yO3M9YyplW2krMV07ZVtpXS09cytvfX19fWNsYXNzIFJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm17ZmlsdGVyKGUsdCxhKXtjb25zdCByPWE+PjE7bGV0IGksbjtmb3IoaT10fD0wLG49cisxO24tLTtpKz0yKWVbaV0tPWVbaS0xXStlW2krMV0rMj4+Mjtmb3IoaT10KzEsbj1yO24tLTtpKz0yKWVbaV0rPWVbaS0xXStlW2krMV0+PjF9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxaV1N0cmVhbT12b2lkIDA7dmFyIHI9YSgxOCk7Y2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmNhY2hlZERhdGE9MDt0aGlzLmJpdHNDYWNoZWQ9MDtjb25zdCByPTQwOTYsaT17ZWFybHlDaGFuZ2U6YSxjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkociksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KHIpLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KHIpLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheShyKSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH07Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXtpLmRpY3Rpb25hcnlWYWx1ZXNbZV09ZTtpLmRpY3Rpb25hcnlMZW5ndGhzW2VdPTF9dGhpcy5sendTdGF0ZT1pfXJlYWRCaXRzKGUpe2xldCB0PXRoaXMuYml0c0NhY2hlZCxhPXRoaXMuY2FjaGVkRGF0YTtmb3IoO3Q8ZTspe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJuIG51bGx9YT1hPDw4fGU7dCs9OH10aGlzLmJpdHNDYWNoZWQ9dC09ZTt0aGlzLmNhY2hlZERhdGE9YTt0aGlzLmxhc3RDb2RlPW51bGw7cmV0dXJuIGE+Pj50JigxPDxlKS0xfXJlYWRCbG9jaygpe2xldCBlLHQsYSxyPTEwMjQ7Y29uc3QgaT10aGlzLmx6d1N0YXRlO2lmKCFpKXJldHVybjtjb25zdCBuPWkuZWFybHlDaGFuZ2U7bGV0IHM9aS5uZXh0Q29kZTtjb25zdCBvPWkuZGljdGlvbmFyeVZhbHVlcyxjPWkuZGljdGlvbmFyeUxlbmd0aHMsbD1pLmRpY3Rpb25hcnlQcmV2Q29kZXM7bGV0IGg9aS5jb2RlTGVuZ3RoLHU9aS5wcmV2Q29kZTtjb25zdCBkPWkuY3VycmVudFNlcXVlbmNlO2xldCBmPWkuY3VycmVudFNlcXVlbmNlTGVuZ3RoLGc9MCxwPXRoaXMuYnVmZmVyTGVuZ3RoLG09dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrcik7Zm9yKGU9MDtlPDUxMjtlKyspe2NvbnN0IGU9dGhpcy5yZWFkQml0cyhoKSxpPWY+MDtpZihlPDI1Nil7ZFswXT1lO2Y9MX1lbHNle2lmKCEoZT49MjU4KSl7aWYoMjU2PT09ZSl7aD05O3M9MjU4O2Y9MDtjb250aW51ZX10aGlzLmVvZj0hMDtkZWxldGUgdGhpcy5sendTdGF0ZTticmVha31pZihlPHMpe2Y9Y1tlXTtmb3IodD1mLTEsYT1lO3Q+PTA7dC0tKXtkW3RdPW9bYV07YT1sW2FdfX1lbHNlIGRbZisrXT1kWzBdfWlmKGkpe2xbc109dTtjW3NdPWNbdV0rMTtvW3NdPWRbMF07cysrO2g9cytuJnMrbi0xP2g6MHxNYXRoLm1pbihNYXRoLmxvZyhzK24pLy42OTMxNDcxODA1NTk5NDUzKzEsMTIpfXU9ZTtnKz1mO2lmKHI8Zyl7ZG97cis9NTEyfXdoaWxlKHI8Zyk7bT10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtyKX1mb3IodD0wO3Q8Zjt0KyspbVtwKytdPWRbdF19aS5uZXh0Q29kZT1zO2kuY29kZUxlbmd0aD1oO2kucHJldkNvZGU9dTtpLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aD1mO3RoaXMuYnVmZmVyTGVuZ3RoPXB9fXQuTFpXU3RyZWFtPUxaV1N0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIHI9YSgxOCksaT1hKDQpLG49YSgyKTtjbGFzcyBQcmVkaWN0b3JTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7aWYoIShhIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gZTtjb25zdCByPXRoaXMucHJlZGljdG9yPWEuZ2V0KCJQcmVkaWN0b3IiKXx8MTtpZihyPD0xKXJldHVybiBlO2lmKDIhPT1yJiYocjwxMHx8cj4xNSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtyfWApO3RoaXMucmVhZEJsb2NrPTI9PT1yP3RoaXMucmVhZEJsb2NrVGlmZjp0aGlzLnJlYWRCbG9ja1BuZzt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7Y29uc3Qgcz10aGlzLmNvbG9ycz1hLmdldCgiQ29sb3JzIil8fDEsbz10aGlzLmJpdHM9YS5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxjPXRoaXMuY29sdW1ucz1hLmdldCgiQ29sdW1ucyIpfHwxO3RoaXMucGl4Qnl0ZXM9cypvKzc+PjM7dGhpcy5yb3dCeXRlcz1jKnMqbys3Pj4zO3JldHVybiB0aGlzfXJlYWRCbG9ja1RpZmYoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLmJ1ZmZlckxlbmd0aCxhPXRoaXMuZW5zdXJlQnVmZmVyKHQrZSkscj10aGlzLmJpdHMsaT10aGlzLmNvbG9ycyxuPXRoaXMuc3RyLmdldEJ5dGVzKGUpO3RoaXMuZW9mPSFuLmxlbmd0aDtpZih0aGlzLmVvZilyZXR1cm47bGV0IHMsbz0wLGM9MCxsPTAsaD0wLHU9dDtpZigxPT09ciYmMT09PWkpZm9yKHM9MDtzPGU7KytzKXtsZXQgZT1uW3NdXm87ZV49ZT4+MTtlXj1lPj4yO2VePWU+PjQ7bz0oMSZlKTw8NzthW3UrK109ZX1lbHNlIGlmKDg9PT1yKXtmb3Iocz0wO3M8aTsrK3MpYVt1KytdPW5bc107Zm9yKDtzPGU7KytzKXthW3VdPWFbdS1pXStuW3NdO3UrK319ZWxzZSBpZigxNj09PXIpe2NvbnN0IHQ9MippO2ZvcihzPTA7czx0OysrcylhW3UrK109bltzXTtmb3IoO3M8ZTtzKz0yKXtjb25zdCBlPSgoMjU1Jm5bc10pPDw4KSsoMjU1Jm5bcysxXSkrKCgyNTUmYVt1LXRdKTw8OCkrKDI1NSZhW3UtdCsxXSk7YVt1KytdPWU+PjgmMjU1O2FbdSsrXT0yNTUmZX19ZWxzZXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGkrMSksdT0oMTw8ciktMTtsZXQgZD0wLGY9dDtjb25zdCBnPXRoaXMuY29sdW1ucztmb3Iocz0wO3M8ZzsrK3MpZm9yKGxldCB0PTA7dDxpOysrdCl7aWYobDxyKXtvPW88PDh8MjU1Jm5bZCsrXTtsKz04fWVbdF09ZVt0XSsobz4+bC1yKSZ1O2wtPXI7Yz1jPDxyfGVbdF07aCs9cjtpZihoPj04KXthW2YrK109Yz4+aC04JjI1NTtoLT04fX1oPjAmJihhW2YrK109KGM8PDgtaCkrKG8mKDE8PDgtaCktMSkpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfXJlYWRCbG9ja1BuZygpe2NvbnN0IGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMucGl4Qnl0ZXMsYT10aGlzLnN0ci5nZXRCeXRlKCkscj10aGlzLnN0ci5nZXRCeXRlcyhlKTt0aGlzLmVvZj0hci5sZW5ndGg7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IGk9dGhpcy5idWZmZXJMZW5ndGgscz10aGlzLmVuc3VyZUJ1ZmZlcihpK2UpO2xldCBvPXMuc3ViYXJyYXkoaS1lLGkpOzA9PT1vLmxlbmd0aCYmKG89bmV3IFVpbnQ4QXJyYXkoZSkpO2xldCBjLGwsaCx1PWk7c3dpdGNoKGEpe2Nhc2UgMDpmb3IoYz0wO2M8ZTsrK2Mpc1t1KytdPXJbY107YnJlYWs7Y2FzZSAxOmZvcihjPTA7Yzx0OysrYylzW3UrK109cltjXTtmb3IoO2M8ZTsrK2Mpe3NbdV09c1t1LXRdK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDI6Zm9yKGM9MDtjPGU7KytjKXNbdSsrXT1vW2NdK3JbY10mMjU1O2JyZWFrO2Nhc2UgMzpmb3IoYz0wO2M8dDsrK2Mpc1t1KytdPShvW2NdPj4xKStyW2NdO2Zvcig7YzxlOysrYyl7c1t1XT0ob1tjXStzW3UtdF0+PjEpK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXtsPW9bY107aD1yW2NdO3NbdSsrXT1sK2h9Zm9yKDtjPGU7KytjKXtsPW9bY107Y29uc3QgZT1vW2MtdF0sYT1zW3UtdF0saT1hK2wtZTtsZXQgbj1pLWE7bjwwJiYobj0tbik7bGV0IGQ9aS1sO2Q8MCYmKGQ9LWQpO2xldCBmPWktZTtmPDAmJihmPS1mKTtoPXJbY107c1t1KytdPW48PWQmJm48PWY/YStoOmQ8PWY/bCtoOmUraH1icmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7YX1gKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX19dC5QcmVkaWN0b3JTdHJlYW09UHJlZGljdG9yU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUnVuTGVuZ3RoU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KTtjbGFzcyBSdW5MZW5ndGhTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdH1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKDIpO2lmKCFlfHxlLmxlbmd0aDwyfHwxMjg9PT1lWzBdKXt0aGlzLmVvZj0hMDtyZXR1cm59bGV0IHQsYT10aGlzLmJ1ZmZlckxlbmd0aCxyPWVbMF07aWYocjwxMjgpe3Q9dGhpcy5lbnN1cmVCdWZmZXIoYStyKzEpO3RbYSsrXT1lWzFdO2lmKHI+MCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcyhyKTt0LnNldChlLGEpO2ErPXJ9fWVsc2V7cj0yNTctcjtjb25zdCBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihhK3IrMSk7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0W2ErK109aX10aGlzLmJ1ZmZlckxlbmd0aD1hfX10LlJ1bkxlbmd0aFN0cmVhbT1SdW5MZW5ndGhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Gb250PXQuRXJyb3JGb250PXZvaWQgMDt2YXIgcj1hKDIpLGk9YSgzNSksbj1hKDM4KSxzPWEoNDApLG89YSgzOSksYz1hKDM3KSxsPWEoNDEpLGg9YSg0MiksdT1hKDQzKSxkPWEoNDQpLGY9YSg0NSksZz1hKDQ2KSxwPWEoMTQpLG09YSg0NyksYj1hKDMpLHk9YSg4KSx3PWEoNDgpO2NvbnN0IFM9W1s1NzM0NCw2Mzc0M10sWzEwNDg1NzYsMTExNDEwOV1dLHg9MWUzLEM9WyJhc2NlbnQiLCJiYm94IiwiYmxhY2siLCJib2xkIiwiY2hhclByb2NPcGVyYXRvckxpc3QiLCJjb21wb3NpdGUiLCJjc3NGb250SW5mbyIsImRhdGEiLCJkZWZhdWx0Vk1ldHJpY3MiLCJkZWZhdWx0V2lkdGgiLCJkZXNjZW50IiwiZmFsbGJhY2tOYW1lIiwiZm9udE1hdHJpeCIsImlzSW52YWxpZFBERmpzRm9udCIsImlzVHlwZTNGb250IiwiaXRhbGljIiwibG9hZGVkTmFtZSIsIm1pbWV0eXBlIiwibWlzc2luZ0ZpbGUiLCJuYW1lIiwicmVtZWFzdXJlIiwic3VidHlwZSIsInN5c3RlbUZvbnRJbmZvIiwidHlwZSIsInZlcnRpY2FsIl0saz1bImNNYXAiLCJkZWZhdWx0RW5jb2RpbmciLCJkaWZmZXJlbmNlcyIsImlzTW9ub3NwYWNlIiwiaXNTZXJpZkZvbnQiLCJpc1N5bWJvbGljRm9udCIsInNlYWNNYXAiLCJ0b0ZvbnRDaGFyIiwidG9Vbmljb2RlIiwidm1ldHJpY3MiLCJ3aWR0aHMiXTtmdW5jdGlvbiBhZGp1c3RXaWR0aHMoZSl7aWYoIWUuZm9udE1hdHJpeClyZXR1cm47aWYoZS5mb250TWF0cml4WzBdPT09ci5GT05UX0lERU5USVRZX01BVFJJWFswXSlyZXR1cm47Y29uc3QgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxhPWUud2lkdGhzO2Zvcihjb25zdCBlIGluIGEpYVtlXSo9dDtlLmRlZmF1bHRXaWR0aCo9dH1mdW5jdGlvbiBhbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGUpe2lmKCFlLmZhbGxiYWNrVG9Vbmljb2RlKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMoYSl8fCh0W2FdPWUuZmFsbGJhY2tUb1VuaWNvZGVbYV0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfWNsYXNzIEdseXBoe2NvbnN0cnVjdG9yKGUsdCxhLHIsaSxuLHMsbyxjKXt0aGlzLm9yaWdpbmFsQ2hhckNvZGU9ZTt0aGlzLmZvbnRDaGFyPXQ7dGhpcy51bmljb2RlPWE7dGhpcy5hY2NlbnQ9cjt0aGlzLndpZHRoPWk7dGhpcy52bWV0cmljPW47dGhpcy5vcGVyYXRvckxpc3RJZD1zO3RoaXMuaXNTcGFjZT1vO3RoaXMuaXNJbkZvbnQ9Y31nZXQgY2F0ZWdvcnkoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY2F0ZWdvcnkiLCgwLHMuZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeSkodGhpcy51bmljb2RlKSwhMCl9fWZ1bmN0aW9uIGludDE2KGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gd3JpdGVTaWduZWRJbnQxNihlLHQsYSl7ZVt0KzFdPWE7ZVt0XT1hPj4+OH1mdW5jdGlvbiBzaWduZWRJbnQxNihlLHQpe2NvbnN0IGE9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JmE/YS02NTUzNjphfWZ1bmN0aW9uIHN0cmluZzE2KGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBzYWZlU3RyaW5nMTYoZSl7ZT4zMjc2Nz9lPTMyNzY3OmU8LTMyNzY4JiYoZT0tMzI3NjgpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4idHRjZiI9PT0oMCxyLmJ5dGVzVG9TdHJpbmcpKHQpfWZ1bmN0aW9uIGdldEZvbnRGaWxlVHlwZShlLHt0eXBlOnQsc3VidHlwZTphLGNvbXBvc2l0ZTppfSl7bGV0IG4scztpZihmdW5jdGlvbiBpc1RydWVUeXBlRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLGIucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsci5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShlKSluPWk/IkNJREZvbnRUeXBlMiI6IlRydWVUeXBlIjtlbHNlIGlmKGZ1bmN0aW9uIGlzT3BlblR5cGVGaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsci5ieXRlc1RvU3RyaW5nKSh0KX0oZSkpbj1pPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI7ZWxzZSBpZihmdW5jdGlvbiBpc1R5cGUxRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDIpO3JldHVybiAzNz09PXRbMF0mJjMzPT09dFsxXXx8MTI4PT09dFswXSYmMT09PXRbMV19KGUpKW49aT8iQ0lERm9udFR5cGUwIjoiTU1UeXBlMSI9PT10PyJNTVR5cGUxIjoiVHlwZTEiO2Vsc2UgaWYoZnVuY3Rpb24gaXNDRkZGaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpKWlmKGkpe249IkNJREZvbnRUeXBlMCI7cz0iQ0lERm9udFR5cGUwQyJ9ZWxzZXtuPSJNTVR5cGUxIj09PXQ/Ik1NVHlwZTEiOiJUeXBlMSI7cz0iVHlwZTFDIn1lbHNleygwLHIud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIik7bj10O3M9YX1yZXR1cm5bbixzXX1mdW5jdGlvbiBhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGUsdCl7Zm9yKGNvbnN0IGEgaW4gdCllWythXT10W2FdfWZ1bmN0aW9uIGJ1aWxkVG9Gb250Q2hhcihlLHQsYSl7Y29uc3Qgcj1bXTtsZXQgaTtmb3IobGV0IGE9MCxuPWUubGVuZ3RoO2E8bjthKyspe2k9KDAscy5nZXRVbmljb2RlRm9yR2x5cGgpKGVbYV0sdCk7LTEhPT1pJiYoclthXT1pKX1mb3IoY29uc3QgZSBpbiBhKXtpPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShhW2VdLHQpOy0xIT09aSYmKHJbK2VdPWkpfXJldHVybiByfWZ1bmN0aW9uIGlzTWFjTmFtZVJlY29yZChlKXtyZXR1cm4gMT09PWUucGxhdGZvcm0mJjA9PT1lLmVuY29kaW5nJiYwPT09ZS5sYW5ndWFnZX1mdW5jdGlvbiBpc1dpbk5hbWVSZWNvcmQoZSl7cmV0dXJuIDM9PT1lLnBsYXRmb3JtJiYxPT09ZS5lbmNvZGluZyYmMTAzMz09PWUubGFuZ3VhZ2V9ZnVuY3Rpb24gY29udmVydENpZFN0cmluZyhlLHQsYT0hMSl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIHQuY2hhckNvZGVBdCgwKTtjYXNlIDI6cmV0dXJuIHQuY2hhckNvZGVBdCgwKTw8OHx0LmNoYXJDb2RlQXQoMSl9Y29uc3QgaT1gVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgJHtlfSk6ICIke3R9Ii5gO2lmKGEpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoaSk7KDAsci53YXJuKShpKTtyZXR1cm4gdH1mdW5jdGlvbiBhZGp1c3RNYXBwaW5nKGUsdCxhLGkpe2NvbnN0IG49T2JqZWN0LmNyZWF0ZShudWxsKSxzPW5ldyBNYXAsbz1bXSxjPW5ldyBTZXQ7bGV0IGw9MDtsZXQgaD1TW2xdWzBdLHU9U1tsXVsxXTtmb3IobGV0IGYgaW4gZSl7Znw9MDtsZXQgZz1lW2ZdO2lmKCF0KGcpKWNvbnRpbnVlO2lmKGg+dSl7bCsrO2lmKGw+PVMubGVuZ3RoKXsoMCxyLndhcm4pKCJSYW4gb3V0IG9mIHNwYWNlIGluIGZvbnQgcHJpdmF0ZSB1c2UgYXJlYS4iKTticmVha31oPVNbbF1bMF07dT1TW2xdWzFdfWNvbnN0IHA9aCsrOzA9PT1nJiYoZz1hKTtsZXQgbT1pLmdldChmKTsic3RyaW5nIj09dHlwZW9mIG0mJihtPW0uY29kZVBvaW50QXQoMCkpO2lmKG0mJiEoZD1tLFNbMF1bMF08PWQmJmQ8PVNbMF1bMV18fFNbMV1bMF08PWQmJmQ8PVNbMV1bMV0pJiYhYy5oYXMoZykpe3Muc2V0KG0sZyk7Yy5hZGQoZyl9bltwXT1nO29bZl09cH12YXIgZDtyZXR1cm57dG9Gb250Q2hhcjpvLGNoYXJDb2RlVG9HbHlwaElkOm4sdG9Vbmljb2RlRXh0cmFNYXA6cyxuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlOmh9fWZ1bmN0aW9uIGNyZWF0ZUNtYXBUYWJsZShlLHQsYSl7Y29uc3QgaT1mdW5jdGlvbiBnZXRSYW5nZXMoZSx0LGEpe2NvbnN0IHI9W107Zm9yKGNvbnN0IHQgaW4gZSllW3RdPj1hfHxyLnB1c2goe2ZvbnRDaGFyQ29kZTowfHQsZ2x5cGhJZDplW3RdfSk7aWYodClmb3IoY29uc3RbZSxpXW9mIHQpaT49YXx8ci5wdXNoKHtmb250Q2hhckNvZGU6ZSxnbHlwaElkOml9KTswPT09ci5sZW5ndGgmJnIucHVzaCh7Zm9udENoYXJDb2RlOjAsZ2x5cGhJZDowfSk7ci5zb3J0KChmdW5jdGlvbiBmb250R2V0UmFuZ2VzU29ydChlLHQpe3JldHVybiBlLmZvbnRDaGFyQ29kZS10LmZvbnRDaGFyQ29kZX0pKTtjb25zdCBpPVtdLG49ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxuOyl7Y29uc3QgdD1yW2VdLmZvbnRDaGFyQ29kZSxhPVtyW2VdLmdseXBoSWRdOysrZTtsZXQgcz10O2Zvcig7ZTxuJiZzKzE9PT1yW2VdLmZvbnRDaGFyQ29kZTspe2EucHVzaChyW2VdLmdseXBoSWQpOysrczsrK2U7aWYoNjU1MzU9PT1zKWJyZWFrfWkucHVzaChbdCxzLGFdKX1yZXR1cm4gaX0oZSx0LGEpLG49aS5hdCgtMSlbMV0+NjU1MzU/MjoxO2xldCBzLG8sYyxsLGg9IlwwXDAiK3N0cmluZzE2KG4pKyJcMANcMAEiKygwLHIuc3RyaW5nMzIpKDQrOCpuKTtmb3Iocz1pLmxlbmd0aC0xO3M+PTAmJiEoaVtzXVswXTw9NjU1MzUpOy0tcyk7Y29uc3QgdT1zKzE7aVtzXVswXTw2NTUzNSYmNjU1MzU9PT1pW3NdWzFdJiYoaVtzXVsxXT02NTUzNCk7Y29uc3QgZD1pW3NdWzFdPDY1NTM1PzE6MCxmPXUrZCxnPW0uT3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMoZiwyKTtsZXQgcCxiLHksdyxTPSIiLHg9IiIsQz0iIixrPSIiLHY9IiIsRj0wO2ZvcihzPTAsbz11O3M8bztzKyspe3A9aVtzXTtiPXBbMF07eT1wWzFdO1MrPXN0cmluZzE2KGIpO3grPXN0cmluZzE2KHkpO3c9cFsyXTtsZXQgZT0hMDtmb3IoYz0xLGw9dy5sZW5ndGg7YzxsOysrYylpZih3W2NdIT09d1tjLTFdKzEpe2U9ITE7YnJlYWt9aWYoZSl7Qys9c3RyaW5nMTYod1swXS1iJjY1NTM1KTtrKz1zdHJpbmcxNigwKX1lbHNle2NvbnN0IGU9MiooZi1zKSsyKkY7Ris9eS1iKzE7Qys9c3RyaW5nMTYoMCk7ays9c3RyaW5nMTYoZSk7Zm9yKGM9MCxsPXcubGVuZ3RoO2M8bDsrK2Mpdis9c3RyaW5nMTYod1tjXSl9fWlmKGQ+MCl7eCs9IsO/w78iO1MrPSLDv8O/IjtDKz0iXDABIjtrKz0iXDBcMCJ9Y29uc3QgTz0iXDBcMCIrc3RyaW5nMTYoMipmKStzdHJpbmcxNihnLnJhbmdlKStzdHJpbmcxNihnLmVudHJ5KStzdHJpbmcxNihnLnJhbmdlU2hpZnQpK3grIlwwXDAiK1MrQytrK3Y7bGV0IFQ9IiIsTT0iIjtpZihuPjEpe2grPSJcMANcMFxuIisoMCxyLnN0cmluZzMyKSg0Kzgqbis0K08ubGVuZ3RoKTtUPSIiO2ZvcihzPTAsbz1pLmxlbmd0aDtzPG87cysrKXtwPWlbc107Yj1wWzBdO3c9cFsyXTtsZXQgZT13WzBdO2ZvcihjPTEsbD13Lmxlbmd0aDtjPGw7KytjKWlmKHdbY10hPT13W2MtMV0rMSl7eT1wWzBdK2MtMTtUKz0oMCxyLnN0cmluZzMyKShiKSsoMCxyLnN0cmluZzMyKSh5KSsoMCxyLnN0cmluZzMyKShlKTtiPXkrMTtlPXdbY119VCs9KDAsci5zdHJpbmczMikoYikrKDAsci5zdHJpbmczMikocFsxXSkrKDAsci5zdHJpbmczMikoZSl9TT0iXDBcZlwwXDAiKygwLHIuc3RyaW5nMzIpKFQubGVuZ3RoKzE2KSsiXDBcMFwwXDAiKygwLHIuc3RyaW5nMzIpKFQubGVuZ3RoLzEyKX1yZXR1cm4gaCsiXDAEIitzdHJpbmcxNihPLmxlbmd0aCs0KStPK00rVH1mdW5jdGlvbiBjcmVhdGVPUzJUYWJsZShlLHQsYSl7YXx8PXt1bml0c1BlckVtOjAseU1heDowLHlNaW46MCxhc2NlbnQ6MCxkZXNjZW50OjB9O2xldCBpPTAsbj0wLG89MCxjPTAsbD1udWxsLGg9MCx1PS0xO2lmKHQpe2ZvcihsZXQgZSBpbiB0KXtlfD0wOyhsPmV8fCFsKSYmKGw9ZSk7aDxlJiYoaD1lKTt1PSgwLHMuZ2V0VW5pY29kZVJhbmdlRm9yKShlLHUpO2lmKHU8MzIpaXw9MTw8dTtlbHNlIGlmKHU8NjQpbnw9MTw8dS0zMjtlbHNlIGlmKHU8OTYpb3w9MTw8dS02NDtlbHNle2lmKCEodTwxMjMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UiKTtjfD0xPDx1LTk2fX1oPjY1NTM1JiYoaD02NTUzNSl9ZWxzZXtsPTA7aD0yNTV9Y29uc3QgZD1lLmJib3h8fFswLDAsMCwwXSxmPWEudW5pdHNQZXJFbXx8MS8oZS5mb250TWF0cml4fHxyLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSxnPWUuYXNjZW50U2NhbGVkPzE6Zi94LHA9YS5hc2NlbnR8fE1hdGgucm91bmQoZyooZS5hc2NlbnR8fGRbM10pKTtsZXQgbT1hLmRlc2NlbnR8fE1hdGgucm91bmQoZyooZS5kZXNjZW50fHxkWzFdKSk7bT4wJiZlLmRlc2NlbnQ+MCYmZFsxXTwwJiYobT0tbSk7Y29uc3QgYj1hLnlNYXh8fHAseT0tYS55TWlufHwtbTtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxyLnN0cmluZzMyKShpKSsoMCxyLnN0cmluZzMyKShuKSsoMCxyLnN0cmluZzMyKShvKSsoMCxyLnN0cmluZzMyKShjKSsiKjIxKiIrc3RyaW5nMTYoZS5pdGFsaWNBbmdsZT8xOjApK3N0cmluZzE2KGx8fGUuZmlyc3RDaGFyKStzdHJpbmcxNihofHxlLmxhc3RDaGFyKStzdHJpbmcxNihwKStzdHJpbmcxNihtKSsiXDBkIitzdHJpbmcxNihiKStzdHJpbmcxNih5KSsiXDBcMFwwXDBcMFwwXDBcMCIrc3RyaW5nMTYoZS54SGVpZ2h0KStzdHJpbmcxNihlLmNhcEhlaWdodCkrc3RyaW5nMTYoMCkrc3RyaW5nMTYobHx8ZS5maXJzdENoYXIpKyJcMAMifWZ1bmN0aW9uIGNyZWF0ZVBvc3RUYWJsZShlKXtjb25zdCB0PU1hdGguZmxvb3IoNjU1MzYqZS5pdGFsaWNBbmdsZSk7cmV0dXJuIlwwA1wwXDAiKygwLHIuc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsci5zdHJpbmczMikoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBjcmVhdGVQb3N0c2NyaXB0TmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC9bXlx4MjEtXHg3RV18W1tcXSgpe308Pi8lXS9nLCIiKS5zbGljZSgwLDYzKX1mdW5jdGlvbiBjcmVhdGVOYW1lVGFibGUoZSx0KXt0fHwodD1bW10sW11dKTtjb25zdCBhPVt0WzBdWzBdfHwiT3JpZ2luYWwgbGljZW5jZSIsdFswXVsxXXx8ZSx0WzBdWzJdfHwiVW5rbm93biIsdFswXVszXXx8InVuaXF1ZUlEIix0WzBdWzRdfHxlLHRbMF1bNV18fCJWZXJzaW9uIDAuMTEiLHRbMF1bNl18fGNyZWF0ZVBvc3RzY3JpcHROYW1lKGUpLHRbMF1bN118fCJVbmtub3duIix0WzBdWzhdfHwiVW5rbm93biIsdFswXVs5XXx8IlVua25vd24iXSxyPVtdO2xldCBpLG4scyxvLGM7Zm9yKGk9MCxuPWEubGVuZ3RoO2k8bjtpKyspe2M9dFsxXVtpXXx8YVtpXTtjb25zdCBlPVtdO2ZvcihzPTAsbz1jLmxlbmd0aDtzPG87cysrKWUucHVzaChzdHJpbmcxNihjLmNoYXJDb2RlQXQocykpKTtyLnB1c2goZS5qb2luKCIiKSl9Y29uc3QgbD1bYSxyXSxoPVsiXDABIiwiXDADIl0sdT1bIlwwXDAiLCJcMAEiXSxkPVsiXDBcMCIsIgRcdCJdLGY9YS5sZW5ndGgqaC5sZW5ndGg7bGV0IGc9IlwwXDAiK3N0cmluZzE2KGYpK3N0cmluZzE2KDEyKmYrNikscD0wO2ZvcihpPTAsbj1oLmxlbmd0aDtpPG47aSsrKXtjb25zdCBlPWxbaV07Zm9yKHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2M9ZVtzXTtnKz1oW2ldK3VbaV0rZFtpXStzdHJpbmcxNihzKStzdHJpbmcxNihjLmxlbmd0aCkrc3RyaW5nMTYocCk7cCs9Yy5sZW5ndGh9fWcrPWEuam9pbigiIikrci5qb2luKCIiKTtyZXR1cm4gZ310LkZvbnQ9Y2xhc3MgRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5uYW1lPWU7dGhpcy5wc05hbWU9bnVsbDt0aGlzLm1pbWV0eXBlPW51bGw7dGhpcy5kaXNhYmxlRm9udEZhY2U9ITE7dGhpcy5sb2FkZWROYW1lPWEubG9hZGVkTmFtZTt0aGlzLmlzVHlwZTNGb250PWEuaXNUeXBlM0ZvbnQ7dGhpcy5taXNzaW5nRmlsZT0hMTt0aGlzLmNzc0ZvbnRJbmZvPWEuY3NzRm9udEluZm87dGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgaT0hIShhLmZsYWdzJm4uRm9udEZsYWdzLlNlcmlmKTtpZighaSYmIWEuaXNTaW11bGF0ZWRGbGFncyl7Y29uc3QgdD1lLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpLnNwbGl0KCItIilbMF0sYT0oMCxsLmdldFNlcmlmRm9udHMpKCk7Zm9yKGNvbnN0IGUgb2YgdC5zcGxpdCgiKyIpKWlmKGFbZV0pe2k9ITA7YnJlYWt9fXRoaXMuaXNTZXJpZkZvbnQ9aTt0aGlzLmlzU3ltYm9saWNGb250PSEhKGEuZmxhZ3Mmbi5Gb250RmxhZ3MuU3ltYm9saWMpO3RoaXMuaXNNb25vc3BhY2U9ISEoYS5mbGFncyZuLkZvbnRGbGFncy5GaXhlZFBpdGNoKTtsZXR7dHlwZTpzLHN1YnR5cGU6b309YTt0aGlzLnR5cGU9czt0aGlzLnN1YnR5cGU9bzt0aGlzLnN5c3RlbUZvbnRJbmZvPWEuc3lzdGVtRm9udEluZm87Y29uc3QgYz1lLm1hdGNoKC9eSW52YWxpZFBERmpzRm9udF8oLiopX1xkKyQvKTt0aGlzLmlzSW52YWxpZFBERmpzRm9udD0hIWM7dGhpcy5pc0ludmFsaWRQREZqc0ZvbnQ/dGhpcy5mYWxsYmFja05hbWU9Y1sxXTp0aGlzLmlzTW9ub3NwYWNlP3RoaXMuZmFsbGJhY2tOYW1lPSJtb25vc3BhY2UiOnRoaXMuaXNTZXJpZkZvbnQ/dGhpcy5mYWxsYmFja05hbWU9InNlcmlmIjp0aGlzLmZhbGxiYWNrTmFtZT0ic2Fucy1zZXJpZiI7aWYodGhpcy5zeXN0ZW1Gb250SW5mbz8uZ3Vlc3NGYWxsYmFjayl7dGhpcy5zeXN0ZW1Gb250SW5mby5ndWVzc0ZhbGxiYWNrPSExO3RoaXMuc3lzdGVtRm9udEluZm8uY3NzKz1gLCR7dGhpcy5mYWxsYmFja05hbWV9YH10aGlzLmRpZmZlcmVuY2VzPWEuZGlmZmVyZW5jZXM7dGhpcy53aWR0aHM9YS53aWR0aHM7dGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGg7dGhpcy5jb21wb3NpdGU9YS5jb21wb3NpdGU7dGhpcy5jTWFwPWEuY01hcDt0aGlzLmNhcEhlaWdodD1hLmNhcEhlaWdodC94O3RoaXMuYXNjZW50PWEuYXNjZW50L3g7dGhpcy5kZXNjZW50PWEuZGVzY2VudC94O3RoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQ7dGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeDt0aGlzLmJib3g9YS5iYm94O3RoaXMuZGVmYXVsdEVuY29kaW5nPWEuZGVmYXVsdEVuY29kaW5nO3RoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlO3RoaXMudG9Gb250Q2hhcj1bXTtpZigiVHlwZTMiPT09YS50eXBlKXtmb3IobGV0IGU9MDtlPDI1NjtlKyspdGhpcy50b0ZvbnRDaGFyW2VdPXRoaXMuZGlmZmVyZW5jZXNbZV18fGEuZGVmYXVsdEVuY29kaW5nW2VdO3JldHVybn10aGlzLmNpZEVuY29kaW5nPWEuY2lkRW5jb2Rpbmd8fCIiO3RoaXMudmVydGljYWw9ISFhLnZlcnRpY2FsO2lmKHRoaXMudmVydGljYWwpe3RoaXMudm1ldHJpY3M9YS52bWV0cmljczt0aGlzLmRlZmF1bHRWTWV0cmljcz1hLmRlZmF1bHRWTWV0cmljc31pZighdHx8dC5pc0VtcHR5KXt0JiYoMCxyLndhcm4pKCdGb250IGZpbGUgaXMgZW1wdHkgaW4gIicrZSsnIiAoJyt0aGlzLmxvYWRlZE5hbWUrIikiKTt0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KGEpO3JldHVybn1bcyxvXT1nZXRGb250RmlsZVR5cGUodCxhKTtzPT09dGhpcy50eXBlJiZvPT09dGhpcy5zdWJ0eXBlfHwoMCxyLmluZm8pKGBJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICR7dGhpcy50eXBlfS8ke3RoaXMuc3VidHlwZX0gYnV0IGZvdW5kOiAke3N9LyR7b30uYCk7bGV0IGg7dHJ5e3N3aXRjaChzKXtjYXNlIk1NVHlwZTEiOigwLHIuaW5mbykoIk1NVHlwZTEgZm9udCAoIitlKyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO2NvbnN0IGk9IlR5cGUxQyI9PT1vfHwiQ0lERm9udFR5cGUwQyI9PT1vP25ldyB1LkNGRkZvbnQodCxhKTpuZXcgdy5UeXBlMUZvbnQoZSx0LGEpO2FkanVzdFdpZHRocyhhKTtoPXRoaXMuY29udmVydChlLGksYSk7YnJlYWs7Y2FzZSJPcGVuVHlwZSI6Y2FzZSJUcnVlVHlwZSI6Y2FzZSJDSURGb250VHlwZTIiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO2g9dGhpcy5jaGVja0FuZFJlcGFpcihlLHQsYSk7aWYodGhpcy5pc09wZW5UeXBlKXthZGp1c3RXaWR0aHMoYSk7cz0iT3BlblR5cGUifWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEZvbnQgJHtzfSBpcyBub3Qgc3VwcG9ydGVkYCl9fWNhdGNoKGUpeygwLHIud2FybikoZSk7dGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChhKTtyZXR1cm59YW1lbmRGYWxsYmFja1RvVW5pY29kZShhKTt0aGlzLmRhdGE9aDt0aGlzLnR5cGU9czt0aGlzLnN1YnR5cGU9bzt0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4O3RoaXMud2lkdGhzPWEud2lkdGhzO3RoaXMuZGVmYXVsdFdpZHRoPWEuZGVmYXVsdFdpZHRoO3RoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlO3RoaXMuc2VhY01hcD1hLnNlYWNNYXB9Z2V0IHJlbmRlcmVyKCl7Y29uc3QgZT1kLkZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsbi5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJyZW5kZXJlciIsZSl9ZXhwb3J0RGF0YShlPSExKXtjb25zdCB0PWU/Wy4uLkMsLi4ua106QyxhPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHIsaTtmb3IociBvZiB0KXtpPXRoaXNbcl07dm9pZCAwIT09aSYmKGFbcl09aSl9cmV0dXJuIGF9ZmFsbGJhY2tUb1N5c3RlbUZvbnQoZSl7dGhpcy5taXNzaW5nRmlsZT0hMDtjb25zdHtuYW1lOnQsdHlwZTphfT10aGlzO2xldCByPSgwLG4ubm9ybWFsaXplRm9udE5hbWUpKHQpO2NvbnN0IGk9KDAsbC5nZXRTdGRGb250TWFwKSgpLHU9KDAsbC5nZXROb25TdGRGb250TWFwKSgpLGQ9ISFpW3JdLGc9ISghdVtyXXx8IWlbdVtyXV0pO3I9aVtyXXx8dVtyXXx8cjtjb25zdCBwPSgwLGYuZ2V0Rm9udEJhc2ljTWV0cmljcykoKVtyXTtpZihwKXtpc05hTih0aGlzLmFzY2VudCkmJih0aGlzLmFzY2VudD1wLmFzY2VudC94KTtpc05hTih0aGlzLmRlc2NlbnQpJiYodGhpcy5kZXNjZW50PXAuZGVzY2VudC94KTtpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1wLmNhcEhlaWdodC94KX10aGlzLmJvbGQ9L2JvbGQvZ2kudGVzdChyKTt0aGlzLml0YWxpYz0vb2JsaXF1ZXxpdGFsaWMvZ2kudGVzdChyKTt0aGlzLmJsYWNrPS9CbGFjay9nLnRlc3QodCk7Y29uc3QgbT0vTmFycm93L2cudGVzdCh0KTt0aGlzLnJlbWVhc3VyZT0oIWR8fG0pJiZPYmplY3Qua2V5cyh0aGlzLndpZHRocykubGVuZ3RoPjA7aWYoKGR8fGcpJiYiQ0lERm9udFR5cGUyIj09PWEmJnRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiSWRlbnRpdHktIikpe2NvbnN0IGE9ZS5jaWRUb0dpZE1hcCxyPVtdO2FwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAociwoMCxsLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSk7L0FyaWFsLT9CbGFjay9pLnRlc3QodCk/YXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChyLCgwLGwuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTovQ2FsaWJyaS9pLnRlc3QodCkmJmFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAociwoMCxsLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSk7aWYoYSl7Zm9yKGNvbnN0IGUgaW4gcil7Y29uc3QgdD1yW2VdO3ZvaWQgMCE9PWFbdF0mJihyWytlXT1hW3RdKX1hLmxlbmd0aCE9PXRoaXMudG9Vbmljb2RlLmxlbmd0aCYmZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2NvbnN0IGk9cltlXTt2b2lkIDA9PT1hW2ldJiYoclsrZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3JbK2VdPXR9KSk7dGhpcy50b0ZvbnRDaGFyPXI7dGhpcy50b1VuaWNvZGU9bmV3IGguVG9Vbmljb2RlTWFwKHIpfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QocikpdGhpcy50b0ZvbnRDaGFyPWJ1aWxkVG9Gb250Q2hhcihjLlN5bWJvbFNldEVuY29kaW5nLCgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKC9EaW5nYmF0cy9pLnRlc3QocikpdGhpcy50b0ZvbnRDaGFyPWJ1aWxkVG9Gb250Q2hhcihjLlphcGZEaW5nYmF0c0VuY29kaW5nLCgwLG8uZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpO2Vsc2UgaWYoZCl7Y29uc3QgZT1idWlsZFRvRm9udENoYXIodGhpcy5kZWZhdWx0RW5jb2RpbmcsKDAsby5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09YXx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbih0LGEpe2VbK3RdPWF9KSk7dGhpcy50b0ZvbnRDaGFyPWV9ZWxzZXtjb25zdCBlPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKSxhPVtdO3RoaXMudG9Vbmljb2RlLmZvckVhY2goKCh0LHIpPT57aWYoIXRoaXMuY29tcG9zaXRlKXtjb25zdCBhPXRoaXMuZGlmZmVyZW5jZXNbdF18fHRoaXMuZGVmYXVsdEVuY29kaW5nW3RdLGk9KDAscy5nZXRVbmljb2RlRm9yR2x5cGgpKGEsZSk7LTEhPT1pJiYocj1pKX1hWyt0XT1yfSkpO3RoaXMuY29tcG9zaXRlJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXAmJi9UYWhvbWF8VmVyZGFuYS9pLnRlc3QodCkmJmFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAoYSwoMCxsLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSk7dGhpcy50b0ZvbnRDaGFyPWF9YW1lbmRGYWxsYmFja1RvVW5pY29kZShlKTt0aGlzLmxvYWRlZE5hbWU9ci5zcGxpdCgiLSIpWzBdfWNoZWNrQW5kUmVwYWlyKGUsdCxhKXtjb25zdCBzPVsiT1MvMiIsImNtYXAiLCJoZWFkIiwiaGhlYSIsImhtdHgiLCJtYXhwIiwibmFtZSIsInBvc3QiLCJsb2NhIiwiZ2x5ZiIsImZwZ20iLCJwcmVwIiwiY3Z0ICIsIkNGRiAiXTtmdW5jdGlvbiByZWFkVGFibGVzKGUsdCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpO2FbIk9TLzIiXT1udWxsO2EuY21hcD1udWxsO2EuaGVhZD1udWxsO2EuaGhlYT1udWxsO2EuaG10eD1udWxsO2EubWF4cD1udWxsO2EubmFtZT1udWxsO2EucG9zdD1udWxsO2ZvcihsZXQgcj0wO3I8dDtyKyspe2NvbnN0IHQ9cmVhZFRhYmxlRW50cnkoZSk7cy5pbmNsdWRlcyh0LnRhZykmJigwIT09dC5sZW5ndGgmJihhW3QudGFnXT10KSl9cmV0dXJuIGF9ZnVuY3Rpb24gcmVhZFRhYmxlRW50cnkoZSl7Y29uc3QgdD1lLmdldFN0cmluZyg0KSxhPWUuZ2V0SW50MzIoKT4+PjAscj1lLmdldEludDMyKCk+Pj4wLGk9ZS5nZXRJbnQzMigpPj4+MCxuPWUucG9zO2UucG9zPWUuc3RhcnR8fDA7ZS5za2lwKHIpO2NvbnN0IHM9ZS5nZXRCeXRlcyhpKTtlLnBvcz1uO2lmKCJoZWFkIj09PXQpe3NbOF09c1s5XT1zWzEwXT1zWzExXT0wO3NbMTddfD0zMn1yZXR1cm57dGFnOnQsY2hlY2tzdW06YSxsZW5ndGg6aSxvZmZzZXQ6cixkYXRhOnN9fWZ1bmN0aW9uIHJlYWRPcGVuVHlwZUhlYWRlcihlKXtyZXR1cm57dmVyc2lvbjplLmdldFN0cmluZyg0KSxudW1UYWJsZXM6ZS5nZXRVaW50MTYoKSxzZWFyY2hSYW5nZTplLmdldFVpbnQxNigpLGVudHJ5U2VsZWN0b3I6ZS5nZXRVaW50MTYoKSxyYW5nZVNoaWZ0OmUuZ2V0VWludDE2KCl9fWZ1bmN0aW9uIHNhbml0aXplR2x5cGgoZSx0LGEscixpLG4pe2NvbnN0IHM9e2xlbmd0aDowLHNpemVPZkluc3RydWN0aW9uczowfTtpZih0PDB8fHQ+PWUubGVuZ3RofHxhPmUubGVuZ3RofHxhLXQ8PTEyKXJldHVybiBzO2NvbnN0IG89ZS5zdWJhcnJheSh0LGEpLGM9c2lnbmVkSW50MTYob1syXSxvWzNdKSxsPXNpZ25lZEludDE2KG9bNF0sb1s1XSksaD1zaWduZWRJbnQxNihvWzZdLG9bN10pLHU9c2lnbmVkSW50MTYob1s4XSxvWzldKTtpZihjPmgpe3dyaXRlU2lnbmVkSW50MTYobywyLGgpO3dyaXRlU2lnbmVkSW50MTYobyw2LGMpfWlmKGw+dSl7d3JpdGVTaWduZWRJbnQxNihvLDQsdSk7d3JpdGVTaWduZWRJbnQxNihvLDgsbCl9Y29uc3QgZD1zaWduZWRJbnQxNihvWzBdLG9bMV0pO2lmKGQ8MCl7aWYoZDwtMSlyZXR1cm4gcztyLnNldChvLGkpO3MubGVuZ3RoPW8ubGVuZ3RoO3JldHVybiBzfWxldCBmLGc9MTAscD0wO2ZvcihmPTA7ZjxkO2YrKyl7cD0ob1tnXTw8OHxvW2crMV0pKzE7Zys9Mn1jb25zdCBtPWcsYj1vW2ddPDw4fG9bZysxXTtzLnNpemVPZkluc3RydWN0aW9ucz1iO2crPTIrYjtjb25zdCB5PWc7bGV0IHc9MDtmb3IoZj0wO2Y8cDtmKyspe2NvbnN0IGU9b1tnKytdOzE5MiZlJiYob1tnLTFdPTYzJmUpO2xldCB0PTI7MiZlP3Q9MToxNiZlJiYodD0wKTtsZXQgYT0yOzQmZT9hPTE6MzImZSYmKGE9MCk7Y29uc3Qgcj10K2E7dys9cjtpZig4JmUpe2NvbnN0IGU9b1tnKytdOzA9PT1lJiYob1tnLTFdXj04KTtmKz1lO3crPWUqcn19aWYoMD09PXcpcmV0dXJuIHM7bGV0IFM9Zyt3O2lmKFM+by5sZW5ndGgpcmV0dXJuIHM7aWYoIW4mJmI+MCl7ci5zZXQoby5zdWJhcnJheSgwLG0pLGkpO3Iuc2V0KFswLDBdLGkrbSk7ci5zZXQoby5zdWJhcnJheSh5LFMpLGkrbSsyKTtTLT1iO28ubGVuZ3RoLVM+MyYmKFM9UyszJi00KTtzLmxlbmd0aD1TO3JldHVybiBzfWlmKG8ubGVuZ3RoLVM+Myl7Uz1TKzMmLTQ7ci5zZXQoby5zdWJhcnJheSgwLFMpLGkpO3MubGVuZ3RoPVM7cmV0dXJuIHN9ci5zZXQobyxpKTtzLmxlbmd0aD1vLmxlbmd0aDtyZXR1cm4gc31mdW5jdGlvbiByZWFkTmFtZVRhYmxlKGUpe2NvbnN0IGE9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPWE7Y29uc3Qgcj1bW10sW11dLGk9W10sbj1lLmxlbmd0aCxzPWErbjtpZigwIT09dC5nZXRVaW50MTYoKXx8bjw2KXJldHVybltyLGldO2NvbnN0IG89dC5nZXRVaW50MTYoKSxjPXQuZ2V0VWludDE2KCk7bGV0IGwsaDtmb3IobD0wO2w8byYmdC5wb3MrMTI8PXM7bCsrKXtjb25zdCBlPXtwbGF0Zm9ybTp0LmdldFVpbnQxNigpLGVuY29kaW5nOnQuZ2V0VWludDE2KCksbGFuZ3VhZ2U6dC5nZXRVaW50MTYoKSxuYW1lOnQuZ2V0VWludDE2KCksbGVuZ3RoOnQuZ2V0VWludDE2KCksb2Zmc2V0OnQuZ2V0VWludDE2KCl9Oyhpc01hY05hbWVSZWNvcmQoZSl8fGlzV2luTmFtZVJlY29yZChlKSkmJmkucHVzaChlKX1mb3IobD0wLGg9aS5sZW5ndGg7bDxoO2wrKyl7Y29uc3QgZT1pW2xdO2lmKGUubGVuZ3RoPD0wKWNvbnRpbnVlO2NvbnN0IG49YStjK2Uub2Zmc2V0O2lmKG4rZS5sZW5ndGg+cyljb250aW51ZTt0LnBvcz1uO2NvbnN0IG89ZS5uYW1lO2lmKGUuZW5jb2Rpbmcpe2xldCBhPSIiO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrPTIpYSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0LmdldFVpbnQxNigpKTtyWzFdW29dPWF9ZWxzZSByWzBdW29dPXQuZ2V0U3RyaW5nKGUubGVuZ3RoKX1yZXR1cm5bcixpXX1jb25zdCBsPVswLDAsMCwwLDAsMCwwLDAsLTIsLTIsLTIsLTIsMCwwLC0yLC01LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLC0xLC0xLDEsLTEsLTk5OSwwLDEsMCwtMSwtMiwwLC0xLC0yLC0xLC0xLDAsLTEsLTEsMCwwLC05OTksLTk5OSwtMSwtMSwtMSwtMSwtMiwtOTk5LC0yLC0yLC05OTksMCwtMiwtMiwwLDAsLTIsMCwtMiwwLDAsMCwtMiwtMSwtMSwxLDEsMCwwLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLDAsLTk5OSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwtMiwtOTk5LC05OTksLTk5OSwtOTk5LC05OTksLTEsLTEsLTIsLTIsMCwwLDAsMCwtMSwtMSwtOTk5LC0yLC0yLDAsMCwtMSwtMiwtMiwwLDAsMCwtMSwtMSwtMSwtMl07ZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW0oZSx0KXtsZXQgYSxpLG4scyxvLGM9ZS5kYXRhLGg9MCx1PTAsZD0wO2NvbnN0IGY9W10sZz1bXSxwPVtdO2xldCBtPXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zLGI9ITEseT0wLHc9MDtmb3IobGV0IGU9Yy5sZW5ndGg7aDxlOyl7Y29uc3QgZT1jW2grK107aWYoNjQ9PT1lKXtpPWNbaCsrXTtpZihifHx3KWgrPWk7ZWxzZSBmb3IoYT0wO2E8aTthKyspZi5wdXNoKGNbaCsrXSl9ZWxzZSBpZig2NT09PWUpe2k9Y1toKytdO2lmKGJ8fHcpaCs9MippO2Vsc2UgZm9yKGE9MDthPGk7YSsrKXtuPWNbaCsrXTtmLnB1c2gobjw8OHxjW2grK10pfX1lbHNlIGlmKDE3Nj09KDI0OCZlKSl7aT1lLTE3NisxO2lmKGJ8fHcpaCs9aTtlbHNlIGZvcihhPTA7YTxpO2ErKylmLnB1c2goY1toKytdKX1lbHNlIGlmKDE4ND09KDI0OCZlKSl7aT1lLTE4NCsxO2lmKGJ8fHcpaCs9MippO2Vsc2UgZm9yKGE9MDthPGk7YSsrKXtuPWNbaCsrXTtmLnB1c2gobjw8OHxjW2grK10pfX1lbHNlIGlmKDQzIT09ZXx8bSlpZig0NCE9PWV8fG0pe2lmKDQ1PT09ZSlpZihiKXtiPSExO3U9aH1lbHNle289Zy5wb3AoKTtpZighbyl7KDAsci53YXJuKSgiVFQ6IEVOREYgYmFkIHN0YWNrIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1zPXAucG9wKCk7Yz1vLmRhdGE7aD1vLmk7dC5mdW5jdGlvbnNTdGFja0RlbHRhc1tzXT1mLmxlbmd0aC1vLnN0YWNrVG9wfWVsc2UgaWYoMTM3PT09ZSl7aWYoYnx8dyl7KDAsci53YXJuKSgiVFQ6IG5lc3RlZCBJREVGcyBub3QgYWxsb3dlZCIpO209ITB9Yj0hMDtkPWh9ZWxzZSBpZig4OD09PWUpKyt5O2Vsc2UgaWYoMjc9PT1lKXc9eTtlbHNlIGlmKDg5PT09ZSl7dz09PXkmJih3PTApOy0teX1lbHNlIGlmKDI4PT09ZSYmIWImJiF3KXtjb25zdCBlPWYuYXQoLTEpO2U+MCYmKGgrPWUtMSl9fWVsc2V7aWYoYnx8dyl7KDAsci53YXJuKSgiVFQ6IG5lc3RlZCBGREVGcyBub3QgYWxsb3dlZCIpO209ITB9Yj0hMDtkPWg7cz1mLnBvcCgpO3QuZnVuY3Rpb25zRGVmaW5lZFtzXT17ZGF0YTpjLGk6aH19ZWxzZSBpZighYiYmIXcpe3M9Zi5hdCgtMSk7aWYoaXNOYU4ocykpKDAsci5pbmZvKSgiVFQ6IENBTEwgZW1wdHkgc3RhY2sgKG9yIGludmFsaWQgZW50cnkpLiIpO2Vsc2V7dC5mdW5jdGlvbnNVc2VkW3NdPSEwO2lmKHMgaW4gdC5mdW5jdGlvbnNTdGFja0RlbHRhcyl7Y29uc3QgZT1mLmxlbmd0aCt0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW3NdO2lmKGU8MCl7KDAsci53YXJuKSgiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1mLmxlbmd0aD1lfWVsc2UgaWYocyBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFwLmluY2x1ZGVzKHMpKXtnLnB1c2goe2RhdGE6YyxpOmgsc3RhY2tUb3A6Zi5sZW5ndGgtMX0pO3AucHVzaChzKTtvPXQuZnVuY3Rpb25zRGVmaW5lZFtzXTtpZighbyl7KDAsci53YXJuKSgiVFQ6IENBTEwgbm9uLWV4aXN0ZW50IGZ1bmN0aW9uIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1jPW8uZGF0YTtoPW8uaX19fWlmKCFiJiYhdyl7bGV0IHQ9MDtlPD0xNDI/dD1sW2VdOmU+PTE5MiYmZTw9MjIzP3Q9LTE6ZT49MjI0JiYodD0tMik7aWYoZT49MTEzJiZlPD0xMTcpe2k9Zi5wb3AoKTtpc05hTihpKXx8KHQ9MiotaSl9Zm9yKDt0PDAmJmYubGVuZ3RoPjA7KXtmLnBvcCgpO3QrK31mb3IoO3Q+MDspe2YucHVzaChOYU4pO3QtLX19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPW07Y29uc3QgUz1bY107aD5jLmxlbmd0aCYmUy5wdXNoKG5ldyBVaW50OEFycmF5KGgtYy5sZW5ndGgpKTtpZihkPnUpeygwLHIud2FybikoIlRUOiBjb21wbGVtZW50aW5nIGEgbWlzc2luZyBmdW5jdGlvbiB0YWlsIik7Uy5wdXNoKG5ldyBVaW50OEFycmF5KFszNCw0NV0pKX0hZnVuY3Rpb24gZm9sZFRUVGFibGUoZSx0KXtpZih0Lmxlbmd0aD4xKXtsZXQgYSxyLGk9MDtmb3IoYT0wLHI9dC5sZW5ndGg7YTxyO2ErKylpKz10W2FdLmxlbmd0aDtpPWkrMyYtNDtjb25zdCBuPW5ldyBVaW50OEFycmF5KGkpO2xldCBzPTA7Zm9yKGE9MCxyPXQubGVuZ3RoO2E8cjthKyspe24uc2V0KHRbYV0scyk7cys9dFthXS5sZW5ndGh9ZS5kYXRhPW47ZS5sZW5ndGg9aX19KGUsUyl9bGV0IGQsZixiLHc7aWYoaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKHQ9bmV3IHkuU3RyZWFtKG5ldyBVaW50OEFycmF5KHQuZ2V0Qnl0ZXMoKSkpKSl7Y29uc3QgZT1mdW5jdGlvbiByZWFkVHJ1ZVR5cGVDb2xsZWN0aW9uRGF0YShlLHQpe2NvbnN0e251bUZvbnRzOmEsb2Zmc2V0VGFibGU6aX09ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcihlKXtjb25zdCB0PWUuZ2V0U3RyaW5nKDQpOygwLHIuYXNzZXJ0KSgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2NvbnN0IGE9ZS5nZXRVaW50MTYoKSxpPWUuZ2V0VWludDE2KCksbj1lLmdldEludDMyKCk+Pj4wLHM9W107Zm9yKGxldCB0PTA7dDxuO3QrKylzLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7Y29uc3Qgbz17dHRjVGFnOnQsbWFqb3JWZXJzaW9uOmEsbWlub3JWZXJzaW9uOmksbnVtRm9udHM6bixvZmZzZXRUYWJsZTpzfTtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybiBvO2Nhc2UgMjpvLmRzaWdUYWc9ZS5nZXRJbnQzMigpPj4+MDtvLmRzaWdMZW5ndGg9ZS5nZXRJbnQzMigpPj4+MDtvLmRzaWdPZmZzZXQ9ZS5nZXRJbnQzMigpPj4+MDtyZXR1cm4gb310aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBUcnVlVHlwZSBDb2xsZWN0aW9uIG1ham9yVmVyc2lvbjogJHthfS5gKX0oZSksbj10LnNwbGl0KCIrIik7bGV0IHM7Zm9yKGxldCBvPTA7bzxhO28rKyl7ZS5wb3M9KGUuc3RhcnR8fDApK2lbb107Y29uc3QgYT1yZWFkT3BlblR5cGVIZWFkZXIoZSksYz1yZWFkVGFibGVzKGUsYS5udW1UYWJsZXMpO2lmKCFjLm5hbWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Y29uc3RbbF09cmVhZE5hbWVUYWJsZShjLm5hbWUpO2ZvcihsZXQgZT0wLHI9bC5sZW5ndGg7ZTxyO2UrKylmb3IobGV0IHI9MCxpPWxbZV0ubGVuZ3RoO3I8aTtyKyspe2NvbnN0IGk9bFtlXVtyXT8ucmVwbGFjZUFsbCgvXHMvZywiIik7aWYoaSl7aWYoaT09PXQpcmV0dXJue2hlYWRlcjphLHRhYmxlczpjfTtpZighKG4ubGVuZ3RoPDIpKWZvcihjb25zdCBlIG9mIG4paT09PWUmJihzPXtuYW1lOmUsaGVhZGVyOmEsdGFibGVzOmN9KX19fWlmKHMpeygwLHIud2FybikoYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiAiJHt0fSIgZm9udCwgZmFsbGluZyBiYWNrIHRvICIke3MubmFtZX0iIGZvbnQgaW5zdGVhZC5gKTtyZXR1cm57aGVhZGVyOnMuaGVhZGVyLHRhYmxlczpzLnRhYmxlc319dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiAiJHt0fSIgZm9udC5gKX0odCx0aGlzLm5hbWUpO2Q9ZS5oZWFkZXI7Zj1lLnRhYmxlc31lbHNle2Q9cmVhZE9wZW5UeXBlSGVhZGVyKHQpO2Y9cmVhZFRhYmxlcyh0LGQubnVtVGFibGVzKX1jb25zdCBTPSFmWyJDRkYgIl07aWYoUyl7aWYoIWYubG9jYSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImxvY2EiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO2lmKCFmLmdseWYpeygwLHIud2FybikoJ1JlcXVpcmVkICJnbHlmIiB0YWJsZSBpcyBub3QgZm91bmQgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyk7Zi5nbHlmPXt0YWc6ImdseWYiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9fXRoaXMuaXNPcGVuVHlwZT0hMX1lbHNle2NvbnN0IHQ9YS5jb21wb3NpdGUmJihhLmNpZFRvR2lkTWFwPy5sZW5ndGg+MHx8IShhLmNNYXAgaW5zdGFuY2VvZiBwLklkZW50aXR5Q01hcCkpO2lmKCJPVFRPIj09PWQudmVyc2lvbiYmIXR8fCFmLmhlYWR8fCFmLmhoZWF8fCFmLm1heHB8fCFmLnBvc3Qpe3c9bmV3IHkuU3RyZWFtKGZbIkNGRiAiXS5kYXRhKTtiPW5ldyB1LkNGRkZvbnQodyxhKTthZGp1c3RXaWR0aHMoYSk7cmV0dXJuIHRoaXMuY29udmVydChlLGIsYSl9ZGVsZXRlIGYuZ2x5ZjtkZWxldGUgZi5sb2NhO2RlbGV0ZSBmLmZwZ207ZGVsZXRlIGYucHJlcDtkZWxldGUgZlsiY3Z0ICJdO3RoaXMuaXNPcGVuVHlwZT0hMH1pZighZi5tYXhwKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAibWF4cCIgdGFibGUgaXMgbm90IGZvdW5kJyk7dC5wb3M9KHQuc3RhcnR8fDApK2YubWF4cC5vZmZzZXQ7Y29uc3QgeD10LmdldEludDMyKCksQz10LmdldFVpbnQxNigpO2lmKGEuc2NhbGVGYWN0b3JzPy5sZW5ndGg9PT1DJiZTKXtjb25zdHtzY2FsZUZhY3RvcnM6ZX09YSx0PWludDE2KGYuaGVhZC5kYXRhWzUwXSxmLmhlYWQuZGF0YVs1MV0pLHI9bmV3IGcuR2x5ZlRhYmxlKHtnbHlmVGFibGU6Zi5nbHlmLmRhdGEsaXNHbHlwaExvY2F0aW9uc0xvbmc6dCxsb2NhVGFibGU6Zi5sb2NhLmRhdGEsbnVtR2x5cGhzOkN9KTtyLnNjYWxlKGUpO2NvbnN0e2dseWY6aSxsb2NhOm4saXNMb2NhdGlvbkxvbmc6c309ci53cml0ZSgpO2YuZ2x5Zi5kYXRhPWk7Zi5sb2NhLmRhdGE9bjtpZihzIT09ISF0KXtmLmhlYWQuZGF0YVs1MF09MDtmLmhlYWQuZGF0YVs1MV09cz8xOjB9Y29uc3Qgbz1mLmhtdHguZGF0YTtmb3IobGV0IHQ9MDt0PEM7dCsrKXtjb25zdCBhPTQqdCxyPU1hdGgucm91bmQoZVt0XSppbnQxNihvW2FdLG9bYSsxXSkpO29bYV09cj4+OCYyNTU7b1thKzFdPTI1NSZyO3dyaXRlU2lnbmVkSW50MTYobyxhKzIsTWF0aC5yb3VuZChlW3RdKnNpZ25lZEludDE2KG9bYSsyXSxvW2ErM10pKSl9fWxldCBrPUMrMSx2PSEwO2lmKGs+NjU1MzUpe3Y9ITE7az1DOygwLHIud2FybikoIk5vdCBlbm91Z2ggc3BhY2UgaW4gZ2x5ZnMgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLiIpfWxldCBGPTAsTz0wO2lmKHg+PTY1NTM2JiZmLm1heHAubGVuZ3RoPj0yMil7dC5wb3MrPTg7aWYodC5nZXRVaW50MTYoKT4yKXtmLm1heHAuZGF0YVsxNF09MDtmLm1heHAuZGF0YVsxNV09Mn10LnBvcys9NDtGPXQuZ2V0VWludDE2KCk7dC5wb3MrPTQ7Tz10LmdldFVpbnQxNigpfWYubWF4cC5kYXRhWzRdPWs+Pjg7Zi5tYXhwLmRhdGFbNV09MjU1Jms7Y29uc3QgVD1mdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbXMoZSx0LGEsaSl7Y29uc3Qgbj17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtlJiZzYW5pdGl6ZVRUUHJvZ3JhbShlLG4pO3QmJnNhbml0aXplVFRQcm9ncmFtKHQsbik7ZSYmZnVuY3Rpb24gY2hlY2tJbnZhbGlkRnVuY3Rpb25zKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKWlmKGUuZnVuY3Rpb25zRGVmaW5lZC5sZW5ndGg+dCl7KDAsci53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpO2UuaGludHNWYWxpZD0hMX1lbHNlIGZvcihsZXQgYT0wLGk9ZS5mdW5jdGlvbnNVc2VkLmxlbmd0aDthPGk7YSsrKXtpZihhPnQpeygwLHIud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK2EpO2UuaGludHNWYWxpZD0hMTtyZXR1cm59aWYoZS5mdW5jdGlvbnNVc2VkW2FdJiYhZS5mdW5jdGlvbnNEZWZpbmVkW2FdKXsoMCxyLndhcm4pKCJUVDogdW5kZWZpbmVkIGZ1bmN0aW9uOiAiK2EpO2UuaGludHNWYWxpZD0hMTtyZXR1cm59fX0obixpKTtpZihhJiYxJmEubGVuZ3RoKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzEpO2Uuc2V0KGEuZGF0YSk7YS5kYXRhPWV9cmV0dXJuIG4uaGludHNWYWxpZH0oZi5mcGdtLGYucHJlcCxmWyJjdnQgIl0sRik7aWYoIVQpe2RlbGV0ZSBmLmZwZ207ZGVsZXRlIGYucHJlcDtkZWxldGUgZlsiY3Z0ICJdfSFmdW5jdGlvbiBzYW5pdGl6ZU1ldHJpY3MoZSx0LGEsaSxuLHMpe2lmKCF0KXthJiYoYS5kYXRhPW51bGwpO3JldHVybn1lLnBvcz0oZS5zdGFydHx8MCkrdC5vZmZzZXQ7ZS5wb3MrPTQ7ZS5wb3MrPTI7ZS5wb3MrPTI7ZS5wb3MrPTI7ZS5wb3MrPTI7ZS5wb3MrPTI7ZS5wb3MrPTI7ZS5wb3MrPTI7ZS5wb3MrPTI7ZS5wb3MrPTI7Y29uc3Qgbz1lLmdldFVpbnQxNigpO2UucG9zKz04O2UucG9zKz0yO2xldCBjPWUuZ2V0VWludDE2KCk7aWYoMCE9PW8pe2lmKCEoMiZpbnQxNihpLmRhdGFbNDRdLGkuZGF0YVs0NV0pKSl7dC5kYXRhWzIyXT0wO3QuZGF0YVsyM109MH19aWYoYz5uKXsoMCxyLmluZm8pKGBUaGUgbnVtT2ZNZXRyaWNzICgke2N9KSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbnVtR2x5cGhzICgke259KS5gKTtjPW47dC5kYXRhWzM0XT0oNjUyODAmYyk+Pjg7dC5kYXRhWzM1XT0yNTUmY31jb25zdCBsPW4tYy0oYS5sZW5ndGgtNCpjPj4xKTtpZihsPjApe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgrMipsKTtlLnNldChhLmRhdGEpO2lmKHMpe2VbYS5sZW5ndGhdPWEuZGF0YVsyXTtlW2EubGVuZ3RoKzFdPWEuZGF0YVszXX1hLmRhdGE9ZX19KHQsZi5oaGVhLGYuaG10eCxmLmhlYWQsayx2KTtpZighZi5oZWFkKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGVhZCIgdGFibGUgaXMgbm90IGZvdW5kJyk7IWZ1bmN0aW9uIHNhbml0aXplSGVhZChlLHQsYSl7Y29uc3QgaT1lLmRhdGEsbj1mdW5jdGlvbiBpbnQzMihlLHQsYSxyKXtyZXR1cm4oZTw8MjQpKyh0PDwxNikrKGE8PDgpK3J9KGlbMF0saVsxXSxpWzJdLGlbM10pO2lmKG4+PjE2IT0xKXsoMCxyLmluZm8pKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIHZlcnNpb24gaW4gaGVhZCB0YWJsZTogIituKTtpWzBdPTA7aVsxXT0xO2lbMl09MDtpWzNdPTB9Y29uc3Qgcz1pbnQxNihpWzUwXSxpWzUxXSk7aWYoczwwfHxzPjEpeygwLHIuaW5mbykoIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgaW5kZXhUb0xvY0Zvcm1hdCBpbiBoZWFkIHRhYmxlOiAiK3MpO2NvbnN0IGU9dCsxO2lmKGE9PT1lPDwxKXtpWzUwXT0wO2lbNTFdPTB9ZWxzZXtpZihhIT09ZTw8Mil0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiQ291bGQgbm90IGZpeCBpbmRleFRvTG9jRm9ybWF0OiAiK3MpO2lbNTBdPTA7aVs1MV09MX19fShmLmhlYWQsQyxTP2YubG9jYS5sZW5ndGg6MCk7bGV0IE09T2JqZWN0LmNyZWF0ZShudWxsKTtpZihTKXtjb25zdCBlPWludDE2KGYuaGVhZC5kYXRhWzUwXSxmLmhlYWQuZGF0YVs1MV0pLHQ9ZnVuY3Rpb24gc2FuaXRpemVHbHlwaExvY2F0aW9ucyhlLHQsYSxyLGksbixzKXtsZXQgbyxjLGw7aWYocil7bz00O2M9ZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGVMb25nKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07bD1mdW5jdGlvbiBmb250SXRlbUVuY29kZUxvbmcoZSx0LGEpe2VbdF09YT4+PjI0JjI1NTtlW3QrMV09YT4+MTYmMjU1O2VbdCsyXT1hPj44JjI1NTtlW3QrM109MjU1JmF9fWVsc2V7bz0yO2M9ZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZSx0KXtyZXR1cm4gZVt0XTw8OXxlW3QrMV08PDF9O2w9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGUoZSx0LGEpe2VbdF09YT4+OSYyNTU7ZVt0KzFdPWE+PjEmMjU1fX1jb25zdCBoPW4/YSsxOmEsdT1vKigxK2gpLGQ9bmV3IFVpbnQ4QXJyYXkodSk7ZC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsdSkpO2UuZGF0YT1kO2NvbnN0IGY9dC5kYXRhLGc9Zi5sZW5ndGgscD1uZXcgVWludDhBcnJheShnKTtsZXQgbSxiO2NvbnN0IHk9W107Zm9yKG09MCxiPTA7bTxhKzE7bSsrLGIrPW8pe2xldCBlPWMoZCxiKTtlPmcmJihlPWcpO3kucHVzaCh7aW5kZXg6bSxvZmZzZXQ6ZSxlbmRPZmZzZXQ6MH0pfXkuc29ydCgoKGUsdCk9PmUub2Zmc2V0LXQub2Zmc2V0KSk7Zm9yKG09MDttPGE7bSsrKXlbbV0uZW5kT2Zmc2V0PXlbbSsxXS5vZmZzZXQ7eS5zb3J0KCgoZSx0KT0+ZS5pbmRleC10LmluZGV4KSk7Zm9yKG09MDttPGE7bSsrKXtjb25zdHtvZmZzZXQ6ZSxlbmRPZmZzZXQ6dH09eVttXTtpZigwIT09ZXx8MCE9PXQpYnJlYWs7Y29uc3QgYT15W20rMV0ub2Zmc2V0O2lmKDAhPT1hKXt5W21dLmVuZE9mZnNldD1hO2JyZWFrfX1jb25zdCB3PU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IFM9MDtsKGQsMCxTKTtmb3IobT0wLGI9bzttPGE7bSsrLGIrPW8pe2NvbnN0IGU9c2FuaXRpemVHbHlwaChmLHlbbV0ub2Zmc2V0LHlbbV0uZW5kT2Zmc2V0LHAsUyxpKSx0PWUubGVuZ3RoOzA9PT10JiYod1ttXT0hMCk7ZS5zaXplT2ZJbnN0cnVjdGlvbnM+cyYmKHM9ZS5zaXplT2ZJbnN0cnVjdGlvbnMpO1MrPXQ7bChkLGIsUyl9aWYoMD09PVMpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoWzAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0OSwwXSk7Zm9yKG09MCxiPW87bTxoO20rKyxiKz1vKWwoZCxiLGUubGVuZ3RoKTt0LmRhdGE9ZX1lbHNlIGlmKG4pe2NvbnN0IGE9YyhkLG8pO2lmKHAubGVuZ3RoPmErUyl0LmRhdGE9cC5zdWJhcnJheSgwLGErUyk7ZWxzZXt0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoYStTKTt0LmRhdGEuc2V0KHAuc3ViYXJyYXkoMCxTKSl9dC5kYXRhLnNldChwLnN1YmFycmF5KDAsYSksUyk7bChlLmRhdGEsZC5sZW5ndGgtbyxTK2EpfWVsc2UgdC5kYXRhPXAuc3ViYXJyYXkoMCxTKTtyZXR1cm57bWlzc2luZ0dseXBoczp3LG1heFNpemVPZkluc3RydWN0aW9uczpzfX0oZi5sb2NhLGYuZ2x5ZixDLGUsVCx2LE8pO009dC5taXNzaW5nR2x5cGhzO2lmKHg+PTY1NTM2JiZmLm1heHAubGVuZ3RoPj0yMil7Zi5tYXhwLmRhdGFbMjZdPXQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zPj44O2YubWF4cC5kYXRhWzI3XT0yNTUmdC5tYXhTaXplT2ZJbnN0cnVjdGlvbnN9fWlmKCFmLmhoZWEpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJoaGVhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtpZigwPT09Zi5oaGVhLmRhdGFbMTBdJiYwPT09Zi5oaGVhLmRhdGFbMTFdKXtmLmhoZWEuZGF0YVsxMF09MjU1O2YuaGhlYS5kYXRhWzExXT0yNTV9Y29uc3QgRT17dW5pdHNQZXJFbTppbnQxNihmLmhlYWQuZGF0YVsxOF0sZi5oZWFkLmRhdGFbMTldKSx5TWF4OnNpZ25lZEludDE2KGYuaGVhZC5kYXRhWzQyXSxmLmhlYWQuZGF0YVs0M10pLHlNaW46c2lnbmVkSW50MTYoZi5oZWFkLmRhdGFbMzhdLGYuaGVhZC5kYXRhWzM5XSksYXNjZW50OnNpZ25lZEludDE2KGYuaGhlYS5kYXRhWzRdLGYuaGhlYS5kYXRhWzVdKSxkZXNjZW50OnNpZ25lZEludDE2KGYuaGhlYS5kYXRhWzZdLGYuaGhlYS5kYXRhWzddKSxsaW5lR2FwOnNpZ25lZEludDE2KGYuaGhlYS5kYXRhWzhdLGYuaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9RS5hc2NlbnQvRS51bml0c1BlckVtO3RoaXMuZGVzY2VudD1FLmRlc2NlbnQvRS51bml0c1BlckVtO3RoaXMubGluZUdhcD1FLmxpbmVHYXAvRS51bml0c1BlckVtO2lmKHRoaXMuY3NzRm9udEluZm8/LmxpbmVIZWlnaHQpe3RoaXMubGluZUhlaWdodD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUhlaWdodDt0aGlzLmxpbmVHYXA9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVHYXB9ZWxzZSB0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50K3RoaXMubGluZUdhcDtmLnBvc3QmJmZ1bmN0aW9uIHJlYWRQb3N0U2NyaXB0VGFibGUoZSxhLGkpe2NvbnN0IHM9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPXM7Y29uc3Qgbz1zK2UubGVuZ3RoLGM9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7bGV0IGwsaCx1PSEwO3N3aXRjaChjKXtjYXNlIDY1NTM2Omw9bi5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc7YnJlYWs7Y2FzZSAxMzEwNzI6Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGUhPT1pKXt1PSExO2JyZWFrfWNvbnN0IHM9W107Zm9yKGg9MDtoPGU7KytoKXtjb25zdCBlPXQuZ2V0VWludDE2KCk7aWYoZT49MzI3Njgpe3U9ITE7YnJlYWt9cy5wdXNoKGUpfWlmKCF1KWJyZWFrO2NvbnN0IGQ9W10sZj1bXTtmb3IoO3QucG9zPG87KXtjb25zdCBlPXQuZ2V0Qnl0ZSgpO2YubGVuZ3RoPWU7Zm9yKGg9MDtoPGU7KytoKWZbaF09U3RyaW5nLmZyb21DaGFyQ29kZSh0LmdldEJ5dGUoKSk7ZC5wdXNoKGYuam9pbigiIikpfWw9W107Zm9yKGg9MDtoPGU7KytoKXtjb25zdCBlPXNbaF07ZTwyNTg/bC5wdXNoKG4uTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW2VdKTpsLnB1c2goZFtlLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsci53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIitjKTt1PSExO2EuZGVmYXVsdEVuY29kaW5nJiYobD1hLmRlZmF1bHRFbmNvZGluZyl9YS5nbHlwaE5hbWVzPWw7cmV0dXJuIHV9KGYucG9zdCxhLEMpO2YucG9zdD17dGFnOiJwb3N0IixkYXRhOmNyZWF0ZVBvc3RUYWJsZShhKX07Y29uc3QgRD1bXTtmdW5jdGlvbiBoYXNHbHlwaChlKXtyZXR1cm4hTVtlXX1pZihhLmNvbXBvc2l0ZSl7Y29uc3QgZT1hLmNpZFRvR2lkTWFwfHxbXSx0PTA9PT1lLmxlbmd0aDthLmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oYSxpKXsic3RyaW5nIj09dHlwZW9mIGkmJihpPWNvbnZlcnRDaWRTdHJpbmcoYSxpLCEwKSk7aWYoaT42NTUzNSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2xldCBuPS0xO3Q/bj1pOnZvaWQgMCE9PWVbaV0mJihuPWVbaV0pO24+PTAmJm48QyYmaGFzR2x5cGgobikmJihEW2FdPW4pfSkpfWVsc2V7Y29uc3QgZT1mdW5jdGlvbiByZWFkQ21hcFRhYmxlKGUsdCxhLGkpe2lmKCFlKXsoMCxyLndhcm4pKCJObyBjbWFwIHRhYmxlIGF2YWlsYWJsZS4iKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19bGV0IG4scz0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9czt0LnNraXAoMik7Y29uc3Qgbz10LmdldFVpbnQxNigpO2xldCBjLGw9ITE7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3Qgcj10LmdldFVpbnQxNigpLG49dC5nZXRVaW50MTYoKSxzPXQuZ2V0SW50MzIoKT4+PjA7bGV0IGg9ITE7aWYoYz8ucGxhdGZvcm1JZCE9PXJ8fGM/LmVuY29kaW5nSWQhPT1uKXtpZigwIT09cnx8MCE9PW4mJjEhPT1uJiYzIT09bilpZigxPT09ciYmMD09PW4paD0hMDtlbHNlIGlmKDMhPT1yfHwxIT09bnx8IWkmJmMpe2lmKGEmJjM9PT1yJiYwPT09bil7aD0hMDtsZXQgYT0hMDtpZihlPG8tMSl7Y29uc3QgZT10LnBlZWtCeXRlcygyKTtpbnQxNihlWzBdLGVbMV0pPHImJihhPSExKX1hJiYobD0hMCl9fWVsc2V7aD0hMDthfHwobD0hMCl9ZWxzZSBoPSEwO2gmJihjPXtwbGF0Zm9ybUlkOnIsZW5jb2RpbmdJZDpuLG9mZnNldDpzfSk7aWYobClicmVha319YyYmKHQucG9zPXMrYy5vZmZzZXQpO2lmKCFjfHwtMT09PXQucGVla0J5dGUoKSl7KDAsci53YXJuKSgiQ291bGQgbm90IGZpbmQgYSBwcmVmZXJyZWQgY21hcCB0YWJsZS4iKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19Y29uc3QgaD10LmdldFVpbnQxNigpO2xldCB1PSExO2NvbnN0IGQ9W107bGV0IGYsZztpZigwPT09aCl7dC5za2lwKDQpO2ZvcihmPTA7ZjwyNTY7ZisrKXtjb25zdCBlPXQuZ2V0Qnl0ZSgpO2UmJmQucHVzaCh7Y2hhckNvZGU6ZixnbHlwaElkOmV9KX11PSEwfWVsc2UgaWYoMj09PWgpe3Quc2tpcCg0KTtjb25zdCBlPVtdO2xldCBhPTA7Zm9yKGxldCByPTA7cjwyNTY7cisrKXtjb25zdCByPXQuZ2V0VWludDE2KCk+PjM7ZS5wdXNoKHIpO2E9TWF0aC5tYXgocixhKX1jb25zdCByPVtdO2ZvcihsZXQgZT0wO2U8PWE7ZSsrKXIucHVzaCh7Zmlyc3RDb2RlOnQuZ2V0VWludDE2KCksZW50cnlDb3VudDp0LmdldFVpbnQxNigpLGlkRGVsdGE6c2lnbmVkSW50MTYodC5nZXRCeXRlKCksdC5nZXRCeXRlKCkpLGlkUmFuZ2VQb3M6dC5wb3MrdC5nZXRVaW50MTYoKX0pO2ZvcihsZXQgYT0wO2E8MjU2O2ErKylpZigwPT09ZVthXSl7dC5wb3M9clswXS5pZFJhbmdlUG9zKzIqYTtnPXQuZ2V0VWludDE2KCk7ZC5wdXNoKHtjaGFyQ29kZTphLGdseXBoSWQ6Z30pfWVsc2V7Y29uc3QgaT1yW2VbYV1dO2ZvcihmPTA7ZjxpLmVudHJ5Q291bnQ7ZisrKXtjb25zdCBlPShhPDw4KStmK2kuZmlyc3RDb2RlO3QucG9zPWkuaWRSYW5nZVBvcysyKmY7Zz10LmdldFVpbnQxNigpOzAhPT1nJiYoZz0oZytpLmlkRGVsdGEpJTY1NTM2KTtkLnB1c2goe2NoYXJDb2RlOmUsZ2x5cGhJZDpnfSl9fX1lbHNlIGlmKDQ9PT1oKXt0LnNraXAoNCk7Y29uc3QgZT10LmdldFVpbnQxNigpPj4xO3Quc2tpcCg2KTtjb25zdCBhPVtdO2xldCByO2ZvcihyPTA7cjxlO3IrKylhLnB1c2goe2VuZDp0LmdldFVpbnQxNigpfSk7dC5za2lwKDIpO2ZvcihyPTA7cjxlO3IrKylhW3JdLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKHI9MDtyPGU7cisrKWFbcl0uZGVsdGE9dC5nZXRVaW50MTYoKTtsZXQgaSxvPTA7Zm9yKHI9MDtyPGU7cisrKXtuPWFbcl07Y29uc3Qgcz10LmdldFVpbnQxNigpO2lmKHMpe2k9KHM+PjEpLShlLXIpO24ub2Zmc2V0SW5kZXg9aTtvPU1hdGgubWF4KG8saStuLmVuZC1uLnN0YXJ0KzEpfWVsc2Ugbi5vZmZzZXRJbmRleD0tMX1jb25zdCBjPVtdO2ZvcihmPTA7ZjxvO2YrKyljLnB1c2godC5nZXRVaW50MTYoKSk7Zm9yKHI9MDtyPGU7cisrKXtuPWFbcl07cz1uLnN0YXJ0O2NvbnN0IGU9bi5lbmQsdD1uLmRlbHRhO2k9bi5vZmZzZXRJbmRleDtmb3IoZj1zO2Y8PWU7ZisrKWlmKDY1NTM1IT09Zil7Zz1pPDA/ZjpjW2krZi1zXTtnPWcrdCY2NTUzNTtkLnB1c2goe2NoYXJDb2RlOmYsZ2x5cGhJZDpnfSl9fX1lbHNlIGlmKDY9PT1oKXt0LnNraXAoNCk7Y29uc3QgZT10LmdldFVpbnQxNigpLGE9dC5nZXRVaW50MTYoKTtmb3IoZj0wO2Y8YTtmKyspe2c9dC5nZXRVaW50MTYoKTtjb25zdCBhPWUrZjtkLnB1c2goe2NoYXJDb2RlOmEsZ2x5cGhJZDpnfSl9fWVsc2V7aWYoMTIhPT1oKXsoMCxyLndhcm4pKCJjbWFwIHRhYmxlIGhhcyB1bnN1cHBvcnRlZCBmb3JtYXQ6ICIraCk7cmV0dXJue3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9fXt0LnNraXAoMTApO2NvbnN0IGU9dC5nZXRJbnQzMigpPj4+MDtmb3IoZj0wO2Y8ZTtmKyspe2NvbnN0IGU9dC5nZXRJbnQzMigpPj4+MCxhPXQuZ2V0SW50MzIoKT4+PjA7bGV0IHI9dC5nZXRJbnQzMigpPj4+MDtmb3IobGV0IHQ9ZTt0PD1hO3QrKylkLnB1c2goe2NoYXJDb2RlOnQsZ2x5cGhJZDpyKyt9KX19fWQuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2ZvcihsZXQgZT0xO2U8ZC5sZW5ndGg7ZSsrKWlmKGRbZS0xXS5jaGFyQ29kZT09PWRbZV0uY2hhckNvZGUpe2Quc3BsaWNlKGUsMSk7ZS0tfXJldHVybntwbGF0Zm9ybUlkOmMucGxhdGZvcm1JZCxlbmNvZGluZ0lkOmMuZW5jb2RpbmdJZCxtYXBwaW5nczpkLGhhc1Nob3J0Q21hcDp1fX0oZi5jbWFwLHQsdGhpcy5pc1N5bWJvbGljRm9udCxhLmhhc0VuY29kaW5nKSxpPWUucGxhdGZvcm1JZCxzPWUuZW5jb2RpbmdJZCxsPWUubWFwcGluZ3M7bGV0IHU9W10sZD0hMTshYS5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09YS5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PWEuYmFzZUVuY29kaW5nTmFtZXx8KHU9KDAsYy5nZXRFbmNvZGluZykoYS5iYXNlRW5jb2RpbmdOYW1lKSk7aWYoYS5oYXNFbmNvZGluZyYmIXRoaXMuaXNTeW1ib2xpY0ZvbnQmJigzPT09aSYmMT09PXN8fDE9PT1pJiYwPT09cykpe2NvbnN0IGU9KDAsby5nZXRHbHlwaHNVbmljb2RlKSgpO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl7bGV0IHI7cj12b2lkIDAhPT10aGlzLmRpZmZlcmVuY2VzW3RdP3RoaXMuZGlmZmVyZW5jZXNbdF06dS5sZW5ndGgmJiIiIT09dVt0XT91W3RdOmMuU3RhbmRhcmRFbmNvZGluZ1t0XTtpZighciljb250aW51ZTtjb25zdCBvPSgwLG4ucmVjb3ZlckdseXBoTmFtZSkocixlKTtsZXQgZDszPT09aSYmMT09PXM/ZD1lW29dOjE9PT1pJiYwPT09cyYmKGQ9Yy5NYWNSb21hbkVuY29kaW5nLmluZGV4T2YobykpO2lmKHZvaWQgMD09PWQpe2lmKCFhLmdseXBoTmFtZXMmJmEuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAmJiEodGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwKSl7Y29uc3QgZT10aGlzLnRvVW5pY29kZS5nZXQodCk7ZSYmKGQ9ZS5jb2RlUG9pbnRBdCgwKSl9aWYodm9pZCAwPT09ZCljb250aW51ZX1mb3IoY29uc3QgZSBvZiBsKWlmKGUuY2hhckNvZGU9PT1kKXtEW3RdPWUuZ2x5cGhJZDticmVha319fWVsc2UgaWYoMD09PWkpe2Zvcihjb25zdCBlIG9mIGwpRFtlLmNoYXJDb2RlXT1lLmdseXBoSWQ7ZD0hMH1lbHNlIGZvcihjb25zdCBlIG9mIGwpe2xldCB0PWUuY2hhckNvZGU7Mz09PWkmJnQ+PTYxNDQwJiZ0PD02MTY5NSYmKHQmPTI1NSk7RFt0XT1lLmdseXBoSWR9aWYoYS5nbHlwaE5hbWVzJiYodS5sZW5ndGh8fHRoaXMuZGlmZmVyZW5jZXMubGVuZ3RoKSlmb3IobGV0IGU9MDtlPDI1NjsrK2Upe2lmKCFkJiZ2b2lkIDAhPT1EW2VdKWNvbnRpbnVlO2NvbnN0IHQ9dGhpcy5kaWZmZXJlbmNlc1tlXXx8dVtlXTtpZighdCljb250aW51ZTtjb25zdCByPWEuZ2x5cGhOYW1lcy5pbmRleE9mKHQpO3I+MCYmaGFzR2x5cGgocikmJihEW2VdPXIpfX0wPT09RC5sZW5ndGgmJihEWzBdPTApO2xldCBOPWstMTt2fHwoTj0wKTtpZighYS5jc3NGb250SW5mbyl7Y29uc3QgZT1hZGp1c3RNYXBwaW5nKEQsaGFzR2x5cGgsTix0aGlzLnRvVW5pY29kZSk7dGhpcy50b0ZvbnRDaGFyPWUudG9Gb250Q2hhcjtmLmNtYXA9e3RhZzoiY21hcCIsZGF0YTpjcmVhdGVDbWFwVGFibGUoZS5jaGFyQ29kZVRvR2x5cGhJZCxlLnRvVW5pY29kZUV4dHJhTWFwLGspfTtmWyJPUy8yIl0mJmZ1bmN0aW9uIHZhbGlkYXRlT1MyVGFibGUoZSx0KXt0LnBvcz0odC5zdGFydHx8MCkrZS5vZmZzZXQ7Y29uc3QgYT10LmdldFVpbnQxNigpO3Quc2tpcCg2MCk7Y29uc3Qgcj10LmdldFVpbnQxNigpO2lmKGE8NCYmNzY4JnIpcmV0dXJuITE7aWYodC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpKXJldHVybiExO3Quc2tpcCg2KTtpZigwPT09dC5nZXRVaW50MTYoKSlyZXR1cm4hMTtlLmRhdGFbOF09ZS5kYXRhWzldPTA7cmV0dXJuITB9KGZbIk9TLzIiXSx0KXx8KGZbIk9TLzIiXT17dGFnOiJPUy8yIixkYXRhOmNyZWF0ZU9TMlRhYmxlKGEsZS5jaGFyQ29kZVRvR2x5cGhJZCxFKX0pfWlmKCFTKXRyeXt3PW5ldyB5LlN0cmVhbShmWyJDRkYgIl0uZGF0YSk7Yj1uZXcgaS5DRkZQYXJzZXIodyxhLG4uU0VBQ19BTkFMWVNJU19FTkFCTEVEKS5wYXJzZSgpO2IuZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IGU9bmV3IGkuQ0ZGQ29tcGlsZXIoYik7ZlsiQ0ZGICJdLmRhdGE9ZS5jb21waWxlKCl9Y2F0Y2goZSl7KDAsci53YXJuKSgiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCAiK2EubG9hZGVkTmFtZSl9aWYoZi5uYW1lKXtjb25zdFt0LHJdPXJlYWROYW1lVGFibGUoZi5uYW1lKTtmLm5hbWUuZGF0YT1jcmVhdGVOYW1lVGFibGUoZSx0KTt0aGlzLnBzTmFtZT10WzBdWzZdfHxudWxsO2EuY29tcG9zaXRlfHxmdW5jdGlvbiBhZGp1c3RUcnVlVHlwZVRvVW5pY29kZShlLHQsYSl7aWYoZS5pc0ludGVybmFsRm9udClyZXR1cm47aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcClyZXR1cm47aWYoZS5oYXNFbmNvZGluZylyZXR1cm47aWYoZS50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwKXJldHVybjtpZighdClyZXR1cm47aWYoMD09PWEubGVuZ3RoKXJldHVybjtpZihlLmRlZmF1bHRFbmNvZGluZz09PWMuV2luQW5zaUVuY29kaW5nKXJldHVybjtmb3IoY29uc3QgZSBvZiBhKWlmKCFpc1dpbk5hbWVSZWNvcmQoZSkpcmV0dXJuO2NvbnN0IHI9Yy5XaW5BbnNpRW5jb2RpbmcsaT1bXSxuPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07aWYoIiI9PT10KWNvbnRpbnVlO2NvbnN0IGE9blt0XTt2b2lkIDAhPT1hJiYoaVtlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpKX1pLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChpKX0oYSx0aGlzLmlzU3ltYm9saWNGb250LHIpfWVsc2UgZi5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6Y3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSl9O2NvbnN0IFI9bmV3IG0uT3BlblR5cGVGaWxlQnVpbGRlcihkLnZlcnNpb24pO2Zvcihjb25zdCBlIGluIGYpUi5hZGRUYWJsZShlLGZbZV0uZGF0YSk7cmV0dXJuIFIudG9BcnJheSgpfWNvbnZlcnQoZSx0LGEpe2EuZml4ZWRQaXRjaD0hMTthLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24gYWRqdXN0VHlwZTFUb1VuaWNvZGUoZSx0KXtpZihlLmlzSW50ZXJuYWxGb250KXJldHVybjtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXJldHVybjtpZih0PT09ZS5kZWZhdWx0RW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47Y29uc3QgYT1bXSxyPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgaSBpbiB0KXtpZihlLmhhc0VuY29kaW5nJiYoZS5iYXNlRW5jb2RpbmdOYW1lfHx2b2lkIDAhPT1lLmRpZmZlcmVuY2VzW2ldKSljb250aW51ZTtjb25zdCBuPXRbaV0sbz0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkobixyKTstMSE9PW8mJihhW2ldPVN0cmluZy5mcm9tQ2hhckNvZGUobykpfWEubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKGEpfShhLGEuYnVpbHRJbkVuY29kaW5nKTtsZXQgaT0xO3QgaW5zdGFuY2VvZiB1LkNGRkZvbnQmJihpPXQubnVtR2x5cGhzLTEpO2NvbnN0IGw9dC5nZXRHbHlwaE1hcHBpbmcoYSk7bGV0IGQ9bnVsbCxmPWwsZz1udWxsO2lmKCFhLmNzc0ZvbnRJbmZvKXtkPWFkanVzdE1hcHBpbmcobCx0Lmhhc0dseXBoSWQuYmluZCh0KSxpLHRoaXMudG9Vbmljb2RlKTt0aGlzLnRvRm9udENoYXI9ZC50b0ZvbnRDaGFyO2Y9ZC5jaGFyQ29kZVRvR2x5cGhJZDtnPWQudG9Vbmljb2RlRXh0cmFNYXB9Y29uc3QgcD10Lm51bUdseXBocztmdW5jdGlvbiBnZXRDaGFyQ29kZXMoZSx0KXtsZXQgYT1udWxsO2Zvcihjb25zdCByIGluIGUpdD09PWVbcl0mJihhfHw9W10pLnB1c2goMHxyKTtyZXR1cm4gYX1mdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShlLHQpe2Zvcihjb25zdCBhIGluIGUpaWYodD09PWVbYV0pcmV0dXJuIDB8YTtkLmNoYXJDb2RlVG9HbHlwaElkW2QubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dDtyZXR1cm4gZC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKyt9Y29uc3QgYj10LnNlYWNzO2lmKGQmJm4uU0VBQ19BTkFMWVNJU19FTkFCTEVEJiZiPy5sZW5ndGgpe2NvbnN0IGU9YS5mb250TWF0cml4fHxyLkZPTlRfSURFTlRJVFlfTUFUUklYLGk9dC5nZXRDaGFyc2V0KCksbj1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgdCBpbiBiKXt0fD0wO2NvbnN0IGE9Ylt0XSxyPWMuU3RhbmRhcmRFbmNvZGluZ1thWzJdXSxzPWMuU3RhbmRhcmRFbmNvZGluZ1thWzNdXSxvPWkuaW5kZXhPZihyKSxoPWkuaW5kZXhPZihzKTtpZihvPDB8fGg8MCljb250aW51ZTtjb25zdCB1PXt4OmFbMF0qZVswXSthWzFdKmVbMl0rZVs0XSx5OmFbMF0qZVsxXSthWzFdKmVbM10rZVs1XX0sZj1nZXRDaGFyQ29kZXMobCx0KTtpZihmKWZvcihjb25zdCBlIG9mIGYpe2NvbnN0IHQ9ZC5jaGFyQ29kZVRvR2x5cGhJZCxhPWNyZWF0ZUNoYXJDb2RlKHQsbykscj1jcmVhdGVDaGFyQ29kZSh0LGgpO25bZV09e2Jhc2VGb250Q2hhckNvZGU6YSxhY2NlbnRGb250Q2hhckNvZGU6cixhY2NlbnRPZmZzZXQ6dX19fWEuc2VhY01hcD1ufWNvbnN0IHk9MS8oYS5mb250TWF0cml4fHxyLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSx3PW5ldyBtLk9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTt3LmFkZFRhYmxlKCJDRkYgIix0LmRhdGEpO3cuYWRkVGFibGUoIk9TLzIiLGNyZWF0ZU9TMlRhYmxlKGEsZikpO3cuYWRkVGFibGUoImNtYXAiLGNyZWF0ZUNtYXBUYWJsZShmLGcscCkpO3cuYWRkVGFibGUoImhlYWQiLCJcMAFcMFwwXDBcMBBcMFwwXDBcMFwwXw88w7VcMFwwIitzYWZlU3RyaW5nMTYoeSkrIlwwXDBcMFwwwp5cdn4nXDBcMFwwXDDCnlx2fidcMFwwIitzYWZlU3RyaW5nMTYoYS5kZXNjZW50KSsiD8O/IitzYWZlU3RyaW5nMTYoYS5hc2NlbnQpK3N0cmluZzE2KGEuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIik7dy5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK3NhZmVTdHJpbmcxNihhLmFzY2VudCkrc2FmZVN0cmluZzE2KGEuZGVzY2VudCkrIlwwXDDDv8O/XDBcMFwwXDBcMFwwIitzYWZlU3RyaW5nMTYoYS5jYXBIZWlnaHQpK3NhZmVTdHJpbmcxNihNYXRoLnRhbihhLml0YWxpY0FuZ2xlKSphLnhIZWlnaHQpKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KHApKTt3LmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbiBmb250RmllbGRzSG10eCgpe2NvbnN0IGU9dC5jaGFyc3RyaW5ncyxhPXQuY2ZmP3QuY2ZmLndpZHRoczpudWxsO2xldCByPSJcMFwwXDBcMCI7Zm9yKGxldCB0PTEsaT1wO3Q8aTt0Kyspe2xldCBpPTA7aWYoZSl7Y29uc3QgYT1lW3QtMV07aT0id2lkdGgiaW4gYT9hLndpZHRoOjB9ZWxzZSBhJiYoaT1NYXRoLmNlaWwoYVt0XXx8MCkpO3IrPXN0cmluZzE2KGkpK3N0cmluZzE2KDApfXJldHVybiByfSgpKTt3LmFkZFRhYmxlKCJtYXhwIiwiXDBcMFBcMCIrc3RyaW5nMTYocCkpO3cuYWRkVGFibGUoIm5hbWUiLGNyZWF0ZU5hbWVUYWJsZShlKSk7dy5hZGRUYWJsZSgicG9zdCIsY3JlYXRlUG9zdFRhYmxlKGEpKTtyZXR1cm4gdy50b0FycmF5KCl9Z2V0IHNwYWNlV2lkdGgoKXtjb25zdCBlPVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl07bGV0IHQ7Zm9yKGNvbnN0IGEgb2YgZSl7aWYoYSBpbiB0aGlzLndpZHRocyl7dD10aGlzLndpZHRoc1thXTticmVha31jb25zdCBlPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKVthXTtsZXQgcj0wO2lmKHRoaXMuY29tcG9zaXRlJiZ0aGlzLmNNYXAuY29udGFpbnMoZSkpe3I9dGhpcy5jTWFwLmxvb2t1cChlKTsic3RyaW5nIj09dHlwZW9mIHImJihyPWNvbnZlcnRDaWRTdHJpbmcoZSxyKSl9IXImJnRoaXMudG9Vbmljb2RlJiYocj10aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKGUpKTtyPD0wJiYocj1lKTt0PXRoaXMud2lkdGhzW3JdO2lmKHQpYnJlYWt9cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInNwYWNlV2lkdGgiLHR8fHRoaXMuZGVmYXVsdFdpZHRoKX1fY2hhclRvR2x5cGgoZSx0PSExKXtsZXQgYSxpLG4sbz10aGlzLl9nbHlwaENhY2hlW2VdO2lmKG8/LmlzU3BhY2U9PT10KXJldHVybiBvO2xldCBjPWU7aWYodGhpcy5jTWFwPy5jb250YWlucyhlKSl7Yz10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgYyYmKGM9Y29udmVydENpZFN0cmluZyhlLGMpKX1pPXRoaXMud2lkdGhzW2NdOyJudW1iZXIiIT10eXBlb2YgaSYmKGk9dGhpcy5kZWZhdWx0V2lkdGgpO2NvbnN0IGw9dGhpcy52bWV0cmljcz8uW2NdO2xldCBoPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGgmJihoPVN0cmluZy5mcm9tQ2hhckNvZGUoaCkpO2xldCB1PXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTthPXRoaXMudG9Gb250Q2hhcltlXXx8ZTtpZih0aGlzLm1pc3NpbmdGaWxlKXtjb25zdCB0PXRoaXMuZGlmZmVyZW5jZXNbZV18fHRoaXMuZGVmYXVsdEVuY29kaW5nW2VdOyIubm90ZGVmIiE9PXQmJiIiIT09dHx8IlR5cGUxIiE9PXRoaXMudHlwZXx8KGE9MzIpO2E9KDAscy5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcykoYSl9dGhpcy5pc1R5cGUzRm9udCYmKG49YSk7bGV0IGQ9bnVsbDtpZih0aGlzLnNlYWNNYXA/LltlXSl7dT0hMDtjb25zdCB0PXRoaXMuc2VhY01hcFtlXTthPXQuYmFzZUZvbnRDaGFyQ29kZTtkPXtmb250Q2hhcjpTdHJpbmcuZnJvbUNvZGVQb2ludCh0LmFjY2VudEZvbnRDaGFyQ29kZSksb2Zmc2V0OnQuYWNjZW50T2Zmc2V0fX1sZXQgZj0iIjsibnVtYmVyIj09dHlwZW9mIGEmJihhPD0xMTE0MTExP2Y9U3RyaW5nLmZyb21Db2RlUG9pbnQoYSk6KDAsci53YXJuKShgY2hhclRvR2x5cGggLSBpbnZhbGlkIGZvbnRDaGFyQ29kZTogJHthfWApKTtvPW5ldyBHbHlwaChlLGYsaCxkLGksbCxuLHQsdSk7cmV0dXJuIHRoaXMuX2dseXBoQ2FjaGVbZV09b31jaGFyc1RvR2x5cGhzKGUpe2xldCB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDt0PVtdO2lmKHRoaXMuY01hcCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9ZS5sZW5ndGg7bGV0IGk9MDtmb3IoO2k8cjspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxpLGEpO2NvbnN0e2NoYXJjb2RlOnIsbGVuZ3RoOm59PWE7aSs9bjtjb25zdCBzPXRoaXMuX2NoYXJUb0dseXBoKHIsMT09PW4mJjMyPT09ZS5jaGFyQ29kZUF0KGktMSkpO3QucHVzaChzKX19ZWxzZSBmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjsrK2Epe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpLGk9dGhpcy5fY2hhclRvR2x5cGgociwzMj09PXIpO3QucHVzaChpKX1yZXR1cm4gdGhpcy5fY2hhcnNDYWNoZVtlXT10fWdldENoYXJQb3NpdGlvbnMoZSl7Y29uc3QgdD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcj0wO2Zvcig7cjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxyLGEpO2NvbnN0IGk9YS5sZW5ndGg7dC5wdXNoKFtyLHIraV0pO3IrPWl9fWVsc2UgZm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7KythKXQucHVzaChbYSxhKzFdKTtyZXR1cm4gdH1nZXQgZ2x5cGhDYWNoZVZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfWVuY29kZVN0cmluZyhlKXtjb25zdCB0PVtdLGE9W10saGFzQ3VycmVudEJ1ZkVycm9ycz0oKT0+dC5sZW5ndGglMj09MSxyPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcD9lPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKGUpOmU9PnRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpO2ZvcihsZXQgaT0wLG49ZS5sZW5ndGg7aTxuO2krKyl7Y29uc3Qgbj1lLmNvZGVQb2ludEF0KGkpO24+NTUyOTUmJihuPDU3MzQ0fHxuPjY1NTMzKSYmaSsrO2lmKHRoaXMudG9Vbmljb2RlKXtjb25zdCBlPXIobik7aWYoLTEhPT1lKXtpZihoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChhLmpvaW4oIiIpKTthLmxlbmd0aD0wfWZvcihsZXQgdD0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aChlKToxKS0xO3Q+PTA7dC0tKWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgqdCYyNTUpKTtjb250aW51ZX19aWYoIWhhc0N1cnJlbnRCdWZFcnJvcnMoKSl7dC5wdXNoKGEuam9pbigiIikpO2EubGVuZ3RoPTB9YS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KG4pKX10LnB1c2goYS5qb2luKCIiKSk7cmV0dXJuIHR9fTt0LkVycm9yRm9udD1jbGFzcyBFcnJvckZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5lcnJvcj1lO3RoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIjt0aGlzLm1pc3NpbmdGaWxlPSEwfWNoYXJzVG9HbHlwaHMoKXtyZXR1cm5bXX1lbmNvZGVTdHJpbmcoZSl7cmV0dXJuW2VdfWV4cG9ydERhdGEoZT0hMSl7cmV0dXJue2Vycm9yOnRoaXMuZXJyb3J9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DRkZUb3BEaWN0PXQuQ0ZGU3RyaW5ncz10LkNGRlN0YW5kYXJkU3RyaW5ncz10LkNGRlByaXZhdGVEaWN0PXQuQ0ZGUGFyc2VyPXQuQ0ZGSW5kZXg9dC5DRkZIZWFkZXI9dC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGQ2hhcnNldD10LkNGRj12b2lkIDA7dmFyIHI9YSgyKSxpPWEoMzYpLG49YSgzNyk7Y29uc3Qgcz1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiLCIwMDEuMDAwIiwiMDAxLjAwMSIsIjAwMS4wMDIiLCIwMDEuMDAzIiwiQmxhY2siLCJCb2xkIiwiQm9vayIsIkxpZ2h0IiwiTWVkaXVtIiwiUmVndWxhciIsIlJvbWFuIiwiU2VtaWJvbGQiXTt0LkNGRlN0YW5kYXJkU3RyaW5ncz1zO2NvbnN0IG89MzkxLGM9W251bGwse2lkOiJoc3RlbSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSxudWxsLHtpZDoidnN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJ2bW92ZXRvIixtaW46MSxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJsaW5ldG8iLG1pbjoyLHJlc2V0U3RhY2s6ITB9LHtpZDoiaGxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJ2bGluZXRvIixtaW46MSxyZXNldFN0YWNrOiEwfSx7aWQ6InJyY3VydmV0byIsbWluOjYscmVzZXRTdGFjazohMH0sbnVsbCx7aWQ6ImNhbGxzdWJyIixtaW46MSx1bmRlZlN0YWNrOiEwfSx7aWQ6InJldHVybiIsbWluOjAsdW5kZWZTdGFjazohMH0sbnVsbCxudWxsLHtpZDoiZW5kY2hhciIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0sbnVsbCxudWxsLG51bGwse2lkOiJoc3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoiaGludG1hc2siLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiY250cm1hc2siLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoicm1vdmV0byIsbWluOjIsc3RhY2tDbGVhcmluZzohMH0se2lkOiJobW92ZXRvIixtaW46MSxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InZzdGVtaG0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJyY3VydmVsaW5lIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InJsaW5lY3VydmUiLG1pbjo4LHJlc2V0U3RhY2s6ITB9LHtpZDoidnZjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6ImhoY3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0sbnVsbCx7aWQ6ImNhbGxnc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJ2aGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LHtpZDoiaHZjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfV0sbD1bbnVsbCxudWxsLG51bGwse2lkOiJhbmQiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LHtpZDoib3IiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LHtpZDoibm90IixtaW46MSxzdGFja0RlbHRhOjB9LG51bGwsbnVsbCxudWxsLHtpZDoiYWJzIixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiYWRkIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdK2VbdC0xXX19LHtpZDoic3ViIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdLWVbdC0xXX19LHtpZDoiZGl2IixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdL2VbdC0xXX19LG51bGwse2lkOiJuZWciLG1pbjoxLHN0YWNrRGVsdGE6MCxzdGFja0ZuKGUsdCl7ZVt0LTFdPS1lW3QtMV19fSx7aWQ6ImVxIixtaW46MixzdGFja0RlbHRhOi0xfSxudWxsLG51bGwse2lkOiJkcm9wIixtaW46MSxzdGFja0RlbHRhOi0xfSxudWxsLHtpZDoicHV0IixtaW46MixzdGFja0RlbHRhOi0yfSx7aWQ6ImdldCIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImlmZWxzZSIsbWluOjQsc3RhY2tEZWx0YTotM30se2lkOiJyYW5kb20iLG1pbjowLHN0YWNrRGVsdGE6MX0se2lkOiJtdWwiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbihlLHQpe2VbdC0yXT1lW3QtMl0qZVt0LTFdfX0sbnVsbCx7aWQ6InNxcnQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJkdXAiLG1pbjoxLHN0YWNrRGVsdGE6MX0se2lkOiJleGNoIixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoiaW5kZXgiLG1pbjoyLHN0YWNrRGVsdGE6MH0se2lkOiJyb2xsIixtaW46MyxzdGFja0RlbHRhOi0yfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhmbGV4IixtaW46NyxyZXNldFN0YWNrOiEwfSx7aWQ6ImZsZXgiLG1pbjoxMyxyZXNldFN0YWNrOiEwfSx7aWQ6ImhmbGV4MSIsbWluOjkscmVzZXRTdGFjazohMH0se2lkOiJmbGV4MSIsbWluOjExLHJlc2V0U3RhY2s6ITB9XTt0LkNGRlBhcnNlcj1jbGFzcyBDRkZQYXJzZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuYnl0ZXM9ZS5nZXRCeXRlcygpO3RoaXMucHJvcGVydGllcz10O3RoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWF9cGFyc2UoKXtjb25zdCBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBDRkY7dGhpcy5jZmY9dDtjb25zdCBhPXRoaXMucGFyc2VIZWFkZXIoKSxyPXRoaXMucGFyc2VJbmRleChhLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoci5lbmRQb3MpLG49dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksbz10aGlzLnBhcnNlRGljdChpLm9iai5nZXQoMCkpLGM9dGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3Qsbyx0LnN0cmluZ3MpO3QuaGVhZGVyPWEub2JqO3QubmFtZXM9dGhpcy5wYXJzZU5hbWVJbmRleChyLm9iaik7dC5zdHJpbmdzPXRoaXMucGFyc2VTdHJpbmdJbmRleChuLm9iaik7dC50b3BEaWN0PWM7dC5nbG9iYWxTdWJySW5kZXg9cy5vYmo7dGhpcy5wYXJzZVByaXZhdGVEaWN0KHQudG9wRGljdCk7dC5pc0NJREZvbnQ9Yy5oYXNOYW1lKCJST1MiKTtjb25zdCBsPWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGg9dGhpcy5wYXJzZUluZGV4KGwpLm9iaix1PWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7dSYmKGUuZm9udE1hdHJpeD11KTtjb25zdCBkPWMuZ2V0QnlOYW1lKCJGb250QkJveCIpO2lmKGQpe2UuYXNjZW50PU1hdGgubWF4KGRbM10sZFsxXSk7ZS5kZXNjZW50PU1hdGgubWluKGRbMV0sZFszXSk7ZS5hc2NlbnRTY2FsZWQ9ITB9bGV0IGYsZztpZih0LmlzQ0lERm9udCl7Y29uc3QgZT10aGlzLnBhcnNlSW5kZXgoYy5nZXRCeU5hbWUoIkZEQXJyYXkiKSkub2JqO2ZvcihsZXQgYT0wLHI9ZS5jb3VudDthPHI7KythKXtjb25zdCByPWUuZ2V0KGEpLGk9dGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3QsdGhpcy5wYXJzZURpY3QociksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoaSk7dC5mZEFycmF5LnB1c2goaSl9Zz1udWxsO2Y9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksaC5jb3VudCx0LnN0cmluZ3MsITApO3QuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGguY291bnQpfWVsc2V7Zj10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxoLmNvdW50LHQuc3RyaW5ncywhMSk7Zz10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsZi5jaGFyc2V0KX10LmNoYXJzZXQ9Zjt0LmVuY29kaW5nPWc7Y29uc3QgcD10aGlzLnBhcnNlQ2hhclN0cmluZ3Moe2NoYXJTdHJpbmdzOmgsbG9jYWxTdWJySW5kZXg6Yy5wcml2YXRlRGljdC5zdWJyc0luZGV4LGdsb2JhbFN1YnJJbmRleDpzLm9iaixmZFNlbGVjdDp0LmZkU2VsZWN0LGZkQXJyYXk6dC5mZEFycmF5LHByaXZhdGVEaWN0OmMucHJpdmF0ZURpY3R9KTt0LmNoYXJTdHJpbmdzPXAuY2hhclN0cmluZ3M7dC5zZWFjcz1wLnNlYWNzO3Qud2lkdGhzPXAud2lkdGhzO3JldHVybiB0fXBhcnNlSGVhZGVyKCl7bGV0IGU9dGhpcy5ieXRlcztjb25zdCB0PWUubGVuZ3RoO2xldCBhPTA7Zm9yKDthPHQmJjEhPT1lW2FdOykrK2E7aWYoYT49dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBDRkYgaGVhZGVyIik7aWYoMCE9PWEpeygwLHIuaW5mbykoImNmZiBkYXRhIGlzIHNoaWZ0ZWQiKTtlPWUuc3ViYXJyYXkoYSk7dGhpcy5ieXRlcz1lfWNvbnN0IGk9ZVswXSxuPWVbMV0scz1lWzJdLG89ZVszXTtyZXR1cm57b2JqOm5ldyBDRkZIZWFkZXIoaSxuLHMsbyksZW5kUG9zOnN9fXBhcnNlRGljdChlKXtsZXQgdD0wO2Z1bmN0aW9uIHBhcnNlT3BlcmFuZCgpe2xldCBhPWVbdCsrXTtpZigzMD09PWEpcmV0dXJuIGZ1bmN0aW9uIHBhcnNlRmxvYXRPcGVyYW5kKCl7bGV0IGE9IiI7Y29uc3Qgcj0xNSxpPVsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIi4iLCJFIiwiRS0iLG51bGwsIi0iXSxuPWUubGVuZ3RoO2Zvcig7dDxuOyl7Y29uc3Qgbj1lW3QrK10scz1uPj40LG89MTUmbjtpZihzPT09cilicmVhazthKz1pW3NdO2lmKG89PT1yKWJyZWFrO2ErPWlbb119cmV0dXJuIHBhcnNlRmxvYXQoYSl9KCk7aWYoMjg9PT1hKXthPWVbdCsrXTthPShhPDwyNHxlW3QrK108PDE2KT4+MTY7cmV0dXJuIGF9aWYoMjk9PT1hKXthPWVbdCsrXTthPWE8PDh8ZVt0KytdO2E9YTw8OHxlW3QrK107YT1hPDw4fGVbdCsrXTtyZXR1cm4gYX1pZihhPj0zMiYmYTw9MjQ2KXJldHVybiBhLTEzOTtpZihhPj0yNDcmJmE8PTI1MClyZXR1cm4gMjU2KihhLTI0NykrZVt0KytdKzEwODtpZihhPj0yNTEmJmE8PTI1NClyZXR1cm4tMjU2KihhLTI1MSktZVt0KytdLTEwODsoMCxyLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJythKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKTtyZXR1cm4gTmFOfWxldCBhPVtdO2NvbnN0IGk9W107dD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKDt0PG47KXtsZXQgcj1lW3RdO2lmKHI8PTIxKXsxMj09PXImJihyPXI8PDh8ZVsrK3RdKTtpLnB1c2goW3IsYV0pO2E9W107Kyt0fWVsc2UgYS5wdXNoKHBhcnNlT3BlcmFuZCgpKX1yZXR1cm4gaX1wYXJzZUluZGV4KGUpe2NvbnN0IHQ9bmV3IENGRkluZGV4LGE9dGhpcy5ieXRlcyxyPWFbZSsrXTw8OHxhW2UrK10saT1bXTtsZXQgbixzLG89ZTtpZigwIT09cil7Y29uc3QgdD1hW2UrK10sYz1lKyhyKzEpKnQtMTtmb3Iobj0wLHM9cisxO248czsrK24pe2xldCByPTA7Zm9yKGxldCBpPTA7aTx0OysraSl7cjw8PTg7cis9YVtlKytdfWkucHVzaChjK3IpfW89aVtyXX1mb3Iobj0wLHM9aS5sZW5ndGgtMTtuPHM7KytuKXtjb25zdCBlPWlbbl0scj1pW24rMV07dC5hZGQoYS5zdWJhcnJheShlLHIpKX1yZXR1cm57b2JqOnQsZW5kUG9zOm99fXBhcnNlTmFtZUluZGV4KGUpe2NvbnN0IHQ9W107Zm9yKGxldCBhPTAsaT1lLmNvdW50O2E8aTsrK2Epe2NvbnN0IGk9ZS5nZXQoYSk7dC5wdXNoKCgwLHIuYnl0ZXNUb1N0cmluZykoaSkpfXJldHVybiB0fXBhcnNlU3RyaW5nSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGU3RyaW5ncztmb3IobGV0IGE9MCxpPWUuY291bnQ7YTxpOysrYSl7Y29uc3QgaT1lLmdldChhKTt0LmFkZCgoMCxyLmJ5dGVzVG9TdHJpbmcpKGkpKX1yZXR1cm4gdH1jcmVhdGVEaWN0KGUsdCxhKXtjb25zdCByPW5ldyBlKGEpO2Zvcihjb25zdFtlLGFdb2YgdClyLnNldEJ5S2V5KGUsYSk7cmV0dXJuIHJ9cGFyc2VDaGFyU3RyaW5nKGUsdCxhLGkpe2lmKCF0fHxlLmNhbGxEZXB0aD4xMClyZXR1cm4hMTtsZXQgbj1lLnN0YWNrU2l6ZTtjb25zdCBzPWUuc3RhY2s7bGV0IG89dC5sZW5ndGg7Zm9yKGxldCBoPTA7aDxvOyl7Y29uc3QgdT10W2grK107bGV0IGQ9bnVsbDtpZigxMj09PXUpe2NvbnN0IGU9dFtoKytdO2lmKDA9PT1lKXt0W2gtMl09MTM5O3RbaC0xXT0yMjtuPTB9ZWxzZSBkPWxbZV19ZWxzZSBpZigyOD09PXUpe3Nbbl09KHRbaF08PDI0fHRbaCsxXTw8MTYpPj4xNjtoKz0yO24rK31lbHNlIGlmKDE0PT09dSl7aWYobj49NCl7bi09NDtpZih0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpe2Uuc2VhYz1zLnNsaWNlKG4sbis0KTtyZXR1cm4hMX19ZD1jW3VdfWVsc2UgaWYodT49MzImJnU8PTI0Nil7c1tuXT11LTEzOTtuKyt9ZWxzZSBpZih1Pj0yNDcmJnU8PTI1NCl7c1tuXT11PDI1MT8odS0yNDc8PDgpK3RbaF0rMTA4Oi0odS0yNTE8PDgpLXRbaF0tMTA4O2grKztuKyt9ZWxzZSBpZigyNTU9PT11KXtzW25dPSh0W2hdPDwyNHx0W2grMV08PDE2fHRbaCsyXTw8OHx0W2grM10pLzY1NTM2O2grPTQ7bisrfWVsc2UgaWYoMTk9PT11fHwyMD09PXUpe2UuaGludHMrPW4+PjE7aWYoMD09PWUuaGludHMpe3QuY29weVdpdGhpbihoLTEsaCwtMSk7aC09MTtvLT0xO2NvbnRpbnVlfWgrPWUuaGludHMrNz4+MztuJT0yO2Q9Y1t1XX1lbHNle2lmKDEwPT09dXx8Mjk9PT11KXtsZXQgdDt0PTEwPT09dT9hOmk7aWYoIXQpe2Q9Y1t1XTsoMCxyLndhcm4pKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrZC5pZCk7cmV0dXJuITF9bGV0IG89MzI3Njg7dC5jb3VudDwxMjQwP289MTA3OnQuY291bnQ8MzM5MDAmJihvPTExMzEpO2NvbnN0IGw9c1stLW5dK287aWYobDwwfHxsPj10LmNvdW50fHxpc05hTihsKSl7ZD1jW3VdOygwLHIud2FybikoIk91dCBvZiBib3VuZHMgc3VickluZGV4IGZvciAiK2QuaWQpO3JldHVybiExfWUuc3RhY2tTaXplPW47ZS5jYWxsRGVwdGgrKztpZighdGhpcy5wYXJzZUNoYXJTdHJpbmcoZSx0LmdldChsKSxhLGkpKXJldHVybiExO2UuY2FsbERlcHRoLS07bj1lLnN0YWNrU2l6ZTtjb250aW51ZX1pZigxMT09PXUpe2Uuc3RhY2tTaXplPW47cmV0dXJuITB9aWYoMD09PXUmJmg9PT10Lmxlbmd0aCl7dFtoLTFdPTE0O2Q9Y1sxNF19ZWxzZXtpZig5PT09dSl7dC5jb3B5V2l0aGluKGgtMSxoLC0xKTtoLT0xO28tPTE7Y29udGludWV9ZD1jW3VdfX1pZihkKXtpZihkLnN0ZW0pe2UuaGludHMrPW4+PjE7aWYoMz09PXV8fDIzPT09dSllLmhhc1ZTdGVtcz0hMDtlbHNlIGlmKGUuaGFzVlN0ZW1zJiYoMT09PXV8fDE4PT09dSkpeygwLHIud2FybikoIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlciIpO3RbaC0xXT0xPT09dT8zOjIzfX1pZigibWluImluIGQmJiFlLnVuZGVmU3RhY2smJm48ZC5taW4peygwLHIud2FybikoIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIitkLmlkKyI7IGFjdHVhbDogIituKyIsIGV4cGVjdGVkOiAiK2QubWluKTtpZigwPT09bil7dFtoLTFdPTE0O3JldHVybiEwfXJldHVybiExfWlmKGUuZmlyc3RTdGFja0NsZWFyaW5nJiZkLnN0YWNrQ2xlYXJpbmcpe2UuZmlyc3RTdGFja0NsZWFyaW5nPSExO24tPWQubWluO24+PTImJmQuc3RlbT9uJT0yOm4+MSYmKDAsci53YXJuKSgiRm91bmQgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3Igc3RhY2stY2xlYXJpbmcgY29tbWFuZCIpO24+MCYmKGUud2lkdGg9c1tuLTFdKX1pZigic3RhY2tEZWx0YSJpbiBkKXsic3RhY2tGbiJpbiBkJiZkLnN0YWNrRm4ocyxuKTtuKz1kLnN0YWNrRGVsdGF9ZWxzZSBpZihkLnN0YWNrQ2xlYXJpbmcpbj0wO2Vsc2UgaWYoZC5yZXNldFN0YWNrKXtuPTA7ZS51bmRlZlN0YWNrPSExfWVsc2UgaWYoZC51bmRlZlN0YWNrKXtuPTA7ZS51bmRlZlN0YWNrPSEwO2UuZmlyc3RTdGFja0NsZWFyaW5nPSExfX19bzx0Lmxlbmd0aCYmdC5maWxsKDE0LG8pO2Uuc3RhY2tTaXplPW47cmV0dXJuITB9cGFyc2VDaGFyU3RyaW5ncyh7Y2hhclN0cmluZ3M6ZSxsb2NhbFN1YnJJbmRleDp0LGdsb2JhbFN1YnJJbmRleDphLGZkU2VsZWN0OmksZmRBcnJheTpuLHByaXZhdGVEaWN0OnN9KXtjb25zdCBvPVtdLGM9W10sbD1lLmNvdW50O2ZvcihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGw9ZS5nZXQoaCksdT17Y2FsbERlcHRoOjAsc3RhY2tTaXplOjAsc3RhY2s6W10sdW5kZWZTdGFjazohMCxoaW50czowLGZpcnN0U3RhY2tDbGVhcmluZzohMCxzZWFjOm51bGwsd2lkdGg6bnVsbCxoYXNWU3RlbXM6ITF9O2xldCBkPSEwLGY9bnVsbCxnPXM7aWYoaSYmbi5sZW5ndGgpe2NvbnN0IGU9aS5nZXRGREluZGV4KGgpO2lmKC0xPT09ZSl7KDAsci53YXJuKSgiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKTtkPSExfWlmKGU+PW4ubGVuZ3RoKXsoMCxyLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKTtkPSExfWlmKGQpe2c9bltlXS5wcml2YXRlRGljdDtmPWcuc3VicnNJbmRleH19ZWxzZSB0JiYoZj10KTtkJiYoZD10aGlzLnBhcnNlQ2hhclN0cmluZyh1LGwsZixhKSk7aWYobnVsbCE9PXUud2lkdGgpe2NvbnN0IGU9Zy5nZXRCeU5hbWUoIm5vbWluYWxXaWR0aFgiKTtjW2hdPWUrdS53aWR0aH1lbHNle2NvbnN0IGU9Zy5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTtjW2hdPWV9bnVsbCE9PXUuc2VhYyYmKG9baF09dS5zZWFjKTtkfHxlLnNldChoLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6ZSxzZWFjczpvLHdpZHRoczpjfX1lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSk7ZS5wcml2YXRlRGljdD10fXBhcnNlUHJpdmF0ZURpY3QoZSl7aWYoIWUuaGFzTmFtZSgiUHJpdmF0ZSIpKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IHQ9ZS5nZXRCeU5hbWUoIlByaXZhdGUiKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RoKXtlLnJlbW92ZUJ5TmFtZSgiUHJpdmF0ZSIpO3JldHVybn1jb25zdCBhPXRbMF0scj10WzFdO2lmKDA9PT1hfHxyPj10aGlzLmJ5dGVzLmxlbmd0aCl7dGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO3JldHVybn1jb25zdCBpPXIrYSxuPXRoaXMuYnl0ZXMuc3ViYXJyYXkocixpKSxzPXRoaXMucGFyc2VEaWN0KG4pLG89dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LHMsZS5zdHJpbmdzKTtlLnByaXZhdGVEaWN0PW87MD09PW8uZ2V0QnlOYW1lKCJFeHBhbnNpb25GYWN0b3IiKSYmby5zZXRCeU5hbWUoIkV4cGFuc2lvbkZhY3RvciIsLjA2KTtpZighby5nZXRCeU5hbWUoIlN1YnJzIikpcmV0dXJuO2NvbnN0IGM9by5nZXRCeU5hbWUoIlN1YnJzIiksbD1yK2M7aWYoMD09PWN8fGw+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IGg9dGhpcy5wYXJzZUluZGV4KGwpO28uc3VicnNJbmRleD1oLm9ian1wYXJzZUNoYXJzZXRzKGUsdCxhLG4pe2lmKDA9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxkLklTT19BRE9CRSxpLklTT0Fkb2JlQ2hhcnNldCk7aWYoMT09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJULGkuRXhwZXJ0Q2hhcnNldCk7aWYoMj09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJUX1NVQlNFVCxpLkV4cGVydFN1YnNldENoYXJzZXQpO2NvbnN0IHM9dGhpcy5ieXRlcyxvPWUsYz1zW2UrK10sbD1bbj8wOiIubm90ZGVmIl07bGV0IGgsdSxmO3QtPTE7c3dpdGNoKGMpe2Nhc2UgMDpmb3IoZj0wO2Y8dDtmKyspe2g9c1tlKytdPDw4fHNbZSsrXTtsLnB1c2gobj9oOmEuZ2V0KGgpKX1icmVhaztjYXNlIDE6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTtmb3IoZj0wO2Y8PXU7ZisrKWwucHVzaChuP2grKzphLmdldChoKyspKX1icmVhaztjYXNlIDI6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTw8OHxzW2UrK107Zm9yKGY9MDtmPD11O2YrKylsLnB1c2gobj9oKys6YS5nZXQoaCsrKSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biBjaGFyc2V0IGZvcm1hdCIpfWNvbnN0IGc9ZSxwPXMuc3ViYXJyYXkobyxnKTtyZXR1cm4gbmV3IENGRkNoYXJzZXQoITEsYyxsLHApfXBhcnNlRW5jb2RpbmcoZSx0LGEsaSl7Y29uc3Qgcz1PYmplY3QuY3JlYXRlKG51bGwpLG89dGhpcy5ieXRlcztsZXQgYyxsLGgsdT0hMSxkPW51bGw7aWYoMD09PWV8fDE9PT1lKXt1PSEwO2M9ZTtjb25zdCB0PWU/bi5FeHBlcnRFbmNvZGluZzpuLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKGw9MCxoPWkubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9dC5pbmRleE9mKGlbbF0pOy0xIT09ZSYmKHNbZV09bCl9fWVsc2V7Y29uc3QgdD1lO2M9b1tlKytdO3N3aXRjaCgxMjcmYyl7Y2FzZSAwOmNvbnN0IHQ9b1tlKytdO2ZvcihsPTE7bDw9dDtsKyspc1tvW2UrK11dPWw7YnJlYWs7Y2FzZSAxOmNvbnN0IGE9b1tlKytdO2xldCBpPTE7Zm9yKGw9MDtsPGE7bCsrKXtjb25zdCB0PW9bZSsrXSxhPW9bZSsrXTtmb3IobGV0IGU9dDtlPD10K2E7ZSsrKXNbZV09aSsrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke2N9IGluIENGRmApfWNvbnN0IG49ZTtpZigxMjgmYyl7b1t0XSY9MTI3OyFmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpe2NvbnN0IHQ9b1tlKytdO2ZvcihsPTA7bDx0O2wrKyl7Y29uc3QgdD1vW2UrK10scj0ob1tlKytdPDw4KSsoMjU1Jm9bZSsrXSk7c1t0XT1pLmluZGV4T2YoYS5nZXQocikpfX0oKX1kPW8uc3ViYXJyYXkodCxuKX1jJj0xMjc7cmV0dXJuIG5ldyBDRkZFbmNvZGluZyh1LGMscyxkKX1wYXJzZUZEU2VsZWN0KGUsdCl7Y29uc3QgYT10aGlzLmJ5dGVzLGk9YVtlKytdLG49W107bGV0IHM7c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocz0wO3M8dDsrK3Mpe2NvbnN0IHQ9YVtlKytdO24ucHVzaCh0KX1icmVhaztjYXNlIDM6Y29uc3Qgbz1hW2UrK108PDh8YVtlKytdO2ZvcihzPTA7czxvOysrcyl7bGV0IHQ9YVtlKytdPDw4fGFbZSsrXTtpZigwPT09cyYmMCE9PXQpeygwLHIud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKTt0PTB9Y29uc3QgaT1hW2UrK10sbz1hW2VdPDw4fGFbZSsxXTtmb3IobGV0IGU9dDtlPG87KytlKW4ucHVzaChpKX1lKz0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0ICIke2l9Ii5gKX1pZihuLmxlbmd0aCE9PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInBhcnNlRkRTZWxlY3Q6IEludmFsaWQgZm9udCBkYXRhLiIpO3JldHVybiBuZXcgQ0ZGRkRTZWxlY3QoaSxuKX19O2NsYXNzIENGRntjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZGVyPW51bGw7dGhpcy5uYW1lcz1bXTt0aGlzLnRvcERpY3Q9bnVsbDt0aGlzLnN0cmluZ3M9bmV3IENGRlN0cmluZ3M7dGhpcy5nbG9iYWxTdWJySW5kZXg9bnVsbDt0aGlzLmVuY29kaW5nPW51bGw7dGhpcy5jaGFyc2V0PW51bGw7dGhpcy5jaGFyU3RyaW5ncz1udWxsO3RoaXMuZmRBcnJheT1bXTt0aGlzLmZkU2VsZWN0PW51bGw7dGhpcy5pc0NJREZvbnQ9ITF9ZHVwbGljYXRlRmlyc3RHbHlwaCgpe2lmKHRoaXMuY2hhclN0cmluZ3MuY291bnQ+PTY1NTM1KXsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKTtyZXR1cm59Y29uc3QgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKTt0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KXJldHVybiExO3JldHVybiB0aGlzLmNoYXJTdHJpbmdzLmdldChlKS5sZW5ndGg+MH19dC5DRkY9Q0ZGO2NsYXNzIENGRkhlYWRlcntjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLm1ham9yPWU7dGhpcy5taW5vcj10O3RoaXMuaGRyU2l6ZT1hO3RoaXMub2ZmU2l6ZT1yfX10LkNGRkhlYWRlcj1DRkZIZWFkZXI7Y2xhc3MgQ0ZGU3RyaW5nc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyaW5ncz1bXX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8PTM5MD9zW2VdOmUtbzw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS1vXTpzWzBdfWdldFNJRChlKXtsZXQgdD1zLmluZGV4T2YoZSk7aWYoLTEhPT10KXJldHVybiB0O3Q9dGhpcy5zdHJpbmdzLmluZGV4T2YoZSk7cmV0dXJuLTEhPT10P3QrbzotMX1hZGQoZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fXQuQ0ZGU3RyaW5ncz1DRkZTdHJpbmdzO2NsYXNzIENGRkluZGV4e2NvbnN0cnVjdG9yKCl7dGhpcy5vYmplY3RzPVtdO3RoaXMubGVuZ3RoPTB9YWRkKGUpe3RoaXMubGVuZ3RoKz1lLmxlbmd0aDt0aGlzLm9iamVjdHMucHVzaChlKX1zZXQoZSx0KXt0aGlzLmxlbmd0aCs9dC5sZW5ndGgtdGhpcy5vYmplY3RzW2VdLmxlbmd0aDt0aGlzLm9iamVjdHNbZV09dH1nZXQoZSl7cmV0dXJuIHRoaXMub2JqZWN0c1tlXX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5vYmplY3RzLmxlbmd0aH19dC5DRkZJbmRleD1DRkZJbmRleDtjbGFzcyBDRkZEaWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5rZXlUb05hbWVNYXA9ZS5rZXlUb05hbWVNYXA7dGhpcy5uYW1lVG9LZXlNYXA9ZS5uYW1lVG9LZXlNYXA7dGhpcy5kZWZhdWx0cz1lLmRlZmF1bHRzO3RoaXMudHlwZXM9ZS50eXBlczt0aGlzLm9wY29kZXM9ZS5vcGNvZGVzO3RoaXMub3JkZXI9ZS5vcmRlcjt0aGlzLnN0cmluZ3M9dDt0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXNldEJ5S2V5KGUsdCl7aWYoIShlIGluIHRoaXMua2V5VG9OYW1lTWFwKSlyZXR1cm4hMTtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0IGEgb2YgdClpZihpc05hTihhKSl7KDAsci53YXJuKShgSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJHt0fSIgZm9yIGtleSAiJHtlfSIuYCk7cmV0dXJuITB9Y29uc3QgYT10aGlzLnR5cGVzW2VdOyJudW0iIT09YSYmInNpZCIhPT1hJiYib2Zmc2V0IiE9PWF8fCh0PXRbMF0pO3RoaXMudmFsdWVzW2VdPXQ7cmV0dXJuITB9c2V0QnlOYW1lKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIiR7ZX0iYCk7dGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dPXR9aGFzTmFtZShlKXtyZXR1cm4gdGhpcy5uYW1lVG9LZXlNYXBbZV1pbiB0aGlzLnZhbHVlc31nZXRCeU5hbWUoZSl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgJHtlfSJgKTtjb25zdCB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19cmVtb3ZlQnlOYW1lKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19c3RhdGljIGNyZWF0ZVRhYmxlcyhlKXtjb25zdCB0PXtrZXlUb05hbWVNYXA6e30sbmFtZVRvS2V5TWFwOnt9LGRlZmF1bHRzOnt9LHR5cGVzOnt9LG9wY29kZXM6e30sb3JkZXI6W119O2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Qua2V5VG9OYW1lTWFwW2VdPWFbMV07dC5uYW1lVG9LZXlNYXBbYVsxXV09ZTt0LnR5cGVzW2VdPWFbMl07dC5kZWZhdWx0c1tlXT1hWzNdO3Qub3Bjb2Rlc1tlXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dO3Qub3JkZXIucHVzaChlKX1yZXR1cm4gdH19Y29uc3QgaD1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dO2NsYXNzIENGRlRvcERpY3QgZXh0ZW5kcyBDRkZEaWN0e3N0YXRpYyBnZXQgdGFibGVzKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInRhYmxlcyIsdGhpcy5jcmVhdGVUYWJsZXMoaCkpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKENGRlRvcERpY3QudGFibGVzLGUpO3RoaXMucHJpdmF0ZURpY3Q9bnVsbH19dC5DRkZUb3BEaWN0PUNGRlRvcERpY3Q7Y29uc3QgdT1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dO2NsYXNzIENGRlByaXZhdGVEaWN0IGV4dGVuZHMgQ0ZGRGljdHtzdGF0aWMgZ2V0IHRhYmxlcygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKHUpKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihDRkZQcml2YXRlRGljdC50YWJsZXMsZSk7dGhpcy5zdWJyc0luZGV4PW51bGx9fXQuQ0ZGUHJpdmF0ZURpY3Q9Q0ZGUHJpdmF0ZURpY3Q7Y29uc3QgZD17SVNPX0FET0JFOjAsRVhQRVJUOjEsRVhQRVJUX1NVQlNFVDoyfTtjbGFzcyBDRkZDaGFyc2V0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5jaGFyc2V0PWE7dGhpcy5yYXc9cn19dC5DRkZDaGFyc2V0PUNGRkNoYXJzZXQ7Y2xhc3MgQ0ZGRW5jb2Rpbmd7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5wcmVkZWZpbmVkPWU7dGhpcy5mb3JtYXQ9dDt0aGlzLmVuY29kaW5nPWE7dGhpcy5yYXc9cn19Y2xhc3MgQ0ZGRkRTZWxlY3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZvcm1hdD1lO3RoaXMuZmRTZWxlY3Q9dH1nZXRGREluZGV4KGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fXQuQ0ZGRkRTZWxlY3Q9Q0ZGRkRTZWxlY3Q7Y2xhc3MgQ0ZGT2Zmc2V0VHJhY2tlcntjb25zdHJ1Y3Rvcigpe3RoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfWlzVHJhY2tpbmcoZSl7cmV0dXJuIGUgaW4gdGhpcy5vZmZzZXRzfXRyYWNrKGUsdCl7aWYoZSBpbiB0aGlzLm9mZnNldHMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO3RoaXMub2Zmc2V0c1tlXT10fW9mZnNldChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfXNldEVudHJ5TG9jYXRpb24oZSx0LGEpe2lmKCEoZSBpbiB0aGlzLm9mZnNldHMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBOb3QgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO2NvbnN0IGk9YS5kYXRhLG49dGhpcy5vZmZzZXRzW2VdO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhOysrZSl7Y29uc3QgYT01KmUrbixzPWErMSxvPWErMixjPWErMyxsPWErNDtpZigyOSE9PWlbYV18fDAhPT1pW3NdfHwwIT09aVtvXXx8MCE9PWlbY118fDAhPT1pW2xdKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO2NvbnN0IGg9dFtlXTtpW2FdPTI5O2lbc109aD4+MjQmMjU1O2lbb109aD4+MTYmMjU1O2lbY109aD4+OCYyNTU7aVtsXT0yNTUmaH19fWNsYXNzIENGRkNvbXBpbGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuY2ZmPWV9Y29tcGlsZSgpe2NvbnN0IGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQoZSl7ZS5sZW5ndGg8PTY1NTM2P3RoaXMuZGF0YS5wdXNoKC4uLmUpOnRoaXMuZGF0YT10aGlzLmRhdGEuY29uY2F0KGUpO3RoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGh9fSxhPXRoaXMuY29tcGlsZUhlYWRlcihlLmhlYWRlcik7dC5hZGQoYSk7Y29uc3QgaT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7dC5hZGQoaSk7aWYoZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe2NvbnN0IHQ9ZS50b3BEaWN0LmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpO2UudG9wRGljdC5yZW1vdmVCeU5hbWUoIkZvbnRNYXRyaXgiKTtmb3IoY29uc3QgYSBvZiBlLmZkQXJyYXkpe2xldCBlPXQuc2xpY2UoMCk7YS5oYXNOYW1lKCJGb250TWF0cml4IikmJihlPXIuVXRpbC50cmFuc2Zvcm0oZSxhLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpKSk7YS5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLGUpfX1jb25zdCBuPWUudG9wRGljdC5nZXRCeU5hbWUoIlhVSUQiKTtuPy5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKTtlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTtsZXQgcz10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQocy5vdXRwdXQpO2NvbnN0IG89cy50cmFja2Vyc1swXSxjPXRoaXMuY29tcGlsZVN0cmluZ0luZGV4KGUuc3RyaW5ncy5zdHJpbmdzKTt0LmFkZChjKTtjb25zdCBsPXRoaXMuY29tcGlsZUluZGV4KGUuZ2xvYmFsU3VickluZGV4KTt0LmFkZChsKTtpZihlLmVuY29kaW5nJiZlLnRvcERpY3QuaGFzTmFtZSgiRW5jb2RpbmciKSlpZihlLmVuY29kaW5nLnByZWRlZmluZWQpby5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW2UuZW5jb2RpbmcuZm9ybWF0XSx0KTtlbHNle2NvbnN0IGE9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7by5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KTt0LmFkZChhKX1jb25zdCBoPXRoaXMuY29tcGlsZUNoYXJzZXQoZS5jaGFyc2V0LGUuY2hhclN0cmluZ3MuY291bnQsZS5zdHJpbmdzLGUuaXNDSURGb250KTtvLnNldEVudHJ5TG9jYXRpb24oImNoYXJzZXQiLFt0Lmxlbmd0aF0sdCk7dC5hZGQoaCk7Y29uc3QgdT10aGlzLmNvbXBpbGVDaGFyU3RyaW5ncyhlLmNoYXJTdHJpbmdzKTtvLnNldEVudHJ5TG9jYXRpb24oIkNoYXJTdHJpbmdzIixbdC5sZW5ndGhdLHQpO3QuYWRkKHUpO2lmKGUuaXNDSURGb250KXtvLnNldEVudHJ5TG9jYXRpb24oIkZEU2VsZWN0IixbdC5sZW5ndGhdLHQpO2NvbnN0IGE9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYSk7cz10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApO28uc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KTt0LmFkZChzLm91dHB1dCk7Y29uc3Qgcj1zLnRyYWNrZXJzO3RoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhlLmZkQXJyYXkscix0KX10aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2UudG9wRGljdF0sW29dLHQpO3QuYWRkKFswXSk7cmV0dXJuIHQuZGF0YX1lbmNvZGVOdW1iZXIoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSk/dGhpcy5lbmNvZGVJbnRlZ2VyKGUpOnRoaXMuZW5jb2RlRmxvYXQoZSl9c3RhdGljIGdldCBFbmNvZGVGbG9hdFJlZ0V4cCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfWVuY29kZUZsb2F0KGUpe2xldCB0PWUudG9TdHJpbmcoKTtjb25zdCBhPUNGRkNvbXBpbGVyLkVuY29kZUZsb2F0UmVnRXhwLmV4ZWModCk7aWYoYSl7Y29uc3Qgcj1wYXJzZUZsb2F0KCIxZSIrKChhWzJdPythWzJdOjApK2FbMV0ubGVuZ3RoKSk7dD0oTWF0aC5yb3VuZChlKnIpL3IpLnRvU3RyaW5nKCl9bGV0IHIsaSxuPSIiO2ZvcihyPTAsaT10Lmxlbmd0aDtyPGk7KytyKXtjb25zdCBlPXRbcl07bis9ImUiPT09ZT8iLSI9PT10Wysrcl0/ImMiOiJiIjoiLiI9PT1lPyJhIjoiLSI9PT1lPyJlIjplfW4rPTEmbi5sZW5ndGg/ImYiOiJmZiI7Y29uc3Qgcz1bMzBdO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cis9MilzLnB1c2gocGFyc2VJbnQobi5zdWJzdHJpbmcocixyKzIpLDE2KSk7cmV0dXJuIHN9ZW5jb2RlSW50ZWdlcihlKXtsZXQgdDt0PWU+PS0xMDcmJmU8PTEwNz9bZSsxMzldOmU+PTEwOCYmZTw9MTEzMT9bMjQ3KygoZS09MTA4KT4+OCksMjU1JmVdOmU+PS0xMTMxJiZlPD0tMTA4P1syNTErKChlPS1lLTEwOCk+PjgpLDI1NSZlXTplPj0tMzI3NjgmJmU8PTMyNzY3P1syOCxlPj44JjI1NSwyNTUmZV06WzI5LGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdO3JldHVybiB0fWNvbXBpbGVIZWFkZXIoZSl7cmV0dXJuW2UubWFqb3IsZS5taW5vciw0LGUub2ZmU2l6ZV19Y29tcGlsZU5hbWVJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPU1hdGgubWluKGEubGVuZ3RoLDEyNyk7bGV0IGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCBlPWFbdF07KGU8IiEifHxlPiJ+Inx8IlsiPT09ZXx8Il0iPT09ZXx8IigiPT09ZXx8IikiPT09ZXx8InsiPT09ZXx8In0iPT09ZXx8IjwiPT09ZXx8Ij4iPT09ZXx8Ii8iPT09ZXx8IiUiPT09ZSkmJihlPSJfIik7aVt0XT1lfWk9aS5qb2luKCIiKTsiIj09PWkmJihpPSJCYWRfRm9udF9OYW1lIik7dC5hZGQoKDAsci5zdHJpbmdUb0J5dGVzKShpKSl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfWNvbXBpbGVUb3BEaWN0cyhlLHQsYSl7Y29uc3Qgcj1bXTtsZXQgaT1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IG4gb2YgZSl7aWYoYSl7bi5yZW1vdmVCeU5hbWUoIkNJREZvbnRWZXJzaW9uIik7bi5yZW1vdmVCeU5hbWUoIkNJREZvbnRSZXZpc2lvbiIpO24ucmVtb3ZlQnlOYW1lKCJDSURGb250VHlwZSIpO24ucmVtb3ZlQnlOYW1lKCJDSURDb3VudCIpO24ucmVtb3ZlQnlOYW1lKCJVSURCYXNlIil9Y29uc3QgZT1uZXcgQ0ZGT2Zmc2V0VHJhY2tlcixzPXRoaXMuY29tcGlsZURpY3QobixlKTtyLnB1c2goZSk7aS5hZGQocyk7ZS5vZmZzZXQodCl9aT10aGlzLmNvbXBpbGVJbmRleChpLHIpO3JldHVybnt0cmFja2VyczpyLG91dHB1dDppfX1jb21waWxlUHJpdmF0ZURpY3RzKGUsdCxhKXtmb3IobGV0IGk9MCxuPWUubGVuZ3RoO2k8bjsrK2kpe2NvbnN0IG49ZVtpXSxzPW4ucHJpdmF0ZURpY3Q7aWYoIXN8fCFuLmhhc05hbWUoIlByaXZhdGUiKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVGhlcmUgbXVzdCBiZSBhIHByaXZhdGUgZGljdGlvbmFyeS4iKTtjb25zdCBvPW5ldyBDRkZPZmZzZXRUcmFja2VyLGM9dGhpcy5jb21waWxlRGljdChzLG8pO2xldCBsPWEubGVuZ3RoO28ub2Zmc2V0KGwpO2MubGVuZ3RofHwobD0wKTt0W2ldLnNldEVudHJ5TG9jYXRpb24oIlByaXZhdGUiLFtjLmxlbmd0aCxsXSxhKTthLmFkZChjKTtpZihzLnN1YnJzSW5kZXgmJnMuaGFzTmFtZSgiU3VicnMiKSl7Y29uc3QgZT10aGlzLmNvbXBpbGVJbmRleChzLnN1YnJzSW5kZXgpO28uc2V0RW50cnlMb2NhdGlvbigiU3VicnMiLFtjLmxlbmd0aF0sYSk7YS5hZGQoZSl9fX1jb21waWxlRGljdChlLHQpe2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgZS5vcmRlcil7aWYoIShpIGluIGUudmFsdWVzKSljb250aW51ZTtsZXQgbj1lLnZhbHVlc1tpXSxzPWUudHlwZXNbaV07QXJyYXkuaXNBcnJheShzKXx8KHM9W3NdKTtBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pO2lmKDAhPT1uLmxlbmd0aCl7Zm9yKGxldCBvPTAsYz1zLmxlbmd0aDtvPGM7KytvKXtjb25zdCBjPXNbb10sbD1uW29dO3N3aXRjaChjKXtjYXNlIm51bSI6Y2FzZSJzaWQiOmEucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihsKSk7YnJlYWs7Y2FzZSJvZmZzZXQiOmNvbnN0IHM9ZS5rZXlUb05hbWVNYXBbaV07dC5pc1RyYWNraW5nKHMpfHx0LnRyYWNrKHMsYS5sZW5ndGgpO2EucHVzaCgyOSwwLDAsMCwwKTticmVhaztjYXNlImFycmF5IjpjYXNlImRlbHRhIjphLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIobCkpO2ZvcihsZXQgZT0xLHQ9bi5sZW5ndGg7ZTx0OysrZSlhLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIobltlXSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gZGF0YSB0eXBlIG9mICR7Y31gKX19YS5wdXNoKC4uLmUub3Bjb2Rlc1tpXSl9fXJldHVybiBhfWNvbXBpbGVTdHJpbmdJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IoY29uc3QgYSBvZiBlKXQuYWRkKCgwLHIuc3RyaW5nVG9CeXRlcykoYSkpO3JldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlQ2hhclN0cmluZ3MoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGxldCBhPTA7YTxlLmNvdW50O2ErKyl7Y29uc3Qgcj1lLmdldChhKTswIT09ci5sZW5ndGg/dC5hZGQocik6dC5hZGQobmV3IFVpbnQ4QXJyYXkoWzEzOSwxNF0pKX1yZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJzZXQoZSx0LGEsaSl7bGV0IG47Y29uc3Qgcz10LTE7aWYoaSluPW5ldyBVaW50OEFycmF5KFsyLDAsMCxzPj44JjI1NSwyNTUmc10pO2Vsc2V7bj1uZXcgVWludDhBcnJheSgxKzIqcyk7blswXT0wO2xldCB0PTA7Y29uc3QgaT1lLmNoYXJzZXQubGVuZ3RoO2xldCBvPSExO2ZvcihsZXQgcz0xO3M8bi5sZW5ndGg7cys9Mil7bGV0IGM9MDtpZih0PGkpe2NvbnN0IGk9ZS5jaGFyc2V0W3QrK107Yz1hLmdldFNJRChpKTtpZigtMT09PWMpe2M9MDtpZighbyl7bz0hMDsoMCxyLndhcm4pKGBDb3VsZG4ndCBmaW5kICR7aX0gaW4gQ0ZGIHN0cmluZ3NgKX19fW5bc109Yz4+OCYyNTU7bltzKzFdPTI1NSZjfX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShuKX1jb21waWxlRW5jb2RpbmcoZSl7cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZS5yYXcpfWNvbXBpbGVGRFNlbGVjdChlKXtjb25zdCB0PWUuZm9ybWF0O2xldCBhLHI7c3dpdGNoKHQpe2Nhc2UgMDphPW5ldyBVaW50OEFycmF5KDErZS5mZFNlbGVjdC5sZW5ndGgpO2FbMF09dDtmb3Iocj0wO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKWFbcisxXT1lLmZkU2VsZWN0W3JdO2JyZWFrO2Nhc2UgMzpjb25zdCBpPTA7bGV0IG49ZS5mZFNlbGVjdFswXTtjb25zdCBzPVt0LDAsMCxpPj44JjI1NSwyNTUmaSxuXTtmb3Iocj0xO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXtjb25zdCB0PWUuZmRTZWxlY3Rbcl07aWYodCE9PW4pe3MucHVzaChyPj44JjI1NSwyNTUmcix0KTtuPXR9fWNvbnN0IG89KHMubGVuZ3RoLTMpLzM7c1sxXT1vPj44JjI1NTtzWzJdPTI1NSZvO3MucHVzaChyPj44JjI1NSwyNTUmcik7YT1uZXcgVWludDhBcnJheShzKX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShhKX1jb21waWxlVHlwZWRBcnJheShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKX1jb21waWxlSW5kZXgoZSx0PVtdKXtjb25zdCBhPWUub2JqZWN0cyxyPWEubGVuZ3RoO2lmKDA9PT1yKXJldHVyblswLDBdO2NvbnN0IGk9W3I+PjgmMjU1LDI1NSZyXTtsZXQgbixzLG89MTtmb3Iobj0wO248cjsrK24pbys9YVtuXS5sZW5ndGg7cz1vPDI1Nj8xOm88NjU1MzY/MjpvPDE2Nzc3MjE2PzM6NDtpLnB1c2gocyk7bGV0IGM9MTtmb3Iobj0wO248cisxO24rKyl7MT09PXM/aS5wdXNoKDI1NSZjKToyPT09cz9pLnB1c2goYz4+OCYyNTUsMjU1JmMpOjM9PT1zP2kucHVzaChjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMpOmkucHVzaChjPj4+MjQmMjU1LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYyk7YVtuXSYmKGMrPWFbbl0ubGVuZ3RoKX1mb3Iobj0wO248cjtuKyspe3Rbbl0mJnRbbl0ub2Zmc2V0KGkubGVuZ3RoKTtpLnB1c2goLi4uYVtuXSl9cmV0dXJuIGl9fXQuQ0ZGQ29tcGlsZXI9Q0ZGQ29tcGlsZXJ9LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSVNPQWRvYmVDaGFyc2V0PXQuRXhwZXJ0U3Vic2V0Q2hhcnNldD10LkV4cGVydENoYXJzZXQ9dm9pZCAwO3QuSVNPQWRvYmVDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCJxdWVzdGlvbmRvd24iLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCJBRSIsIm9yZGZlbWluaW5lIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCJhZSIsImRvdGxlc3NpIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwib25lc3VwZXJpb3IiLCJsb2dpY2Fsbm90IiwibXUiLCJ0cmFkZW1hcmsiLCJFdGgiLCJvbmVoYWxmIiwicGx1c21pbnVzIiwiVGhvcm4iLCJvbmVxdWFydGVyIiwiZGl2aWRlIiwiYnJva2VuYmFyIiwiZGVncmVlIiwidGhvcm4iLCJ0aHJlZXF1YXJ0ZXJzIiwidHdvc3VwZXJpb3IiLCJyZWdpc3RlcmVkIiwibWludXMiLCJldGgiLCJtdWx0aXBseSIsInRocmVlc3VwZXJpb3IiLCJjb3B5cmlnaHQiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkFkaWVyZXNpcyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPZGllcmVzaXMiLCJPZ3JhdmUiLCJPdGlsZGUiLCJTY2Fyb24iLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIlVncmF2ZSIsIllhY3V0ZSIsIllkaWVyZXNpcyIsIlpjYXJvbiIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYWdyYXZlIiwiYXJpbmciLCJhdGlsZGUiLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiZWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJpZ3JhdmUiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm9ncmF2ZSIsIm90aWxkZSIsInNjYXJvbiIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwidWdyYXZlIiwieWFjdXRlIiwieWRpZXJlc2lzIiwiemNhcm9uIl07dC5FeHBlcnRDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdO3QuRXhwZXJ0U3Vic2V0Q2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJoeXBoZW5zdXBlcmlvciIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJjZW50b2xkc3R5bGUiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiXX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5aYXBmRGluZ2JhdHNFbmNvZGluZz10LldpbkFuc2lFbmNvZGluZz10LlN5bWJvbFNldEVuY29kaW5nPXQuU3RhbmRhcmRFbmNvZGluZz10Lk1hY1JvbWFuRW5jb2Rpbmc9dC5FeHBlcnRFbmNvZGluZz12b2lkIDA7dC5nZXRFbmNvZGluZz1mdW5jdGlvbiBnZXRFbmNvZGluZyhlKXtzd2l0Y2goZSl7Y2FzZSJXaW5BbnNpRW5jb2RpbmciOnJldHVybiBzO2Nhc2UiU3RhbmRhcmRFbmNvZGluZyI6cmV0dXJuIG47Y2FzZSJNYWNSb21hbkVuY29kaW5nIjpyZXR1cm4gaTtjYXNlIlN5bWJvbFNldEVuY29kaW5nIjpyZXR1cm4gbztjYXNlIlphcGZEaW5nYmF0c0VuY29kaW5nIjpyZXR1cm4gYztjYXNlIkV4cGVydEVuY29kaW5nIjpyZXR1cm4gYTtjYXNlIk1hY0V4cGVydEVuY29kaW5nIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybiBudWxsfX07Y29uc3QgYT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsIiIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsIiIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsIiIsIiIsIiIsImlzdXBlcmlvciIsIiIsIiIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsIiIsIiIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCIiLCJEb3RhY2NlbnRzbWFsbCIsIiIsIiIsIk1hY3JvbnNtYWxsIiwiIiwiIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiIiwiIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdO3QuRXhwZXJ0RW5jb2Rpbmc9YTtjb25zdCByPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiY2VudG9sZHN0eWxlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsIiIsInRocmVlcXVhcnRlcnNlbWRhc2giLCIiLCJxdWVzdGlvbnNtYWxsIiwiIiwiIiwiIiwiIiwiRXRoc21hbGwiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiIiwiIiwiIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5pbmZlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsImFzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsIiIsIiIsIiIsIiIsIkFhY3V0ZXNtYWxsIiwiQWdyYXZlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBdGlsZGVzbWFsbCIsIkFyaW5nc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWdyYXZlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPdGlsZGVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWdyYXZlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCIiLCJlaWdodHN1cGVyaW9yIiwiZm91cmluZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJTY2Fyb25zbWFsbCIsIiIsImNlbnRpbmZlcmlvciIsInR3b2luZmVyaW9yIiwiIiwiRGllcmVzaXNzbWFsbCIsIiIsIkNhcm9uc21hbGwiLCJvc3VwZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCIiLCJjb21tYWluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJZYWN1dGVzbWFsbCIsIiIsImRvbGxhcmluZmVyaW9yIiwiIiwiIiwiVGhvcm5zbWFsbCIsIiIsIm5pbmVpbmZlcmlvciIsInplcm9pbmZlcmlvciIsIlpjYXJvbnNtYWxsIiwiQUVzbWFsbCIsIk9zbGFzaHNtYWxsIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVpbmZlcmlvciIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiT0VzbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5zdXBlcmlvciIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsIiIsIllkaWVyZXNpc3NtYWxsIiwiIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvc3VwZXJpb3IiLCIiLCJlc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCIiLCJpc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJkc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCIiLCJsc3VwZXJpb3IiLCJPZ29uZWtzbWFsbCIsIkJyZXZlc21hbGwiLCJNYWNyb25zbWFsbCIsImJzdXBlcmlvciIsIm5zdXBlcmlvciIsIm1zdXBlcmlvciIsImNvbW1hc3VwZXJpb3IiLCJwZXJpb2RzdXBlcmlvciIsIkRvdGFjY2VudHNtYWxsIiwiUmluZ3NtYWxsIiwiIiwiIiwiIiwiIl0saT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwic3BhY2UiLCJBZ3JhdmUiLCJBdGlsZGUiLCJPdGlsZGUiLCJPRSIsIm9lIiwiZW5kYXNoIiwiZW1kYXNoIiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJkaXZpZGUiLCJsb3plbmdlIiwieWRpZXJlc2lzIiwiWWRpZXJlc2lzIiwiZnJhY3Rpb24iLCJjdXJyZW5jeSIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicGVydGhvdXNhbmQiLCJBY2lyY3VtZmxleCIsIkVjaXJjdW1mbGV4IiwiQWFjdXRlIiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsImFwcGxlIiwiT2dyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZ3JhdmUiLCJkb3RsZXNzaSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiJdO3QuTWFjUm9tYW5FbmNvZGluZz1pO2NvbnN0IG49WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsIiIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwiIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwiIiwicXVlc3Rpb25kb3duIiwiIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCIiLCJyaW5nIiwiY2VkaWxsYSIsIiIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiQUUiLCIiLCJvcmRmZW1pbmluZSIsIiIsIiIsIiIsIiIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiIiwiIiwiIiwiIiwiIiwiYWUiLCIiLCIiLCIiLCJkb3RsZXNzaSIsIiIsIiIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIiIsIiIsIiIsIiJdO3QuU3RhbmRhcmRFbmNvZGluZz1uO2NvbnN0IHM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiYnVsbGV0IiwiRXVybyIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwiZmxvcmluIiwicXVvdGVkYmxiYXNlIiwiZWxsaXBzaXMiLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJjaXJjdW1mbGV4IiwicGVydGhvdXNhbmQiLCJTY2Fyb24iLCJndWlsc2luZ2xsZWZ0IiwiT0UiLCJidWxsZXQiLCJaY2Fyb24iLCJidWxsZXQiLCJidWxsZXQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsImJ1bGxldCIsImVuZGFzaCIsImVtZGFzaCIsInRpbGRlIiwidHJhZGVtYXJrIiwic2Nhcm9uIiwiZ3VpbHNpbmdscmlnaHQiLCJvZSIsImJ1bGxldCIsInpjYXJvbiIsIllkaWVyZXNpcyIsInNwYWNlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImN1cnJlbmN5IiwieWVuIiwiYnJva2VuYmFyIiwic2VjdGlvbiIsImRpZXJlc2lzIiwiY29weXJpZ2h0Iiwib3JkZmVtaW5pbmUiLCJndWlsbGVtb3RsZWZ0IiwibG9naWNhbG5vdCIsImh5cGhlbiIsInJlZ2lzdGVyZWQiLCJtYWNyb24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJhY3V0ZSIsIm11IiwicGFyYWdyYXBoIiwicGVyaW9kY2VudGVyZWQiLCJjZWRpbGxhIiwib25lc3VwZXJpb3IiLCJvcmRtYXNjdWxpbmUiLCJndWlsbGVtb3RyaWdodCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93biIsIkFncmF2ZSIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJBRSIsIkNjZWRpbGxhIiwiRWdyYXZlIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJJZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIkV0aCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT3RpbGRlIiwiT2RpZXJlc2lzIiwibXVsdGlwbHkiLCJPc2xhc2giLCJVZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIllhY3V0ZSIsIlRob3JuIiwiZ2VybWFuZGJscyIsImFncmF2ZSIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYXRpbGRlIiwiYWRpZXJlc2lzIiwiYXJpbmciLCJhZSIsImNjZWRpbGxhIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImV0aCIsIm50aWxkZSIsIm9ncmF2ZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib3RpbGRlIiwib2RpZXJlc2lzIiwiZGl2aWRlIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ5YWN1dGUiLCJ0aG9ybiIsInlkaWVyZXNpcyJdO3QuV2luQW5zaUVuY29kaW5nPXM7Y29uc3Qgbz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwidW5pdmVyc2FsIiwibnVtYmVyc2lnbiIsImV4aXN0ZW50aWFsIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInN1Y2h0aGF0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrbWF0aCIsInBsdXMiLCJjb21tYSIsIm1pbnVzIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJjb25ncnVlbnQiLCJBbHBoYSIsIkJldGEiLCJDaGkiLCJEZWx0YSIsIkVwc2lsb24iLCJQaGkiLCJHYW1tYSIsIkV0YSIsIklvdGEiLCJ0aGV0YTEiLCJLYXBwYSIsIkxhbWJkYSIsIk11IiwiTnUiLCJPbWljcm9uIiwiUGkiLCJUaGV0YSIsIlJobyIsIlNpZ21hIiwiVGF1IiwiVXBzaWxvbiIsInNpZ21hMSIsIk9tZWdhIiwiWGkiLCJQc2kiLCJaZXRhIiwiYnJhY2tldGxlZnQiLCJ0aGVyZWZvcmUiLCJicmFja2V0cmlnaHQiLCJwZXJwZW5kaWN1bGFyIiwidW5kZXJzY29yZSIsInJhZGljYWxleCIsImFscGhhIiwiYmV0YSIsImNoaSIsImRlbHRhIiwiZXBzaWxvbiIsInBoaSIsImdhbW1hIiwiZXRhIiwiaW90YSIsInBoaTEiLCJrYXBwYSIsImxhbWJkYSIsIm11IiwibnUiLCJvbWljcm9uIiwicGkiLCJ0aGV0YSIsInJobyIsInNpZ21hIiwidGF1IiwidXBzaWxvbiIsIm9tZWdhMSIsIm9tZWdhIiwieGkiLCJwc2kiLCJ6ZXRhIiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsInNpbWlsYXIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJFdXJvIiwiVXBzaWxvbjEiLCJtaW51dGUiLCJsZXNzZXF1YWwiLCJmcmFjdGlvbiIsImluZmluaXR5IiwiZmxvcmluIiwiY2x1YiIsImRpYW1vbmQiLCJoZWFydCIsInNwYWRlIiwiYXJyb3dib3RoIiwiYXJyb3dsZWZ0IiwiYXJyb3d1cCIsImFycm93cmlnaHQiLCJhcnJvd2Rvd24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJzZWNvbmQiLCJncmVhdGVyZXF1YWwiLCJtdWx0aXBseSIsInByb3BvcnRpb25hbCIsInBhcnRpYWxkaWZmIiwiYnVsbGV0IiwiZGl2aWRlIiwibm90ZXF1YWwiLCJlcXVpdmFsZW5jZSIsImFwcHJveGVxdWFsIiwiZWxsaXBzaXMiLCJhcnJvd3ZlcnRleCIsImFycm93aG9yaXpleCIsImNhcnJpYWdlcmV0dXJuIiwiYWxlcGgiLCJJZnJha3R1ciIsIlJmcmFrdHVyIiwid2VpZXJzdHJhc3MiLCJjaXJjbGVtdWx0aXBseSIsImNpcmNsZXBsdXMiLCJlbXB0eXNldCIsImludGVyc2VjdGlvbiIsInVuaW9uIiwicHJvcGVyc3VwZXJzZXQiLCJyZWZsZXhzdXBlcnNldCIsIm5vdHN1YnNldCIsInByb3BlcnN1YnNldCIsInJlZmxleHN1YnNldCIsImVsZW1lbnQiLCJub3RlbGVtZW50IiwiYW5nbGUiLCJncmFkaWVudCIsInJlZ2lzdGVyc2VyaWYiLCJjb3B5cmlnaHRzZXJpZiIsInRyYWRlbWFya3NlcmlmIiwicHJvZHVjdCIsInJhZGljYWwiLCJkb3RtYXRoIiwibG9naWNhbG5vdCIsImxvZ2ljYWxhbmQiLCJsb2dpY2Fsb3IiLCJhcnJvd2RibGJvdGgiLCJhcnJvd2RibGxlZnQiLCJhcnJvd2RibHVwIiwiYXJyb3dkYmxyaWdodCIsImFycm93ZGJsZG93biIsImxvemVuZ2UiLCJhbmdsZWxlZnQiLCJyZWdpc3RlcnNhbnMiLCJjb3B5cmlnaHRzYW5zIiwidHJhZGVtYXJrc2FucyIsInN1bW1hdGlvbiIsInBhcmVubGVmdHRwIiwicGFyZW5sZWZ0ZXgiLCJwYXJlbmxlZnRidCIsImJyYWNrZXRsZWZ0dHAiLCJicmFja2V0bGVmdGV4IiwiYnJhY2tldGxlZnRidCIsImJyYWNlbGVmdHRwIiwiYnJhY2VsZWZ0bWlkIiwiYnJhY2VsZWZ0YnQiLCJicmFjZWV4IiwiIiwiYW5nbGVyaWdodCIsImludGVncmFsIiwiaW50ZWdyYWx0cCIsImludGVncmFsZXgiLCJpbnRlZ3JhbGJ0IiwicGFyZW5yaWdodHRwIiwicGFyZW5yaWdodGV4IiwicGFyZW5yaWdodGJ0IiwiYnJhY2tldHJpZ2h0dHAiLCJicmFja2V0cmlnaHRleCIsImJyYWNrZXRyaWdodGJ0IiwiYnJhY2VyaWdodHRwIiwiYnJhY2VyaWdodG1pZCIsImJyYWNlcmlnaHRidCIsIiJdO3QuU3ltYm9sU2V0RW5jb2Rpbmc9bztjb25zdCBjPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJhMSIsImEyIiwiYTIwMiIsImEzIiwiYTQiLCJhNSIsImExMTkiLCJhMTE4IiwiYTExNyIsImExMSIsImExMiIsImExMyIsImExNCIsImExNSIsImExNiIsImExMDUiLCJhMTciLCJhMTgiLCJhMTkiLCJhMjAiLCJhMjEiLCJhMjIiLCJhMjMiLCJhMjQiLCJhMjUiLCJhMjYiLCJhMjciLCJhMjgiLCJhNiIsImE3IiwiYTgiLCJhOSIsImExMCIsImEyOSIsImEzMCIsImEzMSIsImEzMiIsImEzMyIsImEzNCIsImEzNSIsImEzNiIsImEzNyIsImEzOCIsImEzOSIsImE0MCIsImE0MSIsImE0MiIsImE0MyIsImE0NCIsImE0NSIsImE0NiIsImE0NyIsImE0OCIsImE0OSIsImE1MCIsImE1MSIsImE1MiIsImE1MyIsImE1NCIsImE1NSIsImE1NiIsImE1NyIsImE1OCIsImE1OSIsImE2MCIsImE2MSIsImE2MiIsImE2MyIsImE2NCIsImE2NSIsImE2NiIsImE2NyIsImE2OCIsImE2OSIsImE3MCIsImE3MSIsImE3MiIsImE3MyIsImE3NCIsImEyMDMiLCJhNzUiLCJhMjA0IiwiYTc2IiwiYTc3IiwiYTc4IiwiYTc5IiwiYTgxIiwiYTgyIiwiYTgzIiwiYTg0IiwiYTk3IiwiYTk4IiwiYTk5IiwiYTEwMCIsIiIsImE4OSIsImE5MCIsImE5MyIsImE5NCIsImE5MSIsImE5MiIsImEyMDUiLCJhODUiLCJhMjA2IiwiYTg2IiwiYTg3IiwiYTg4IiwiYTk1IiwiYTk2IiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiYTEwMSIsImExMDIiLCJhMTAzIiwiYTEwNCIsImExMDYiLCJhMTA3IiwiYTEwOCIsImExMTIiLCJhMTExIiwiYTExMCIsImExMDkiLCJhMTIwIiwiYTEyMSIsImExMjIiLCJhMTIzIiwiYTEyNCIsImExMjUiLCJhMTI2IiwiYTEyNyIsImExMjgiLCJhMTI5IiwiYTEzMCIsImExMzEiLCJhMTMyIiwiYTEzMyIsImExMzQiLCJhMTM1IiwiYTEzNiIsImExMzciLCJhMTM4IiwiYTEzOSIsImExNDAiLCJhMTQxIiwiYTE0MiIsImExNDMiLCJhMTQ0IiwiYTE0NSIsImExNDYiLCJhMTQ3IiwiYTE0OCIsImExNDkiLCJhMTUwIiwiYTE1MSIsImExNTIiLCJhMTUzIiwiYTE1NCIsImExNTUiLCJhMTU2IiwiYTE1NyIsImExNTgiLCJhMTU5IiwiYTE2MCIsImExNjEiLCJhMTYzIiwiYTE2NCIsImExOTYiLCJhMTY1IiwiYTE5MiIsImExNjYiLCJhMTY3IiwiYTE2OCIsImExNjkiLCJhMTcwIiwiYTE3MSIsImExNzIiLCJhMTczIiwiYTE2MiIsImExNzQiLCJhMTc1IiwiYTE3NiIsImExNzciLCJhMTc4IiwiYTE3OSIsImExOTMiLCJhMTgwIiwiYTE5OSIsImExODEiLCJhMjAwIiwiYTE4MiIsIiIsImEyMDEiLCJhMTgzIiwiYTE4NCIsImExOTciLCJhMTg1IiwiYTE5NCIsImExOTgiLCJhMTg2IiwiYTE5NSIsImExODciLCJhMTg4IiwiYTE4OSIsImExOTAiLCJhMTkxIiwiIl07dC5aYXBmRGluZ2JhdHNFbmNvZGluZz1jfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU0VBQ19BTkFMWVNJU19FTkFCTEVEPXQuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPXQuRm9udEZsYWdzPXZvaWQgMDt0Lm5vcm1hbGl6ZUZvbnROYW1lPWZ1bmN0aW9uIG5vcm1hbGl6ZUZvbnROYW1lKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpLnJlcGxhY2VBbGwoL1xzL2csIiIpfTt0LnJlY292ZXJHbHlwaE5hbWU9cmVjb3ZlckdseXBoTmFtZTt0LnR5cGUxRm9udEdseXBoTWFwcGluZz1mdW5jdGlvbiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcoZSx0LGEpe2NvbnN0IG49T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcyxjLGw7Y29uc3QgaD0hIShlLmZsYWdzJm8uU3ltYm9saWMpO2lmKGUuaXNJbnRlcm5hbEZvbnQpe2w9dDtmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXtzPWEuaW5kZXhPZihsW2NdKTtuW2NdPXM+PTA/czowfX1lbHNlIGlmKGUuYmFzZUVuY29kaW5nTmFtZSl7bD0oMCxyLmdldEVuY29kaW5nKShlLmJhc2VFbmNvZGluZ05hbWUpO2ZvcihjPTA7YzxsLmxlbmd0aDtjKyspe3M9YS5pbmRleE9mKGxbY10pO25bY109cz49MD9zOjB9fWVsc2UgaWYoaClmb3IoYyBpbiB0KW5bY109dFtjXTtlbHNle2w9ci5TdGFuZGFyZEVuY29kaW5nO2ZvcihjPTA7YzxsLmxlbmd0aDtjKyspe3M9YS5pbmRleE9mKGxbY10pO25bY109cz49MD9zOjB9fWNvbnN0IHU9ZS5kaWZmZXJlbmNlcztsZXQgZDtpZih1KWZvcihjIGluIHUpe2NvbnN0IGU9dVtjXTtzPWEuaW5kZXhPZihlKTtpZigtMT09PXMpe2R8fChkPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSk7Y29uc3QgdD1yZWNvdmVyR2x5cGhOYW1lKGUsZCk7dCE9PWUmJihzPWEuaW5kZXhPZih0KSl9bltjXT1zPj0wP3M6MH1yZXR1cm4gbn07dmFyIHI9YSgzNyksaT1hKDM5KSxuPWEoNDApLHM9YSgyKTt0LlNFQUNfQU5BTFlTSVNfRU5BQkxFRD0hMDtjb25zdCBvPXtGaXhlZFBpdGNoOjEsU2VyaWY6MixTeW1ib2xpYzo0LFNjcmlwdDo4LE5vbnN5bWJvbGljOjMyLEl0YWxpYzo2NCxBbGxDYXA6NjU1MzYsU21hbGxDYXA6MTMxMDcyLEZvcmNlQm9sZDoyNjIxNDR9O3QuRm9udEZsYWdzPW87dC5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc9WyIubm90ZGVmIiwiLm51bGwiLCJub25tYXJraW5ncmV0dXJuIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJOdGlsZGUiLCJPZGllcmVzaXMiLCJVZGllcmVzaXMiLCJhYWN1dGUiLCJhZ3JhdmUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImF0aWxkZSIsImFyaW5nIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlZ3JhdmUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlhY3V0ZSIsImlncmF2ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwibnRpbGRlIiwib2FjdXRlIiwib2dyYXZlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvdGlsZGUiLCJ1YWN1dGUiLCJ1Z3JhdmUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsImRhZ2dlciIsImRlZ3JlZSIsImNlbnQiLCJzdGVybGluZyIsInNlY3Rpb24iLCJidWxsZXQiLCJwYXJhZ3JhcGgiLCJnZXJtYW5kYmxzIiwicmVnaXN0ZXJlZCIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImFjdXRlIiwiZGllcmVzaXMiLCJub3RlcXVhbCIsIkFFIiwiT3NsYXNoIiwiaW5maW5pdHkiLCJwbHVzbWludXMiLCJsZXNzZXF1YWwiLCJncmVhdGVyZXF1YWwiLCJ5ZW4iLCJtdSIsInBhcnRpYWxkaWZmIiwic3VtbWF0aW9uIiwicHJvZHVjdCIsInBpIiwiaW50ZWdyYWwiLCJvcmRmZW1pbmluZSIsIm9yZG1hc2N1bGluZSIsIk9tZWdhIiwiYWUiLCJvc2xhc2giLCJxdWVzdGlvbmRvd24iLCJleGNsYW1kb3duIiwibG9naWNhbG5vdCIsInJhZGljYWwiLCJmbG9yaW4iLCJhcHByb3hlcXVhbCIsIkRlbHRhIiwiZ3VpbGxlbW90bGVmdCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJub25icmVha2luZ3NwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJMc2xhc2giLCJsc2xhc2giLCJTY2Fyb24iLCJzY2Fyb24iLCJaY2Fyb24iLCJ6Y2Fyb24iLCJicm9rZW5iYXIiLCJFdGgiLCJldGgiLCJZYWN1dGUiLCJ5YWN1dGUiLCJUaG9ybiIsInRob3JuIiwibWludXMiLCJtdWx0aXBseSIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwib25laGFsZiIsIm9uZXF1YXJ0ZXIiLCJ0aHJlZXF1YXJ0ZXJzIiwiZnJhbmMiLCJHYnJldmUiLCJnYnJldmUiLCJJZG90YWNjZW50IiwiU2NlZGlsbGEiLCJzY2VkaWxsYSIsIkNhY3V0ZSIsImNhY3V0ZSIsIkNjYXJvbiIsImNjYXJvbiIsImRjcm9hdCJdO2Z1bmN0aW9uIHJlY292ZXJHbHlwaE5hbWUoZSx0KXtpZih2b2lkIDAhPT10W2VdKXJldHVybiBlO2NvbnN0IGE9KDAsbi5nZXRVbmljb2RlRm9yR2x5cGgpKGUsdCk7aWYoLTEhPT1hKWZvcihjb25zdCBlIGluIHQpaWYodFtlXT09PWEpcmV0dXJuIGU7KDAscy5pbmZvKSgiVW5hYmxlIHRvIHJlY292ZXIgYSBzdGFuZGFyZCBnbHlwaCBuYW1lIGZvcjogIitlKTtyZXR1cm4gZX19LChlLHQsYSk9PnthLnIodCk7YS5kKHQse2dldERpbmdiYXRzR2x5cGhzVW5pY29kZTooKT0+bixnZXRHbHlwaHNVbmljb2RlOigpPT5pfSk7dmFyIHI9YSgzKTtjb25zdCBpPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5BPTY1O2UuQUU9MTk4O2UuQUVhY3V0ZT01MDg7ZS5BRW1hY3Jvbj00ODI7ZS5BRXNtYWxsPTYzNDYyO2UuQWFjdXRlPTE5MztlLkFhY3V0ZXNtYWxsPTYzNDU3O2UuQWJyZXZlPTI1ODtlLkFicmV2ZWFjdXRlPTc4NTQ7ZS5BYnJldmVjeXJpbGxpYz0xMjMyO2UuQWJyZXZlZG90YmVsb3c9Nzg2MjtlLkFicmV2ZWdyYXZlPTc4NTY7ZS5BYnJldmVob29rYWJvdmU9Nzg1ODtlLkFicmV2ZXRpbGRlPTc4NjA7ZS5BY2Fyb249NDYxO2UuQWNpcmNsZT05Mzk4O2UuQWNpcmN1bWZsZXg9MTk0O2UuQWNpcmN1bWZsZXhhY3V0ZT03ODQ0O2UuQWNpcmN1bWZsZXhkb3RiZWxvdz03ODUyO2UuQWNpcmN1bWZsZXhncmF2ZT03ODQ2O2UuQWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0ODtlLkFjaXJjdW1mbGV4c21hbGw9NjM0NTg7ZS5BY2lyY3VtZmxleHRpbGRlPTc4NTA7ZS5BY3V0ZT02MzE3NztlLkFjdXRlc21hbGw9NjM0MTI7ZS5BY3lyaWxsaWM9MTA0MDtlLkFkYmxncmF2ZT01MTI7ZS5BZGllcmVzaXM9MTk2O2UuQWRpZXJlc2lzY3lyaWxsaWM9MTIzNDtlLkFkaWVyZXNpc21hY3Jvbj00Nzg7ZS5BZGllcmVzaXNzbWFsbD02MzQ2MDtlLkFkb3RiZWxvdz03ODQwO2UuQWRvdG1hY3Jvbj00ODA7ZS5BZ3JhdmU9MTkyO2UuQWdyYXZlc21hbGw9NjM0NTY7ZS5BaG9va2Fib3ZlPTc4NDI7ZS5BaWVjeXJpbGxpYz0xMjM2O2UuQWludmVydGVkYnJldmU9NTE0O2UuQWxwaGE9OTEzO2UuQWxwaGF0b25vcz05MDI7ZS5BbWFjcm9uPTI1NjtlLkFtb25vc3BhY2U9NjUzMTM7ZS5Bb2dvbmVrPTI2MDtlLkFyaW5nPTE5NztlLkFyaW5nYWN1dGU9NTA2O2UuQXJpbmdiZWxvdz03NjgwO2UuQXJpbmdzbWFsbD02MzQ2MTtlLkFzbWFsbD02MzMyOTtlLkF0aWxkZT0xOTU7ZS5BdGlsZGVzbWFsbD02MzQ1OTtlLkF5YmFybWVuaWFuPTEzMjk7ZS5CPTY2O2UuQmNpcmNsZT05Mzk5O2UuQmRvdGFjY2VudD03NjgyO2UuQmRvdGJlbG93PTc2ODQ7ZS5CZWN5cmlsbGljPTEwNDE7ZS5CZW5hcm1lbmlhbj0xMzMwO2UuQmV0YT05MTQ7ZS5CaG9vaz0zODU7ZS5CbGluZWJlbG93PTc2ODY7ZS5CbW9ub3NwYWNlPTY1MzE0O2UuQnJldmVzbWFsbD02MzIyMDtlLkJzbWFsbD02MzMzMDtlLkJ0b3BiYXI9Mzg2O2UuQz02NztlLkNhYXJtZW5pYW49MTM0MjtlLkNhY3V0ZT0yNjI7ZS5DYXJvbj02MzE3ODtlLkNhcm9uc21hbGw9NjMyMjE7ZS5DY2Fyb249MjY4O2UuQ2NlZGlsbGE9MTk5O2UuQ2NlZGlsbGFhY3V0ZT03Njg4O2UuQ2NlZGlsbGFzbWFsbD02MzQ2MztlLkNjaXJjbGU9OTQwMDtlLkNjaXJjdW1mbGV4PTI2NDtlLkNkb3Q9MjY2O2UuQ2RvdGFjY2VudD0yNjY7ZS5DZWRpbGxhc21hbGw9NjM0MTY7ZS5DaGFhcm1lbmlhbj0xMzUzO2UuQ2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMjtlLkNoZWN5cmlsbGljPTEwNjM7ZS5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE0O2UuQ2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNjtlLkNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2ODtlLkNoZWhhcm1lbmlhbj0xMzQ3O2UuQ2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjc7ZS5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDg7ZS5DaGk9OTM1O2UuQ2hvb2s9MzkxO2UuQ2lyY3VtZmxleHNtYWxsPTYzMjIyO2UuQ21vbm9zcGFjZT02NTMxNTtlLkNvYXJtZW5pYW49MTM2MTtlLkNzbWFsbD02MzMzMTtlLkQ9Njg7ZS5EWj00OTc7ZS5EWmNhcm9uPTQ1MjtlLkRhYXJtZW5pYW49MTMzMjtlLkRhZnJpY2FuPTM5MztlLkRjYXJvbj0yNzA7ZS5EY2VkaWxsYT03Njk2O2UuRGNpcmNsZT05NDAxO2UuRGNpcmN1bWZsZXhiZWxvdz03Njk4O2UuRGNyb2F0PTI3MjtlLkRkb3RhY2NlbnQ9NzY5MDtlLkRkb3RiZWxvdz03NjkyO2UuRGVjeXJpbGxpYz0xMDQ0O2UuRGVpY29wdGljPTEwMDY7ZS5EZWx0YT04NzEwO2UuRGVsdGFncmVlaz05MTY7ZS5EaG9vaz0zOTQ7ZS5EaWVyZXNpcz02MzE3OTtlLkRpZXJlc2lzQWN1dGU9NjMxODA7ZS5EaWVyZXNpc0dyYXZlPTYzMTgxO2UuRGllcmVzaXNzbWFsbD02MzQwMDtlLkRpZ2FtbWFncmVlaz05ODg7ZS5EamVjeXJpbGxpYz0xMDI2O2UuRGxpbmViZWxvdz03Njk0O2UuRG1vbm9zcGFjZT02NTMxNjtlLkRvdGFjY2VudHNtYWxsPTYzMjIzO2UuRHNsYXNoPTI3MjtlLkRzbWFsbD02MzMzMjtlLkR0b3BiYXI9Mzk1O2UuRHo9NDk4O2UuRHpjYXJvbj00NTM7ZS5EemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ4O2UuRHplY3lyaWxsaWM9MTAyOTtlLkR6aGVjeXJpbGxpYz0xMDM5O2UuRT02OTtlLkVhY3V0ZT0yMDE7ZS5FYWN1dGVzbWFsbD02MzQ2NTtlLkVicmV2ZT0yNzY7ZS5FY2Fyb249MjgyO2UuRWNlZGlsbGFicmV2ZT03NzA4O2UuRWNoYXJtZW5pYW49MTMzMztlLkVjaXJjbGU9OTQwMjtlLkVjaXJjdW1mbGV4PTIwMjtlLkVjaXJjdW1mbGV4YWN1dGU9Nzg3MDtlLkVjaXJjdW1mbGV4YmVsb3c9NzcwNDtlLkVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3ODtlLkVjaXJjdW1mbGV4Z3JhdmU9Nzg3MjtlLkVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzQ7ZS5FY2lyY3VtZmxleHNtYWxsPTYzNDY2O2UuRWNpcmN1bWZsZXh0aWxkZT03ODc2O2UuRWN5cmlsbGljPTEwMjg7ZS5FZGJsZ3JhdmU9NTE2O2UuRWRpZXJlc2lzPTIwMztlLkVkaWVyZXNpc3NtYWxsPTYzNDY3O2UuRWRvdD0yNzg7ZS5FZG90YWNjZW50PTI3ODtlLkVkb3RiZWxvdz03ODY0O2UuRWZjeXJpbGxpYz0xMDYwO2UuRWdyYXZlPTIwMDtlLkVncmF2ZXNtYWxsPTYzNDY0O2UuRWhhcm1lbmlhbj0xMzM1O2UuRWhvb2thYm92ZT03ODY2O2UuRWlnaHRyb21hbj04NTUxO2UuRWludmVydGVkYnJldmU9NTE4O2UuRWlvdGlmaWVkY3lyaWxsaWM9MTEyNDtlLkVsY3lyaWxsaWM9MTA1MTtlLkVsZXZlbnJvbWFuPTg1NTQ7ZS5FbWFjcm9uPTI3NDtlLkVtYWNyb25hY3V0ZT03NzAyO2UuRW1hY3JvbmdyYXZlPTc3MDA7ZS5FbWN5cmlsbGljPTEwNTI7ZS5FbW9ub3NwYWNlPTY1MzE3O2UuRW5jeXJpbGxpYz0xMDUzO2UuRW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg2O2UuRW5nPTMzMDtlLkVuZ2hlY3lyaWxsaWM9MTE4ODtlLkVuaG9va2N5cmlsbGljPTEyMjM7ZS5Fb2dvbmVrPTI4MDtlLkVvcGVuPTQwMDtlLkVwc2lsb249OTE3O2UuRXBzaWxvbnRvbm9zPTkwNDtlLkVyY3lyaWxsaWM9MTA1NjtlLkVyZXZlcnNlZD0zOTg7ZS5FcmV2ZXJzZWRjeXJpbGxpYz0xMDY5O2UuRXNjeXJpbGxpYz0xMDU3O2UuRXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk0O2UuRXNoPTQyNTtlLkVzbWFsbD02MzMzMztlLkV0YT05MTk7ZS5FdGFybWVuaWFuPTEzMzY7ZS5FdGF0b25vcz05MDU7ZS5FdGg9MjA4O2UuRXRoc21hbGw9NjM0NzI7ZS5FdGlsZGU9Nzg2ODtlLkV0aWxkZWJlbG93PTc3MDY7ZS5FdXJvPTgzNjQ7ZS5Femg9NDM5O2UuRXpoY2Fyb249NDk0O2UuRXpocmV2ZXJzZWQ9NDQwO2UuRj03MDtlLkZjaXJjbGU9OTQwMztlLkZkb3RhY2NlbnQ9NzcxMDtlLkZlaGFybWVuaWFuPTEzNjY7ZS5GZWljb3B0aWM9OTk2O2UuRmhvb2s9NDAxO2UuRml0YWN5cmlsbGljPTExMzg7ZS5GaXZlcm9tYW49ODU0ODtlLkZtb25vc3BhY2U9NjUzMTg7ZS5Gb3Vycm9tYW49ODU0NztlLkZzbWFsbD02MzMzNDtlLkc9NzE7ZS5HQnNxdWFyZT0xMzE5MTtlLkdhY3V0ZT01MDA7ZS5HYW1tYT05MTU7ZS5HYW1tYWFmcmljYW49NDA0O2UuR2FuZ2lhY29wdGljPTEwMDI7ZS5HYnJldmU9Mjg2O2UuR2Nhcm9uPTQ4NjtlLkdjZWRpbGxhPTI5MDtlLkdjaXJjbGU9OTQwNDtlLkdjaXJjdW1mbGV4PTI4NDtlLkdjb21tYWFjY2VudD0yOTA7ZS5HZG90PTI4ODtlLkdkb3RhY2NlbnQ9Mjg4O2UuR2VjeXJpbGxpYz0xMDQzO2UuR2hhZGFybWVuaWFuPTEzNDY7ZS5HaGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MjtlLkdoZXN0cm9rZWN5cmlsbGljPTExNzA7ZS5HaGV1cHR1cm5jeXJpbGxpYz0xMTY4O2UuR2hvb2s9NDAzO2UuR2ltYXJtZW5pYW49MTMzMTtlLkdqZWN5cmlsbGljPTEwMjc7ZS5HbWFjcm9uPTc3MTI7ZS5HbW9ub3NwYWNlPTY1MzE5O2UuR3JhdmU9NjMxODI7ZS5HcmF2ZXNtYWxsPTYzMzI4O2UuR3NtYWxsPTYzMzM1O2UuR3NtYWxsaG9vaz02Njc7ZS5Hc3Ryb2tlPTQ4NDtlLkg9NzI7ZS5IMTg1MzM9OTY3OTtlLkgxODU0Mz05NjQyO2UuSDE4NTUxPTk2NDM7ZS5IMjIwNzM9OTYzMztlLkhQc3F1YXJlPTEzMjU5O2UuSGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkyO2UuSGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAyO2UuSGFyZHNpZ25jeXJpbGxpYz0xMDY2O2UuSGJhcj0yOTQ7ZS5IYnJldmViZWxvdz03NzIyO2UuSGNlZGlsbGE9NzcyMDtlLkhjaXJjbGU9OTQwNTtlLkhjaXJjdW1mbGV4PTI5MjtlLkhkaWVyZXNpcz03NzE4O2UuSGRvdGFjY2VudD03NzE0O2UuSGRvdGJlbG93PTc3MTY7ZS5IbW9ub3NwYWNlPTY1MzIwO2UuSG9hcm1lbmlhbj0xMzQ0O2UuSG9yaWNvcHRpYz0xZTM7ZS5Ic21hbGw9NjMzMzY7ZS5IdW5nYXJ1bWxhdXQ9NjMxODM7ZS5IdW5nYXJ1bWxhdXRzbWFsbD02MzIyNDtlLkh6c3F1YXJlPTEzMjAwO2UuST03MztlLklBY3lyaWxsaWM9MTA3MTtlLklKPTMwNjtlLklVY3lyaWxsaWM9MTA3MDtlLklhY3V0ZT0yMDU7ZS5JYWN1dGVzbWFsbD02MzQ2OTtlLklicmV2ZT0zMDA7ZS5JY2Fyb249NDYzO2UuSWNpcmNsZT05NDA2O2UuSWNpcmN1bWZsZXg9MjA2O2UuSWNpcmN1bWZsZXhzbWFsbD02MzQ3MDtlLkljeXJpbGxpYz0xMDMwO2UuSWRibGdyYXZlPTUyMDtlLklkaWVyZXNpcz0yMDc7ZS5JZGllcmVzaXNhY3V0ZT03NzI2O2UuSWRpZXJlc2lzY3lyaWxsaWM9MTI1MjtlLklkaWVyZXNpc3NtYWxsPTYzNDcxO2UuSWRvdD0zMDQ7ZS5JZG90YWNjZW50PTMwNDtlLklkb3RiZWxvdz03ODgyO2UuSWVicmV2ZWN5cmlsbGljPTEyMzg7ZS5JZWN5cmlsbGljPTEwNDU7ZS5JZnJha3R1cj04NDY1O2UuSWdyYXZlPTIwNDtlLklncmF2ZXNtYWxsPTYzNDY4O2UuSWhvb2thYm92ZT03ODgwO2UuSWljeXJpbGxpYz0xMDQ4O2UuSWludmVydGVkYnJldmU9NTIyO2UuSWlzaG9ydGN5cmlsbGljPTEwNDk7ZS5JbWFjcm9uPTI5ODtlLkltYWNyb25jeXJpbGxpYz0xMjUwO2UuSW1vbm9zcGFjZT02NTMyMTtlLkluaWFybWVuaWFuPTEzMzk7ZS5Jb2N5cmlsbGljPTEwMjU7ZS5Jb2dvbmVrPTMwMjtlLklvdGE9OTIxO2UuSW90YWFmcmljYW49NDA2O2UuSW90YWRpZXJlc2lzPTkzODtlLklvdGF0b25vcz05MDY7ZS5Jc21hbGw9NjMzMzc7ZS5Jc3Ryb2tlPTQwNztlLkl0aWxkZT0yOTY7ZS5JdGlsZGViZWxvdz03NzI0O2UuSXpoaXRzYWN5cmlsbGljPTExNDA7ZS5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQyO2UuSj03NDtlLkphYXJtZW5pYW49MTM0NTtlLkpjaXJjbGU9OTQwNztlLkpjaXJjdW1mbGV4PTMwODtlLkplY3lyaWxsaWM9MTAzMjtlLkpoZWhhcm1lbmlhbj0xMzU1O2UuSm1vbm9zcGFjZT02NTMyMjtlLkpzbWFsbD02MzMzODtlLks9NzU7ZS5LQnNxdWFyZT0xMzE4OTtlLktLc3F1YXJlPTEzMjYxO2UuS2FiYXNoa2lyY3lyaWxsaWM9MTE4NDtlLkthY3V0ZT03NzI4O2UuS2FjeXJpbGxpYz0xMDUwO2UuS2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc4O2UuS2Fob29rY3lyaWxsaWM9MTIxOTtlLkthcHBhPTkyMjtlLkthc3Ryb2tlY3lyaWxsaWM9MTE4MjtlLkthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgwO2UuS2Nhcm9uPTQ4ODtlLktjZWRpbGxhPTMxMDtlLktjaXJjbGU9OTQwODtlLktjb21tYWFjY2VudD0zMTA7ZS5LZG90YmVsb3c9NzczMDtlLktlaGFybWVuaWFuPTEzNjQ7ZS5LZW5hcm1lbmlhbj0xMzQzO2UuS2hhY3lyaWxsaWM9MTA2MTtlLktoZWljb3B0aWM9OTk4O2UuS2hvb2s9NDA4O2UuS2plY3lyaWxsaWM9MTAzNjtlLktsaW5lYmVsb3c9NzczMjtlLkttb25vc3BhY2U9NjUzMjM7ZS5Lb3BwYWN5cmlsbGljPTExNTI7ZS5Lb3BwYWdyZWVrPTk5MDtlLktzaWN5cmlsbGljPTExMzQ7ZS5Lc21hbGw9NjMzMzk7ZS5MPTc2O2UuTEo9NDU1O2UuTEw9NjMxNjc7ZS5MYWN1dGU9MzEzO2UuTGFtYmRhPTkyMztlLkxjYXJvbj0zMTc7ZS5MY2VkaWxsYT0zMTU7ZS5MY2lyY2xlPTk0MDk7ZS5MY2lyY3VtZmxleGJlbG93PTc3NDA7ZS5MY29tbWFhY2NlbnQ9MzE1O2UuTGRvdD0zMTk7ZS5MZG90YWNjZW50PTMxOTtlLkxkb3RiZWxvdz03NzM0O2UuTGRvdGJlbG93bWFjcm9uPTc3MzY7ZS5MaXduYXJtZW5pYW49MTM0MDtlLkxqPTQ1NjtlLkxqZWN5cmlsbGljPTEwMzM7ZS5MbGluZWJlbG93PTc3Mzg7ZS5MbW9ub3NwYWNlPTY1MzI0O2UuTHNsYXNoPTMyMTtlLkxzbGFzaHNtYWxsPTYzMjI1O2UuTHNtYWxsPTYzMzQwO2UuTT03NztlLk1Cc3F1YXJlPTEzMTkwO2UuTWFjcm9uPTYzMTg0O2UuTWFjcm9uc21hbGw9NjM0MDc7ZS5NYWN1dGU9Nzc0MjtlLk1jaXJjbGU9OTQxMDtlLk1kb3RhY2NlbnQ9Nzc0NDtlLk1kb3RiZWxvdz03NzQ2O2UuTWVuYXJtZW5pYW49MTM0ODtlLk1tb25vc3BhY2U9NjUzMjU7ZS5Nc21hbGw9NjMzNDE7ZS5NdHVybmVkPTQxMjtlLk11PTkyNDtlLk49Nzg7ZS5OSj00NTg7ZS5OYWN1dGU9MzIzO2UuTmNhcm9uPTMyNztlLk5jZWRpbGxhPTMyNTtlLk5jaXJjbGU9OTQxMTtlLk5jaXJjdW1mbGV4YmVsb3c9Nzc1NDtlLk5jb21tYWFjY2VudD0zMjU7ZS5OZG90YWNjZW50PTc3NDg7ZS5OZG90YmVsb3c9Nzc1MDtlLk5ob29rbGVmdD00MTM7ZS5OaW5lcm9tYW49ODU1MjtlLk5qPTQ1OTtlLk5qZWN5cmlsbGljPTEwMzQ7ZS5ObGluZWJlbG93PTc3NTI7ZS5ObW9ub3NwYWNlPTY1MzI2O2UuTm93YXJtZW5pYW49MTM1MDtlLk5zbWFsbD02MzM0MjtlLk50aWxkZT0yMDk7ZS5OdGlsZGVzbWFsbD02MzQ3MztlLk51PTkyNTtlLk89Nzk7ZS5PRT0zMzg7ZS5PRXNtYWxsPTYzMjI2O2UuT2FjdXRlPTIxMTtlLk9hY3V0ZXNtYWxsPTYzNDc1O2UuT2JhcnJlZGN5cmlsbGljPTEyNTY7ZS5PYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU4O2UuT2JyZXZlPTMzNDtlLk9jYXJvbj00NjU7ZS5PY2VudGVyZWR0aWxkZT00MTU7ZS5PY2lyY2xlPTk0MTI7ZS5PY2lyY3VtZmxleD0yMTI7ZS5PY2lyY3VtZmxleGFjdXRlPTc4ODg7ZS5PY2lyY3VtZmxleGRvdGJlbG93PTc4OTY7ZS5PY2lyY3VtZmxleGdyYXZlPTc4OTA7ZS5PY2lyY3VtZmxleGhvb2thYm92ZT03ODkyO2UuT2NpcmN1bWZsZXhzbWFsbD02MzQ3NjtlLk9jaXJjdW1mbGV4dGlsZGU9Nzg5NDtlLk9jeXJpbGxpYz0xMDU0O2UuT2RibGFjdXRlPTMzNjtlLk9kYmxncmF2ZT01MjQ7ZS5PZGllcmVzaXM9MjE0O2UuT2RpZXJlc2lzY3lyaWxsaWM9MTI1NDtlLk9kaWVyZXNpc3NtYWxsPTYzNDc4O2UuT2RvdGJlbG93PTc4ODQ7ZS5PZ29uZWtzbWFsbD02MzIyNztlLk9ncmF2ZT0yMTA7ZS5PZ3JhdmVzbWFsbD02MzQ3NDtlLk9oYXJtZW5pYW49MTM2NTtlLk9obT04NDg2O2UuT2hvb2thYm92ZT03ODg2O2UuT2hvcm49NDE2O2UuT2hvcm5hY3V0ZT03ODk4O2UuT2hvcm5kb3RiZWxvdz03OTA2O2UuT2hvcm5ncmF2ZT03OTAwO2UuT2hvcm5ob29rYWJvdmU9NzkwMjtlLk9ob3JudGlsZGU9NzkwNDtlLk9odW5nYXJ1bWxhdXQ9MzM2O2UuT2k9NDE4O2UuT2ludmVydGVkYnJldmU9NTI2O2UuT21hY3Jvbj0zMzI7ZS5PbWFjcm9uYWN1dGU9Nzc2MjtlLk9tYWNyb25ncmF2ZT03NzYwO2UuT21lZ2E9ODQ4NjtlLk9tZWdhY3lyaWxsaWM9MTEyMDtlLk9tZWdhZ3JlZWs9OTM3O2UuT21lZ2Fyb3VuZGN5cmlsbGljPTExNDY7ZS5PbWVnYXRpdGxvY3lyaWxsaWM9MTE0ODtlLk9tZWdhdG9ub3M9OTExO2UuT21pY3Jvbj05Mjc7ZS5PbWljcm9udG9ub3M9OTA4O2UuT21vbm9zcGFjZT02NTMyNztlLk9uZXJvbWFuPTg1NDQ7ZS5Pb2dvbmVrPTQ5MDtlLk9vZ29uZWttYWNyb249NDkyO2UuT29wZW49MzkwO2UuT3NsYXNoPTIxNjtlLk9zbGFzaGFjdXRlPTUxMDtlLk9zbGFzaHNtYWxsPTYzNDgwO2UuT3NtYWxsPTYzMzQzO2UuT3N0cm9rZWFjdXRlPTUxMDtlLk90Y3lyaWxsaWM9MTE1MDtlLk90aWxkZT0yMTM7ZS5PdGlsZGVhY3V0ZT03NzU2O2UuT3RpbGRlZGllcmVzaXM9Nzc1ODtlLk90aWxkZXNtYWxsPTYzNDc3O2UuUD04MDtlLlBhY3V0ZT03NzY0O2UuUGNpcmNsZT05NDEzO2UuUGRvdGFjY2VudD03NzY2O2UuUGVjeXJpbGxpYz0xMDU1O2UuUGVoYXJtZW5pYW49MTM1NDtlLlBlbWlkZGxlaG9va2N5cmlsbGljPTExOTA7ZS5QaGk9OTM0O2UuUGhvb2s9NDIwO2UuUGk9OTI4O2UuUGl3cmFybWVuaWFuPTEzNjM7ZS5QbW9ub3NwYWNlPTY1MzI4O2UuUHNpPTkzNjtlLlBzaWN5cmlsbGljPTExMzY7ZS5Qc21hbGw9NjMzNDQ7ZS5RPTgxO2UuUWNpcmNsZT05NDE0O2UuUW1vbm9zcGFjZT02NTMyOTtlLlFzbWFsbD02MzM0NTtlLlI9ODI7ZS5SYWFybWVuaWFuPTEzNTY7ZS5SYWN1dGU9MzQwO2UuUmNhcm9uPTM0NDtlLlJjZWRpbGxhPTM0MjtlLlJjaXJjbGU9OTQxNTtlLlJjb21tYWFjY2VudD0zNDI7ZS5SZGJsZ3JhdmU9NTI4O2UuUmRvdGFjY2VudD03NzY4O2UuUmRvdGJlbG93PTc3NzA7ZS5SZG90YmVsb3dtYWNyb249Nzc3MjtlLlJlaGFybWVuaWFuPTEzNjA7ZS5SZnJha3R1cj04NDc2O2UuUmhvPTkyOTtlLlJpbmdzbWFsbD02MzIyODtlLlJpbnZlcnRlZGJyZXZlPTUzMDtlLlJsaW5lYmVsb3c9Nzc3NDtlLlJtb25vc3BhY2U9NjUzMzA7ZS5Sc21hbGw9NjMzNDY7ZS5Sc21hbGxpbnZlcnRlZD02NDE7ZS5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yPTY5NDtlLlM9ODM7ZS5TRjAxMDAwMD05NDg0O2UuU0YwMjAwMDA9OTQ5MjtlLlNGMDMwMDAwPTk0ODg7ZS5TRjA0MDAwMD05NDk2O2UuU0YwNTAwMDA9OTUzMjtlLlNGMDYwMDAwPTk1MTY7ZS5TRjA3MDAwMD05NTI0O2UuU0YwODAwMDA9OTUwMDtlLlNGMDkwMDAwPTk1MDg7ZS5TRjEwMDAwMD05NDcyO2UuU0YxMTAwMDA9OTQ3NDtlLlNGMTkwMDAwPTk1Njk7ZS5TRjIwMDAwMD05NTcwO2UuU0YyMTAwMDA9OTU1ODtlLlNGMjIwMDAwPTk1NTc7ZS5TRjIzMDAwMD05NTcxO2UuU0YyNDAwMDA9OTU1MztlLlNGMjUwMDAwPTk1NTk7ZS5TRjI2MDAwMD05NTY1O2UuU0YyNzAwMDA9OTU2NDtlLlNGMjgwMDAwPTk1NjM7ZS5TRjM2MDAwMD05NTY2O2UuU0YzNzAwMDA9OTU2NztlLlNGMzgwMDAwPTk1NjI7ZS5TRjM5MDAwMD05NTU2O2UuU0Y0MDAwMDA9OTU3NztlLlNGNDEwMDAwPTk1NzQ7ZS5TRjQyMDAwMD05NTY4O2UuU0Y0MzAwMDA9OTU1MjtlLlNGNDQwMDAwPTk1ODA7ZS5TRjQ1MDAwMD05NTc1O2UuU0Y0NjAwMDA9OTU3NjtlLlNGNDcwMDAwPTk1NzI7ZS5TRjQ4MDAwMD05NTczO2UuU0Y0OTAwMDA9OTU2MTtlLlNGNTAwMDAwPTk1NjA7ZS5TRjUxMDAwMD05NTU0O2UuU0Y1MjAwMDA9OTU1NTtlLlNGNTMwMDAwPTk1Nzk7ZS5TRjU0MDAwMD05NTc4O2UuU2FjdXRlPTM0NjtlLlNhY3V0ZWRvdGFjY2VudD03NzgwO2UuU2FtcGlncmVlaz05OTI7ZS5TY2Fyb249MzUyO2UuU2Nhcm9uZG90YWNjZW50PTc3ODI7ZS5TY2Fyb25zbWFsbD02MzIyOTtlLlNjZWRpbGxhPTM1MDtlLlNjaHdhPTM5OTtlLlNjaHdhY3lyaWxsaWM9MTI0MDtlLlNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQyO2UuU2NpcmNsZT05NDE2O2UuU2NpcmN1bWZsZXg9MzQ4O2UuU2NvbW1hYWNjZW50PTUzNjtlLlNkb3RhY2NlbnQ9Nzc3NjtlLlNkb3RiZWxvdz03Nzc4O2UuU2RvdGJlbG93ZG90YWNjZW50PTc3ODQ7ZS5TZWhhcm1lbmlhbj0xMzU3O2UuU2V2ZW5yb21hbj04NTUwO2UuU2hhYXJtZW5pYW49MTM1MTtlLlNoYWN5cmlsbGljPTEwNjQ7ZS5TaGNoYWN5cmlsbGljPTEwNjU7ZS5TaGVpY29wdGljPTk5NDtlLlNoaGFjeXJpbGxpYz0xMjEwO2UuU2hpbWFjb3B0aWM9MTAwNDtlLlNpZ21hPTkzMTtlLlNpeHJvbWFuPTg1NDk7ZS5TbW9ub3NwYWNlPTY1MzMxO2UuU29mdHNpZ25jeXJpbGxpYz0xMDY4O2UuU3NtYWxsPTYzMzQ3O2UuU3RpZ21hZ3JlZWs9OTg2O2UuVD04NDtlLlRhdT05MzI7ZS5UYmFyPTM1ODtlLlRjYXJvbj0zNTY7ZS5UY2VkaWxsYT0zNTQ7ZS5UY2lyY2xlPTk0MTc7ZS5UY2lyY3VtZmxleGJlbG93PTc3OTI7ZS5UY29tbWFhY2NlbnQ9MzU0O2UuVGRvdGFjY2VudD03Nzg2O2UuVGRvdGJlbG93PTc3ODg7ZS5UZWN5cmlsbGljPTEwNTg7ZS5UZWRlc2NlbmRlcmN5cmlsbGljPTExOTY7ZS5UZW5yb21hbj04NTUzO2UuVGV0c2VjeXJpbGxpYz0xMjA0O2UuVGhldGE9OTIwO2UuVGhvb2s9NDI4O2UuVGhvcm49MjIyO2UuVGhvcm5zbWFsbD02MzQ4NjtlLlRocmVlcm9tYW49ODU0NjtlLlRpbGRlc21hbGw9NjMyMzA7ZS5UaXduYXJtZW5pYW49MTM1OTtlLlRsaW5lYmVsb3c9Nzc5MDtlLlRtb25vc3BhY2U9NjUzMzI7ZS5Ub2FybWVuaWFuPTEzMzc7ZS5Ub25lZml2ZT00NDQ7ZS5Ub25lc2l4PTM4ODtlLlRvbmV0d289NDIzO2UuVHJldHJvZmxleGhvb2s9NDMwO2UuVHNlY3lyaWxsaWM9MTA2MjtlLlRzaGVjeXJpbGxpYz0xMDM1O2UuVHNtYWxsPTYzMzQ4O2UuVHdlbHZlcm9tYW49ODU1NTtlLlR3b3JvbWFuPTg1NDU7ZS5VPTg1O2UuVWFjdXRlPTIxODtlLlVhY3V0ZXNtYWxsPTYzNDgyO2UuVWJyZXZlPTM2NDtlLlVjYXJvbj00Njc7ZS5VY2lyY2xlPTk0MTg7ZS5VY2lyY3VtZmxleD0yMTk7ZS5VY2lyY3VtZmxleGJlbG93PTc3OTg7ZS5VY2lyY3VtZmxleHNtYWxsPTYzNDgzO2UuVWN5cmlsbGljPTEwNTk7ZS5VZGJsYWN1dGU9MzY4O2UuVWRibGdyYXZlPTUzMjtlLlVkaWVyZXNpcz0yMjA7ZS5VZGllcmVzaXNhY3V0ZT00NzE7ZS5VZGllcmVzaXNiZWxvdz03Nzk0O2UuVWRpZXJlc2lzY2Fyb249NDczO2UuVWRpZXJlc2lzY3lyaWxsaWM9MTI2NDtlLlVkaWVyZXNpc2dyYXZlPTQ3NTtlLlVkaWVyZXNpc21hY3Jvbj00Njk7ZS5VZGllcmVzaXNzbWFsbD02MzQ4NDtlLlVkb3RiZWxvdz03OTA4O2UuVWdyYXZlPTIxNztlLlVncmF2ZXNtYWxsPTYzNDgxO2UuVWhvb2thYm92ZT03OTEwO2UuVWhvcm49NDMxO2UuVWhvcm5hY3V0ZT03OTEyO2UuVWhvcm5kb3RiZWxvdz03OTIwO2UuVWhvcm5ncmF2ZT03OTE0O2UuVWhvcm5ob29rYWJvdmU9NzkxNjtlLlVob3JudGlsZGU9NzkxODtlLlVodW5nYXJ1bWxhdXQ9MzY4O2UuVWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjY7ZS5VaW52ZXJ0ZWRicmV2ZT01MzQ7ZS5Va2N5cmlsbGljPTExNDQ7ZS5VbWFjcm9uPTM2MjtlLlVtYWNyb25jeXJpbGxpYz0xMjYyO2UuVW1hY3JvbmRpZXJlc2lzPTc4MDI7ZS5VbW9ub3NwYWNlPTY1MzMzO2UuVW9nb25laz0zNzA7ZS5VcHNpbG9uPTkzMztlLlVwc2lsb24xPTk3ODtlLlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVlaz05Nzk7ZS5VcHNpbG9uYWZyaWNhbj00MzM7ZS5VcHNpbG9uZGllcmVzaXM9OTM5O2UuVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrPTk4MDtlLlVwc2lsb25ob29rc3ltYm9sPTk3ODtlLlVwc2lsb250b25vcz05MTA7ZS5VcmluZz0zNjY7ZS5Vc2hvcnRjeXJpbGxpYz0xMDM4O2UuVXNtYWxsPTYzMzQ5O2UuVXN0cmFpZ2h0Y3lyaWxsaWM9MTE5ODtlLlVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDA7ZS5VdGlsZGU9MzYwO2UuVXRpbGRlYWN1dGU9NzgwMDtlLlV0aWxkZWJlbG93PTc3OTY7ZS5WPTg2O2UuVmNpcmNsZT05NDE5O2UuVmRvdGJlbG93PTc4MDY7ZS5WZWN5cmlsbGljPTEwNDI7ZS5WZXdhcm1lbmlhbj0xMzU4O2UuVmhvb2s9NDM0O2UuVm1vbm9zcGFjZT02NTMzNDtlLlZvYXJtZW5pYW49MTM1MjtlLlZzbWFsbD02MzM1MDtlLlZ0aWxkZT03ODA0O2UuVz04NztlLldhY3V0ZT03ODEwO2UuV2NpcmNsZT05NDIwO2UuV2NpcmN1bWZsZXg9MzcyO2UuV2RpZXJlc2lzPTc4MTI7ZS5XZG90YWNjZW50PTc4MTQ7ZS5XZG90YmVsb3c9NzgxNjtlLldncmF2ZT03ODA4O2UuV21vbm9zcGFjZT02NTMzNTtlLldzbWFsbD02MzM1MTtlLlg9ODg7ZS5YY2lyY2xlPTk0MjE7ZS5YZGllcmVzaXM9NzgyMDtlLlhkb3RhY2NlbnQ9NzgxODtlLlhlaGFybWVuaWFuPTEzNDE7ZS5YaT05MjY7ZS5YbW9ub3NwYWNlPTY1MzM2O2UuWHNtYWxsPTYzMzUyO2UuWT04OTtlLllhY3V0ZT0yMjE7ZS5ZYWN1dGVzbWFsbD02MzQ4NTtlLllhdGN5cmlsbGljPTExMjI7ZS5ZY2lyY2xlPTk0MjI7ZS5ZY2lyY3VtZmxleD0zNzQ7ZS5ZZGllcmVzaXM9Mzc2O2UuWWRpZXJlc2lzc21hbGw9NjM0ODc7ZS5ZZG90YWNjZW50PTc4MjI7ZS5ZZG90YmVsb3c9NzkyNDtlLlllcmljeXJpbGxpYz0xMDY3O2UuWWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MjtlLllncmF2ZT03OTIyO2UuWWhvb2s9NDM1O2UuWWhvb2thYm92ZT03OTI2O2UuWWlhcm1lbmlhbj0xMzQ5O2UuWWljeXJpbGxpYz0xMDMxO2UuWWl3bmFybWVuaWFuPTEzNjI7ZS5ZbW9ub3NwYWNlPTY1MzM3O2UuWXNtYWxsPTYzMzUzO2UuWXRpbGRlPTc5Mjg7ZS5ZdXNiaWdjeXJpbGxpYz0xMTMwO2UuWXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMyO2UuWXVzbGl0dGxlY3lyaWxsaWM9MTEyNjtlLll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyODtlLlo9OTA7ZS5aYWFybWVuaWFuPTEzMzQ7ZS5aYWN1dGU9Mzc3O2UuWmNhcm9uPTM4MTtlLlpjYXJvbnNtYWxsPTYzMjMxO2UuWmNpcmNsZT05NDIzO2UuWmNpcmN1bWZsZXg9NzgyNDtlLlpkb3Q9Mzc5O2UuWmRvdGFjY2VudD0zNzk7ZS5aZG90YmVsb3c9NzgyNjtlLlplY3lyaWxsaWM9MTA0NztlLlplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NjtlLlplZGllcmVzaXNjeXJpbGxpYz0xMjQ2O2UuWmV0YT05MTg7ZS5aaGVhcm1lbmlhbj0xMzM4O2UuWmhlYnJldmVjeXJpbGxpYz0xMjE3O2UuWmhlY3lyaWxsaWM9MTA0NjtlLlpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzQ7ZS5aaGVkaWVyZXNpc2N5cmlsbGljPTEyNDQ7ZS5abGluZWJlbG93PTc4Mjg7ZS5abW9ub3NwYWNlPTY1MzM4O2UuWnNtYWxsPTYzMzU0O2UuWnN0cm9rZT00Mzc7ZS5hPTk3O2UuYWFiZW5nYWxpPTI0Mzg7ZS5hYWN1dGU9MjI1O2UuYWFkZXZhPTIzMTA7ZS5hYWd1amFyYXRpPTI2OTQ7ZS5hYWd1cm11a2hpPTI1NjY7ZS5hYW1hdHJhZ3VybXVraGk9MjYyMjtlLmFhcnVzcXVhcmU9MTMwNTk7ZS5hYXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NDtlLmFhdm93ZWxzaWduZGV2YT0yMzY2O2UuYWF2b3dlbHNpZ25ndWphcmF0aT0yNzUwO2UuYWJicmV2aWF0aW9ubWFya2FybWVuaWFuPTEzNzU7ZS5hYmJyZXZpYXRpb25zaWduZGV2YT0yNDE2O2UuYWJlbmdhbGk9MjQzNztlLmFib3BvbW9mbz0xMjU3MDtlLmFicmV2ZT0yNTk7ZS5hYnJldmVhY3V0ZT03ODU1O2UuYWJyZXZlY3lyaWxsaWM9MTIzMztlLmFicmV2ZWRvdGJlbG93PTc4NjM7ZS5hYnJldmVncmF2ZT03ODU3O2UuYWJyZXZlaG9va2Fib3ZlPTc4NTk7ZS5hYnJldmV0aWxkZT03ODYxO2UuYWNhcm9uPTQ2MjtlLmFjaXJjbGU9OTQyNDtlLmFjaXJjdW1mbGV4PTIyNjtlLmFjaXJjdW1mbGV4YWN1dGU9Nzg0NTtlLmFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MztlLmFjaXJjdW1mbGV4Z3JhdmU9Nzg0NztlLmFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDk7ZS5hY2lyY3VtZmxleHRpbGRlPTc4NTE7ZS5hY3V0ZT0xODA7ZS5hY3V0ZWJlbG93Y21iPTc5MTtlLmFjdXRlY21iPTc2OTtlLmFjdXRlY29tYj03Njk7ZS5hY3V0ZWRldmE9MjM4ODtlLmFjdXRlbG93bW9kPTcxOTtlLmFjdXRldG9uZWNtYj04MzM7ZS5hY3lyaWxsaWM9MTA3MjtlLmFkYmxncmF2ZT01MTM7ZS5hZGRha2d1cm11a2hpPTI2NzM7ZS5hZGV2YT0yMzA5O2UuYWRpZXJlc2lzPTIyODtlLmFkaWVyZXNpc2N5cmlsbGljPTEyMzU7ZS5hZGllcmVzaXNtYWNyb249NDc5O2UuYWRvdGJlbG93PTc4NDE7ZS5hZG90bWFjcm9uPTQ4MTtlLmFlPTIzMDtlLmFlYWN1dGU9NTA5O2UuYWVrb3JlYW49MTI2MjQ7ZS5hZW1hY3Jvbj00ODM7ZS5hZmlpMDAyMDg9ODIxMztlLmFmaWkwODk0MT04MzU2O2UuYWZpaTEwMDE3PTEwNDA7ZS5hZmlpMTAwMTg9MTA0MTtlLmFmaWkxMDAxOT0xMDQyO2UuYWZpaTEwMDIwPTEwNDM7ZS5hZmlpMTAwMjE9MTA0NDtlLmFmaWkxMDAyMj0xMDQ1O2UuYWZpaTEwMDIzPTEwMjU7ZS5hZmlpMTAwMjQ9MTA0NjtlLmFmaWkxMDAyNT0xMDQ3O2UuYWZpaTEwMDI2PTEwNDg7ZS5hZmlpMTAwMjc9MTA0OTtlLmFmaWkxMDAyOD0xMDUwO2UuYWZpaTEwMDI5PTEwNTE7ZS5hZmlpMTAwMzA9MTA1MjtlLmFmaWkxMDAzMT0xMDUzO2UuYWZpaTEwMDMyPTEwNTQ7ZS5hZmlpMTAwMzM9MTA1NTtlLmFmaWkxMDAzND0xMDU2O2UuYWZpaTEwMDM1PTEwNTc7ZS5hZmlpMTAwMzY9MTA1ODtlLmFmaWkxMDAzNz0xMDU5O2UuYWZpaTEwMDM4PTEwNjA7ZS5hZmlpMTAwMzk9MTA2MTtlLmFmaWkxMDA0MD0xMDYyO2UuYWZpaTEwMDQxPTEwNjM7ZS5hZmlpMTAwNDI9MTA2NDtlLmFmaWkxMDA0Mz0xMDY1O2UuYWZpaTEwMDQ0PTEwNjY7ZS5hZmlpMTAwNDU9MTA2NztlLmFmaWkxMDA0Nj0xMDY4O2UuYWZpaTEwMDQ3PTEwNjk7ZS5hZmlpMTAwNDg9MTA3MDtlLmFmaWkxMDA0OT0xMDcxO2UuYWZpaTEwMDUwPTExNjg7ZS5hZmlpMTAwNTE9MTAyNjtlLmFmaWkxMDA1Mj0xMDI3O2UuYWZpaTEwMDUzPTEwMjg7ZS5hZmlpMTAwNTQ9MTAyOTtlLmFmaWkxMDA1NT0xMDMwO2UuYWZpaTEwMDU2PTEwMzE7ZS5hZmlpMTAwNTc9MTAzMjtlLmFmaWkxMDA1OD0xMDMzO2UuYWZpaTEwMDU5PTEwMzQ7ZS5hZmlpMTAwNjA9MTAzNTtlLmFmaWkxMDA2MT0xMDM2O2UuYWZpaTEwMDYyPTEwMzg7ZS5hZmlpMTAwNjM9NjMxNzI7ZS5hZmlpMTAwNjQ9NjMxNzM7ZS5hZmlpMTAwNjU9MTA3MjtlLmFmaWkxMDA2Nj0xMDczO2UuYWZpaTEwMDY3PTEwNzQ7ZS5hZmlpMTAwNjg9MTA3NTtlLmFmaWkxMDA2OT0xMDc2O2UuYWZpaTEwMDcwPTEwNzc7ZS5hZmlpMTAwNzE9MTEwNTtlLmFmaWkxMDA3Mj0xMDc4O2UuYWZpaTEwMDczPTEwNzk7ZS5hZmlpMTAwNzQ9MTA4MDtlLmFmaWkxMDA3NT0xMDgxO2UuYWZpaTEwMDc2PTEwODI7ZS5hZmlpMTAwNzc9MTA4MztlLmFmaWkxMDA3OD0xMDg0O2UuYWZpaTEwMDc5PTEwODU7ZS5hZmlpMTAwODA9MTA4NjtlLmFmaWkxMDA4MT0xMDg3O2UuYWZpaTEwMDgyPTEwODg7ZS5hZmlpMTAwODM9MTA4OTtlLmFmaWkxMDA4ND0xMDkwO2UuYWZpaTEwMDg1PTEwOTE7ZS5hZmlpMTAwODY9MTA5MjtlLmFmaWkxMDA4Nz0xMDkzO2UuYWZpaTEwMDg4PTEwOTQ7ZS5hZmlpMTAwODk9MTA5NTtlLmFmaWkxMDA5MD0xMDk2O2UuYWZpaTEwMDkxPTEwOTc7ZS5hZmlpMTAwOTI9MTA5ODtlLmFmaWkxMDA5Mz0xMDk5O2UuYWZpaTEwMDk0PTExMDA7ZS5hZmlpMTAwOTU9MTEwMTtlLmFmaWkxMDA5Nj0xMTAyO2UuYWZpaTEwMDk3PTExMDM7ZS5hZmlpMTAwOTg9MTE2OTtlLmFmaWkxMDA5OT0xMTA2O2UuYWZpaTEwMTAwPTExMDc7ZS5hZmlpMTAxMDE9MTEwODtlLmFmaWkxMDEwMj0xMTA5O2UuYWZpaTEwMTAzPTExMTA7ZS5hZmlpMTAxMDQ9MTExMTtlLmFmaWkxMDEwNT0xMTEyO2UuYWZpaTEwMTA2PTExMTM7ZS5hZmlpMTAxMDc9MTExNDtlLmFmaWkxMDEwOD0xMTE1O2UuYWZpaTEwMTA5PTExMTY7ZS5hZmlpMTAxMTA9MTExODtlLmFmaWkxMDE0NT0xMDM5O2UuYWZpaTEwMTQ2PTExMjI7ZS5hZmlpMTAxNDc9MTEzODtlLmFmaWkxMDE0OD0xMTQwO2UuYWZpaTEwMTkyPTYzMTc0O2UuYWZpaTEwMTkzPTExMTk7ZS5hZmlpMTAxOTQ9MTEyMztlLmFmaWkxMDE5NT0xMTM5O2UuYWZpaTEwMTk2PTExNDE7ZS5hZmlpMTA4MzE9NjMxNzU7ZS5hZmlpMTA4MzI9NjMxNzY7ZS5hZmlpMTA4NDY9MTI0MTtlLmFmaWkyOTk9ODIwNjtlLmFmaWkzMDA9ODIwNztlLmFmaWkzMDE9ODIwNTtlLmFmaWk1NzM4MT0xNjQyO2UuYWZpaTU3Mzg4PTE1NDg7ZS5hZmlpNTczOTI9MTYzMjtlLmFmaWk1NzM5Mz0xNjMzO2UuYWZpaTU3Mzk0PTE2MzQ7ZS5hZmlpNTczOTU9MTYzNTtlLmFmaWk1NzM5Nj0xNjM2O2UuYWZpaTU3Mzk3PTE2Mzc7ZS5hZmlpNTczOTg9MTYzODtlLmFmaWk1NzM5OT0xNjM5O2UuYWZpaTU3NDAwPTE2NDA7ZS5hZmlpNTc0MDE9MTY0MTtlLmFmaWk1NzQwMz0xNTYzO2UuYWZpaTU3NDA3PTE1Njc7ZS5hZmlpNTc0MDk9MTU2OTtlLmFmaWk1NzQxMD0xNTcwO2UuYWZpaTU3NDExPTE1NzE7ZS5hZmlpNTc0MTI9MTU3MjtlLmFmaWk1NzQxMz0xNTczO2UuYWZpaTU3NDE0PTE1NzQ7ZS5hZmlpNTc0MTU9MTU3NTtlLmFmaWk1NzQxNj0xNTc2O2UuYWZpaTU3NDE3PTE1Nzc7ZS5hZmlpNTc0MTg9MTU3ODtlLmFmaWk1NzQxOT0xNTc5O2UuYWZpaTU3NDIwPTE1ODA7ZS5hZmlpNTc0MjE9MTU4MTtlLmFmaWk1NzQyMj0xNTgyO2UuYWZpaTU3NDIzPTE1ODM7ZS5hZmlpNTc0MjQ9MTU4NDtlLmFmaWk1NzQyNT0xNTg1O2UuYWZpaTU3NDI2PTE1ODY7ZS5hZmlpNTc0Mjc9MTU4NztlLmFmaWk1NzQyOD0xNTg4O2UuYWZpaTU3NDI5PTE1ODk7ZS5hZmlpNTc0MzA9MTU5MDtlLmFmaWk1NzQzMT0xNTkxO2UuYWZpaTU3NDMyPTE1OTI7ZS5hZmlpNTc0MzM9MTU5MztlLmFmaWk1NzQzND0xNTk0O2UuYWZpaTU3NDQwPTE2MDA7ZS5hZmlpNTc0NDE9MTYwMTtlLmFmaWk1NzQ0Mj0xNjAyO2UuYWZpaTU3NDQzPTE2MDM7ZS5hZmlpNTc0NDQ9MTYwNDtlLmFmaWk1NzQ0NT0xNjA1O2UuYWZpaTU3NDQ2PTE2MDY7ZS5hZmlpNTc0NDg9MTYwODtlLmFmaWk1NzQ0OT0xNjA5O2UuYWZpaTU3NDUwPTE2MTA7ZS5hZmlpNTc0NTE9MTYxMTtlLmFmaWk1NzQ1Mj0xNjEyO2UuYWZpaTU3NDUzPTE2MTM7ZS5hZmlpNTc0NTQ9MTYxNDtlLmFmaWk1NzQ1NT0xNjE1O2UuYWZpaTU3NDU2PTE2MTY7ZS5hZmlpNTc0NTc9MTYxNztlLmFmaWk1NzQ1OD0xNjE4O2UuYWZpaTU3NDcwPTE2MDc7ZS5hZmlpNTc1MDU9MTcwMDtlLmFmaWk1NzUwNj0xNjYyO2UuYWZpaTU3NTA3PTE2NzA7ZS5hZmlpNTc1MDg9MTY4ODtlLmFmaWk1NzUwOT0xNzExO2UuYWZpaTU3NTExPTE2NTc7ZS5hZmlpNTc1MTI9MTY3MjtlLmFmaWk1NzUxMz0xNjgxO2UuYWZpaTU3NTE0PTE3MjI7ZS5hZmlpNTc1MTk9MTc0NjtlLmFmaWk1NzUzND0xNzQ5O2UuYWZpaTU3NjM2PTgzNjI7ZS5hZmlpNTc2NDU9MTQ3MDtlLmFmaWk1NzY1OD0xNDc1O2UuYWZpaTU3NjY0PTE0ODg7ZS5hZmlpNTc2NjU9MTQ4OTtlLmFmaWk1NzY2Nj0xNDkwO2UuYWZpaTU3NjY3PTE0OTE7ZS5hZmlpNTc2Njg9MTQ5MjtlLmFmaWk1NzY2OT0xNDkzO2UuYWZpaTU3NjcwPTE0OTQ7ZS5hZmlpNTc2NzE9MTQ5NTtlLmFmaWk1NzY3Mj0xNDk2O2UuYWZpaTU3NjczPTE0OTc7ZS5hZmlpNTc2NzQ9MTQ5ODtlLmFmaWk1NzY3NT0xNDk5O2UuYWZpaTU3Njc2PTE1MDA7ZS5hZmlpNTc2Nzc9MTUwMTtlLmFmaWk1NzY3OD0xNTAyO2UuYWZpaTU3Njc5PTE1MDM7ZS5hZmlpNTc2ODA9MTUwNDtlLmFmaWk1NzY4MT0xNTA1O2UuYWZpaTU3NjgyPTE1MDY7ZS5hZmlpNTc2ODM9MTUwNztlLmFmaWk1NzY4ND0xNTA4O2UuYWZpaTU3Njg1PTE1MDk7ZS5hZmlpNTc2ODY9MTUxMDtlLmFmaWk1NzY4Nz0xNTExO2UuYWZpaTU3Njg4PTE1MTI7ZS5hZmlpNTc2ODk9MTUxMztlLmFmaWk1NzY5MD0xNTE0O2UuYWZpaTU3Njk0PTY0Mjk4O2UuYWZpaTU3Njk1PTY0Mjk5O2UuYWZpaTU3NzAwPTY0MzMxO2UuYWZpaTU3NzA1PTY0Mjg3O2UuYWZpaTU3NzE2PTE1MjA7ZS5hZmlpNTc3MTc9MTUyMTtlLmFmaWk1NzcxOD0xNTIyO2UuYWZpaTU3NzIzPTY0MzA5O2UuYWZpaTU3NzkzPTE0NjA7ZS5hZmlpNTc3OTQ9MTQ2MTtlLmFmaWk1Nzc5NT0xNDYyO2UuYWZpaTU3Nzk2PTE0Njc7ZS5hZmlpNTc3OTc9MTQ2NDtlLmFmaWk1Nzc5OD0xNDYzO2UuYWZpaTU3Nzk5PTE0NTY7ZS5hZmlpNTc4MDA9MTQ1ODtlLmFmaWk1NzgwMT0xNDU3O2UuYWZpaTU3ODAyPTE0NTk7ZS5hZmlpNTc4MDM9MTQ3NDtlLmFmaWk1NzgwND0xNDczO2UuYWZpaTU3ODA2PTE0NjU7ZS5hZmlpNTc4MDc9MTQ2ODtlLmFmaWk1NzgzOT0xNDY5O2UuYWZpaTU3ODQxPTE0NzE7ZS5hZmlpNTc4NDI9MTQ3MjtlLmFmaWk1NzkyOT03MDA7ZS5hZmlpNjEyNDg9ODQ1MztlLmFmaWk2MTI4OT04NDY3O2UuYWZpaTYxMzUyPTg0NzA7ZS5hZmlpNjE1NzM9ODIzNjtlLmFmaWk2MTU3ND04MjM3O2UuYWZpaTYxNTc1PTgyMzg7ZS5hZmlpNjE2NjQ9ODIwNDtlLmFmaWk2MzE2Nz0xNjQ1O2UuYWZpaTY0OTM3PTcwMTtlLmFncmF2ZT0yMjQ7ZS5hZ3VqYXJhdGk9MjY5MztlLmFndXJtdWtoaT0yNTY1O2UuYWhpcmFnYW5hPTEyMzU0O2UuYWhvb2thYm92ZT03ODQzO2UuYWliZW5nYWxpPTI0NDg7ZS5haWJvcG9tb2ZvPTEyNTc0O2UuYWlkZXZhPTIzMjA7ZS5haWVjeXJpbGxpYz0xMjM3O2UuYWlndWphcmF0aT0yNzA0O2UuYWlndXJtdWtoaT0yNTc2O2UuYWltYXRyYWd1cm11a2hpPTI2MzI7ZS5haW5hcmFiaWM9MTU5MztlLmFpbmZpbmFsYXJhYmljPTY1MjI2O2UuYWluaW5pdGlhbGFyYWJpYz02NTIyNztlLmFpbm1lZGlhbGFyYWJpYz02NTIyODtlLmFpbnZlcnRlZGJyZXZlPTUxNTtlLmFpdm93ZWxzaWduYmVuZ2FsaT0yNTA0O2UuYWl2b3dlbHNpZ25kZXZhPTIzNzY7ZS5haXZvd2Vsc2lnbmd1amFyYXRpPTI3NjA7ZS5ha2F0YWthbmE9MTI0NTA7ZS5ha2F0YWthbmFoYWxmd2lkdGg9NjUzOTM7ZS5ha29yZWFuPTEyNjIzO2UuYWxlZj0xNDg4O2UuYWxlZmFyYWJpYz0xNTc1O2UuYWxlZmRhZ2VzaGhlYnJldz02NDMwNDtlLmFsZWZmaW5hbGFyYWJpYz02NTE2NjtlLmFsZWZoYW16YWFib3ZlYXJhYmljPTE1NzE7ZS5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU2O2UuYWxlZmhhbXphYmVsb3dhcmFiaWM9MTU3MztlLmFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUxNjA7ZS5hbGVmaGVicmV3PTE0ODg7ZS5hbGVmbGFtZWRoZWJyZXc9NjQzMzU7ZS5hbGVmbWFkZGFhYm92ZWFyYWJpYz0xNTcwO2UuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTE1NDtlLmFsZWZtYWtzdXJhYXJhYmljPTE2MDk7ZS5hbGVmbWFrc3VyYWZpbmFsYXJhYmljPTY1MjY0O2UuYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljPTY1MjY3O2UuYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM9NjUyNjg7ZS5hbGVmcGF0YWhoZWJyZXc9NjQzMDI7ZS5hbGVmcWFtYXRzaGVicmV3PTY0MzAzO2UuYWxlcGg9ODUwMTtlLmFsbGVxdWFsPTg3ODA7ZS5hbHBoYT05NDU7ZS5hbHBoYXRvbm9zPTk0MDtlLmFtYWNyb249MjU3O2UuYW1vbm9zcGFjZT02NTM0NTtlLmFtcGVyc2FuZD0zODtlLmFtcGVyc2FuZG1vbm9zcGFjZT02NTI4NjtlLmFtcGVyc2FuZHNtYWxsPTYzMjcwO2UuYW1zcXVhcmU9MTMyNTA7ZS5hbmJvcG9tb2ZvPTEyNTc4O2UuYW5nYm9wb21vZm89MTI1ODA7ZS5hbmdicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2JyYWNrZXRyaWdodD0xMjI5NztlLmFuZ2toYW5raHV0aGFpPTM2NzQ7ZS5hbmdsZT04NzM2O2UuYW5nbGVicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NztlLmFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk3O2UuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4ODtlLmFuZ2xlbGVmdD05MDAxO2UuYW5nbGVyaWdodD05MDAyO2UuYW5nc3Ryb209ODQ5MTtlLmFub3RlbGVpYT05MDM7ZS5hbnVkYXR0YWRldmE9MjM4NjtlLmFudXN2YXJhYmVuZ2FsaT0yNDM0O2UuYW51c3ZhcmFkZXZhPTIzMDY7ZS5hbnVzdmFyYWd1amFyYXRpPTI2OTA7ZS5hb2dvbmVrPTI2MTtlLmFwYWF0b3NxdWFyZT0xMzA1NjtlLmFwYXJlbj05MzcyO2UuYXBvc3Ryb3BoZWFybWVuaWFuPTEzNzA7ZS5hcG9zdHJvcGhlbW9kPTcwMDtlLmFwcGxlPTYzNzQzO2UuYXBwcm9hY2hlcz04Nzg0O2UuYXBwcm94ZXF1YWw9ODc3NjtlLmFwcHJveGVxdWFsb3JpbWFnZT04Nzg2O2UuYXBwcm94aW1hdGVseWVxdWFsPTg3NzM7ZS5hcmFlYWVrb3JlYW49MTI2ODY7ZS5hcmFlYWtvcmVhbj0xMjY4NTtlLmFyYz04OTc4O2UuYXJpZ2h0aGFsZnJpbmc9NzgzNDtlLmFyaW5nPTIyOTtlLmFyaW5nYWN1dGU9NTA3O2UuYXJpbmdiZWxvdz03NjgxO2UuYXJyb3dib3RoPTg1OTY7ZS5hcnJvd2Rhc2hkb3duPTg2NzU7ZS5hcnJvd2Rhc2hsZWZ0PTg2NzI7ZS5hcnJvd2Rhc2hyaWdodD04Njc0O2UuYXJyb3dkYXNodXA9ODY3MztlLmFycm93ZGJsYm90aD04NjYwO2UuYXJyb3dkYmxkb3duPTg2NTk7ZS5hcnJvd2RibGxlZnQ9ODY1NjtlLmFycm93ZGJscmlnaHQ9ODY1ODtlLmFycm93ZGJsdXA9ODY1NztlLmFycm93ZG93bj04NTk1O2UuYXJyb3dkb3dubGVmdD04NjAxO2UuYXJyb3dkb3ducmlnaHQ9ODYwMDtlLmFycm93ZG93bndoaXRlPTg2ODE7ZS5hcnJvd2hlYWRkb3dubW9kPTcwOTtlLmFycm93aGVhZGxlZnRtb2Q9NzA2O2UuYXJyb3doZWFkcmlnaHRtb2Q9NzA3O2UuYXJyb3doZWFkdXBtb2Q9NzA4O2UuYXJyb3dob3JpemV4PTYzNzE5O2UuYXJyb3dsZWZ0PTg1OTI7ZS5hcnJvd2xlZnRkYmw9ODY1NjtlLmFycm93bGVmdGRibHN0cm9rZT04NjUzO2UuYXJyb3dsZWZ0b3ZlcnJpZ2h0PTg2NDY7ZS5hcnJvd2xlZnR3aGl0ZT04Njc4O2UuYXJyb3dyaWdodD04NTk0O2UuYXJyb3dyaWdodGRibHN0cm9rZT04NjU1O2UuYXJyb3dyaWdodGhlYXZ5PTEwMTQyO2UuYXJyb3dyaWdodG92ZXJsZWZ0PTg2NDQ7ZS5hcnJvd3JpZ2h0d2hpdGU9ODY4MDtlLmFycm93dGFibGVmdD04Njc2O2UuYXJyb3d0YWJyaWdodD04Njc3O2UuYXJyb3d1cD04NTkzO2UuYXJyb3d1cGRuPTg1OTc7ZS5hcnJvd3VwZG5ic2U9ODYxNjtlLmFycm93dXBkb3duYmFzZT04NjE2O2UuYXJyb3d1cGxlZnQ9ODU5ODtlLmFycm93dXBsZWZ0b2Zkb3duPTg2NDU7ZS5hcnJvd3VwcmlnaHQ9ODU5OTtlLmFycm93dXB3aGl0ZT04Njc5O2UuYXJyb3d2ZXJ0ZXg9NjM3MTg7ZS5hc2NpaWNpcmN1bT05NDtlLmFzY2lpY2lyY3VtbW9ub3NwYWNlPTY1MzQyO2UuYXNjaWl0aWxkZT0xMjY7ZS5hc2NpaXRpbGRlbW9ub3NwYWNlPTY1Mzc0O2UuYXNjcmlwdD01OTM7ZS5hc2NyaXB0dHVybmVkPTU5NDtlLmFzbWFsbGhpcmFnYW5hPTEyMzUzO2UuYXNtYWxsa2F0YWthbmE9MTI0NDk7ZS5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4MztlLmFzdGVyaXNrPTQyO2UuYXN0ZXJpc2thbHRvbmVhcmFiaWM9MTY0NTtlLmFzdGVyaXNrYXJhYmljPTE2NDU7ZS5hc3Rlcmlza21hdGg9ODcyNztlLmFzdGVyaXNrbW9ub3NwYWNlPTY1MjkwO2UuYXN0ZXJpc2tzbWFsbD02NTEyMTtlLmFzdGVyaXNtPTgyNTg7ZS5hc3VwZXJpb3I9NjMyMDk7ZS5hc3ltcHRvdGljYWxseWVxdWFsPTg3NzE7ZS5hdD02NDtlLmF0aWxkZT0yMjc7ZS5hdG1vbm9zcGFjZT02NTMxMjtlLmF0c21hbGw9NjUxMzE7ZS5hdHVybmVkPTU5MjtlLmF1YmVuZ2FsaT0yNDUyO2UuYXVib3BvbW9mbz0xMjU3NjtlLmF1ZGV2YT0yMzI0O2UuYXVndWphcmF0aT0yNzA4O2UuYXVndXJtdWtoaT0yNTgwO2UuYXVsZW5ndGhtYXJrYmVuZ2FsaT0yNTE5O2UuYXVtYXRyYWd1cm11a2hpPTI2MzY7ZS5hdXZvd2Vsc2lnbmJlbmdhbGk9MjUwODtlLmF1dm93ZWxzaWduZGV2YT0yMzgwO2UuYXV2b3dlbHNpZ25ndWphcmF0aT0yNzY0O2UuYXZhZ3JhaGFkZXZhPTIzNjU7ZS5heWJhcm1lbmlhbj0xMzc3O2UuYXlpbj0xNTA2O2UuYXlpbmFsdG9uZWhlYnJldz02NDI4ODtlLmF5aW5oZWJyZXc9MTUwNjtlLmI9OTg7ZS5iYWJlbmdhbGk9MjQ3NjtlLmJhY2tzbGFzaD05MjtlLmJhY2tzbGFzaG1vbm9zcGFjZT02NTM0MDtlLmJhZGV2YT0yMzQ4O2UuYmFndWphcmF0aT0yNzMyO2UuYmFndXJtdWtoaT0yNjA0O2UuYmFoaXJhZ2FuYT0xMjQwMDtlLmJhaHR0aGFpPTM2NDc7ZS5iYWthdGFrYW5hPTEyNDk2O2UuYmFyPTEyNDtlLmJhcm1vbm9zcGFjZT02NTM3MjtlLmJib3BvbW9mbz0xMjU0OTtlLmJjaXJjbGU9OTQyNTtlLmJkb3RhY2NlbnQ9NzY4MztlLmJkb3RiZWxvdz03Njg1O2UuYmVhbWVkc2l4dGVlbnRobm90ZXM9OTgzNjtlLmJlY2F1c2U9ODc1NztlLmJlY3lyaWxsaWM9MTA3MztlLmJlaGFyYWJpYz0xNTc2O2UuYmVoZmluYWxhcmFiaWM9NjUxNjg7ZS5iZWhpbml0aWFsYXJhYmljPTY1MTY5O2UuYmVoaXJhZ2FuYT0xMjQwOTtlLmJlaG1lZGlhbGFyYWJpYz02NTE3MDtlLmJlaG1lZW1pbml0aWFsYXJhYmljPTY0NjcxO2UuYmVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTIwO2UuYmVobm9vbmZpbmFsYXJhYmljPTY0NjIxO2UuYmVrYXRha2FuYT0xMjUwNTtlLmJlbmFybWVuaWFuPTEzNzg7ZS5iZXQ9MTQ4OTtlLmJldGE9OTQ2O2UuYmV0YXN5bWJvbGdyZWVrPTk3NjtlLmJldGRhZ2VzaD02NDMwNTtlLmJldGRhZ2VzaGhlYnJldz02NDMwNTtlLmJldGhlYnJldz0xNDg5O2UuYmV0cmFmZWhlYnJldz02NDMzMjtlLmJoYWJlbmdhbGk9MjQ3NztlLmJoYWRldmE9MjM0OTtlLmJoYWd1amFyYXRpPTI3MzM7ZS5iaGFndXJtdWtoaT0yNjA1O2UuYmhvb2s9NTk1O2UuYmloaXJhZ2FuYT0xMjQwMztlLmJpa2F0YWthbmE9MTI0OTk7ZS5iaWxhYmlhbGNsaWNrPTY2NDtlLmJpbmRpZ3VybXVraGk9MjU2MjtlLmJpcnVzcXVhcmU9MTMxMDU7ZS5ibGFja2NpcmNsZT05Njc5O2UuYmxhY2tkaWFtb25kPTk2NzA7ZS5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjA7ZS5ibGFja2xlZnRwb2ludGluZ3BvaW50ZXI9OTY2ODtlLmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NDtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzA0O2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MztlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMwNTtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg0O2UuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZT05Njk5O2UuYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGU9OTY5ODtlLmJsYWNrcmVjdGFuZ2xlPTk2NDQ7ZS5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyPTk2NTg7ZS5ibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU0O2UuYmxhY2tzbWFsbHNxdWFyZT05NjQyO2UuYmxhY2tzbWlsaW5nZmFjZT05Nzg3O2UuYmxhY2tzcXVhcmU9OTYzMjtlLmJsYWNrc3Rhcj05NzMzO2UuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZT05NzAwO2UuYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGU9OTcwMTtlLmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MjtlLmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlPTk2NTA7ZS5ibGFuaz05MjUxO2UuYmxpbmViZWxvdz03Njg3O2UuYmxvY2s9OTYwODtlLmJtb25vc3BhY2U9NjUzNDY7ZS5ib2JhaW1haXRoYWk9MzYxMDtlLmJvaGlyYWdhbmE9MTI0MTI7ZS5ib2thdGFrYW5hPTEyNTA4O2UuYnBhcmVuPTkzNzM7ZS5icXNxdWFyZT0xMzI1MTtlLmJyYWNlZXg9NjM3MzI7ZS5icmFjZWxlZnQ9MTIzO2UuYnJhY2VsZWZ0YnQ9NjM3MzE7ZS5icmFjZWxlZnRtaWQ9NjM3MzA7ZS5icmFjZWxlZnRtb25vc3BhY2U9NjUzNzE7ZS5icmFjZWxlZnRzbWFsbD02NTExNTtlLmJyYWNlbGVmdHRwPTYzNzI5O2UuYnJhY2VsZWZ0dmVydGljYWw9NjUwNzk7ZS5icmFjZXJpZ2h0PTEyNTtlLmJyYWNlcmlnaHRidD02Mzc0MjtlLmJyYWNlcmlnaHRtaWQ9NjM3NDE7ZS5icmFjZXJpZ2h0bW9ub3NwYWNlPTY1MzczO2UuYnJhY2VyaWdodHNtYWxsPTY1MTE2O2UuYnJhY2VyaWdodHRwPTYzNzQwO2UuYnJhY2VyaWdodHZlcnRpY2FsPTY1MDgwO2UuYnJhY2tldGxlZnQ9OTE7ZS5icmFja2V0bGVmdGJ0PTYzNzI4O2UuYnJhY2tldGxlZnRleD02MzcyNztlLmJyYWNrZXRsZWZ0bW9ub3NwYWNlPTY1MzM5O2UuYnJhY2tldGxlZnR0cD02MzcyNjtlLmJyYWNrZXRyaWdodD05MztlLmJyYWNrZXRyaWdodGJ0PTYzNzM5O2UuYnJhY2tldHJpZ2h0ZXg9NjM3Mzg7ZS5icmFja2V0cmlnaHRtb25vc3BhY2U9NjUzNDE7ZS5icmFja2V0cmlnaHR0cD02MzczNztlLmJyZXZlPTcyODtlLmJyZXZlYmVsb3djbWI9ODE0O2UuYnJldmVjbWI9Nzc0O2UuYnJldmVpbnZlcnRlZGJlbG93Y21iPTgxNTtlLmJyZXZlaW52ZXJ0ZWRjbWI9Nzg1O2UuYnJldmVpbnZlcnRlZGRvdWJsZWNtYj04NjU7ZS5icmlkZ2ViZWxvd2NtYj04MTA7ZS5icmlkZ2VpbnZlcnRlZGJlbG93Y21iPTgyNjtlLmJyb2tlbmJhcj0xNjY7ZS5ic3Ryb2tlPTM4NDtlLmJzdXBlcmlvcj02MzIxMDtlLmJ0b3BiYXI9Mzg3O2UuYnVoaXJhZ2FuYT0xMjQwNjtlLmJ1a2F0YWthbmE9MTI1MDI7ZS5idWxsZXQ9ODIyNjtlLmJ1bGxldGludmVyc2U9OTY4ODtlLmJ1bGxldG9wZXJhdG9yPTg3Mjk7ZS5idWxsc2V5ZT05Njc4O2UuYz05OTtlLmNhYXJtZW5pYW49MTM5MDtlLmNhYmVuZ2FsaT0yNDU4O2UuY2FjdXRlPTI2MztlLmNhZGV2YT0yMzMwO2UuY2FndWphcmF0aT0yNzE0O2UuY2FndXJtdWtoaT0yNTg2O2UuY2Fsc3F1YXJlPTEzMTkyO2UuY2FuZHJhYmluZHViZW5nYWxpPTI0MzM7ZS5jYW5kcmFiaW5kdWNtYj03ODQ7ZS5jYW5kcmFiaW5kdWRldmE9MjMwNTtlLmNhbmRyYWJpbmR1Z3VqYXJhdGk9MjY4OTtlLmNhcHNsb2NrPTg2ODI7ZS5jYXJlb2Y9ODQ1MztlLmNhcm9uPTcxMTtlLmNhcm9uYmVsb3djbWI9ODEyO2UuY2Fyb25jbWI9NzgwO2UuY2FycmlhZ2VyZXR1cm49ODYyOTtlLmNib3BvbW9mbz0xMjU2ODtlLmNjYXJvbj0yNjk7ZS5jY2VkaWxsYT0yMzE7ZS5jY2VkaWxsYWFjdXRlPTc2ODk7ZS5jY2lyY2xlPTk0MjY7ZS5jY2lyY3VtZmxleD0yNjU7ZS5jY3VybD01OTc7ZS5jZG90PTI2NztlLmNkb3RhY2NlbnQ9MjY3O2UuY2RzcXVhcmU9MTMyNTM7ZS5jZWRpbGxhPTE4NDtlLmNlZGlsbGFjbWI9ODA3O2UuY2VudD0xNjI7ZS5jZW50aWdyYWRlPTg0NTE7ZS5jZW50aW5mZXJpb3I9NjMxOTk7ZS5jZW50bW9ub3NwYWNlPTY1NTA0O2UuY2VudG9sZHN0eWxlPTYzMzk0O2UuY2VudHN1cGVyaW9yPTYzMjAwO2UuY2hhYXJtZW5pYW49MTQwMTtlLmNoYWJlbmdhbGk9MjQ1OTtlLmNoYWRldmE9MjMzMTtlLmNoYWd1amFyYXRpPTI3MTU7ZS5jaGFndXJtdWtoaT0yNTg3O2UuY2hib3BvbW9mbz0xMjU2NDtlLmNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTM7ZS5jaGVja21hcms9MTAwMDM7ZS5jaGVjeXJpbGxpYz0xMDk1O2UuY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNTtlLmNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDc7ZS5jaGVkaWVyZXNpc2N5cmlsbGljPTEyNjk7ZS5jaGVoYXJtZW5pYW49MTM5NTtlLmNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI4O2UuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA5O2UuY2hpPTk2NztlLmNoaWV1Y2hhY2lyY2xla29yZWFuPTEyOTE5O2UuY2hpZXVjaGFwYXJlbmtvcmVhbj0xMjgyMztlLmNoaWV1Y2hjaXJjbGVrb3JlYW49MTI5MDU7ZS5jaGlldWNoa29yZWFuPTEyNjE4O2UuY2hpZXVjaHBhcmVua29yZWFuPTEyODA5O2UuY2hvY2hhbmd0aGFpPTM1OTQ7ZS5jaG9jaGFudGhhaT0zNTkyO2UuY2hvY2hpbmd0aGFpPTM1OTM7ZS5jaG9jaG9ldGhhaT0zNTk2O2UuY2hvb2s9MzkyO2UuY2lldWNhY2lyY2xla29yZWFuPTEyOTE4O2UuY2lldWNhcGFyZW5rb3JlYW49MTI4MjI7ZS5jaWV1Y2NpcmNsZWtvcmVhbj0xMjkwNDtlLmNpZXVja29yZWFuPTEyNjE2O2UuY2lldWNwYXJlbmtvcmVhbj0xMjgwODtlLmNpZXVjdXBhcmVua29yZWFuPTEyODI4O2UuY2lyY2xlPTk2NzU7ZS5jaXJjbGVjb3B5cnQ9MTY5O2UuY2lyY2xlbXVsdGlwbHk9ODg1NTtlLmNpcmNsZW90PTg4NTc7ZS5jaXJjbGVwbHVzPTg4NTM7ZS5jaXJjbGVwb3N0YWxtYXJrPTEyMzQyO2UuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2s9OTY4MDtlLmNpcmNsZXdpdGhyaWdodGhhbGZibGFjaz05NjgxO2UuY2lyY3VtZmxleD03MTA7ZS5jaXJjdW1mbGV4YmVsb3djbWI9ODEzO2UuY2lyY3VtZmxleGNtYj03NzA7ZS5jbGVhcj04OTk5O2UuY2xpY2thbHZlb2xhcj00NTA7ZS5jbGlja2RlbnRhbD00NDg7ZS5jbGlja2xhdGVyYWw9NDQ5O2UuY2xpY2tyZXRyb2ZsZXg9NDUxO2UuY2x1Yj05ODI3O2UuY2x1YnN1aXRibGFjaz05ODI3O2UuY2x1YnN1aXR3aGl0ZT05ODMxO2UuY21jdWJlZHNxdWFyZT0xMzIyMDtlLmNtb25vc3BhY2U9NjUzNDc7ZS5jbXNxdWFyZWRzcXVhcmU9MTMyMTY7ZS5jb2FybWVuaWFuPTE0MDk7ZS5jb2xvbj01ODtlLmNvbG9ubW9uZXRhcnk9ODM1MztlLmNvbG9ubW9ub3NwYWNlPTY1MzA2O2UuY29sb25zaWduPTgzNTM7ZS5jb2xvbnNtYWxsPTY1MTA5O2UuY29sb250cmlhbmd1bGFyaGFsZm1vZD03MjE7ZS5jb2xvbnRyaWFuZ3VsYXJtb2Q9NzIwO2UuY29tbWE9NDQ7ZS5jb21tYWFib3ZlY21iPTc4NztlLmNvbW1hYWJvdmVyaWdodGNtYj03ODk7ZS5jb21tYWFjY2VudD02MzE3MTtlLmNvbW1hYXJhYmljPTE1NDg7ZS5jb21tYWFybWVuaWFuPTEzNzM7ZS5jb21tYWluZmVyaW9yPTYzMjAxO2UuY29tbWFtb25vc3BhY2U9NjUyOTI7ZS5jb21tYXJldmVyc2VkYWJvdmVjbWI9Nzg4O2UuY29tbWFyZXZlcnNlZG1vZD03MDE7ZS5jb21tYXNtYWxsPTY1MTA0O2UuY29tbWFzdXBlcmlvcj02MzIwMjtlLmNvbW1hdHVybmVkYWJvdmVjbWI9Nzg2O2UuY29tbWF0dXJuZWRtb2Q9Njk5O2UuY29tcGFzcz05Nzg4O2UuY29uZ3J1ZW50PTg3NzM7ZS5jb250b3VyaW50ZWdyYWw9ODc1MDtlLmNvbnRyb2w9ODk2MztlLmNvbnRyb2xBQ0s9NjtlLmNvbnRyb2xCRUw9NztlLmNvbnRyb2xCUz04O2UuY29udHJvbENBTj0yNDtlLmNvbnRyb2xDUj0xMztlLmNvbnRyb2xEQzE9MTc7ZS5jb250cm9sREMyPTE4O2UuY29udHJvbERDMz0xOTtlLmNvbnRyb2xEQzQ9MjA7ZS5jb250cm9sREVMPTEyNztlLmNvbnRyb2xETEU9MTY7ZS5jb250cm9sRU09MjU7ZS5jb250cm9sRU5RPTU7ZS5jb250cm9sRU9UPTQ7ZS5jb250cm9sRVNDPTI3O2UuY29udHJvbEVUQj0yMztlLmNvbnRyb2xFVFg9MztlLmNvbnRyb2xGRj0xMjtlLmNvbnRyb2xGUz0yODtlLmNvbnRyb2xHUz0yOTtlLmNvbnRyb2xIVD05O2UuY29udHJvbExGPTEwO2UuY29udHJvbE5BSz0yMTtlLmNvbnRyb2xOVUxMPTA7ZS5jb250cm9sUlM9MzA7ZS5jb250cm9sU0k9MTU7ZS5jb250cm9sU089MTQ7ZS5jb250cm9sU09UPTI7ZS5jb250cm9sU1RYPTE7ZS5jb250cm9sU1VCPTI2O2UuY29udHJvbFNZTj0yMjtlLmNvbnRyb2xVUz0zMTtlLmNvbnRyb2xWVD0xMTtlLmNvcHlyaWdodD0xNjk7ZS5jb3B5cmlnaHRzYW5zPTYzNzIxO2UuY29weXJpZ2h0c2VyaWY9NjMxOTM7ZS5jb3JuZXJicmFja2V0bGVmdD0xMjMwMDtlLmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoPTY1Mzc4O2UuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4OTtlLmNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMTtlLmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aD02NTM3OTtlLmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkwO2UuY29ycG9yYXRpb25zcXVhcmU9MTMxODM7ZS5jb3NxdWFyZT0xMzI1NTtlLmNvdmVya2dzcXVhcmU9MTMyNTQ7ZS5jcGFyZW49OTM3NDtlLmNydXplaXJvPTgzNTQ7ZS5jc3RyZXRjaGVkPTY2MztlLmN1cmx5YW5kPTg5MTE7ZS5jdXJseW9yPTg5MTA7ZS5jdXJyZW5jeT0xNjQ7ZS5jeXJCcmV2ZT02MzE4NTtlLmN5ckZsZXg9NjMxODY7ZS5jeXJicmV2ZT02MzE4ODtlLmN5cmZsZXg9NjMxODk7ZS5kPTEwMDtlLmRhYXJtZW5pYW49MTM4MDtlLmRhYmVuZ2FsaT0yNDcwO2UuZGFkYXJhYmljPTE1OTA7ZS5kYWRldmE9MjM0MjtlLmRhZGZpbmFsYXJhYmljPTY1MjE0O2UuZGFkaW5pdGlhbGFyYWJpYz02NTIxNTtlLmRhZG1lZGlhbGFyYWJpYz02NTIxNjtlLmRhZ2VzaD0xNDY4O2UuZGFnZXNoaGVicmV3PTE0Njg7ZS5kYWdnZXI9ODIyNDtlLmRhZ2dlcmRibD04MjI1O2UuZGFndWphcmF0aT0yNzI2O2UuZGFndXJtdWtoaT0yNTk4O2UuZGFoaXJhZ2FuYT0xMjM4NDtlLmRha2F0YWthbmE9MTI0ODA7ZS5kYWxhcmFiaWM9MTU4MztlLmRhbGV0PTE0OTE7ZS5kYWxldGRhZ2VzaD02NDMwNztlLmRhbGV0ZGFnZXNoaGVicmV3PTY0MzA3O2UuZGFsZXRoZWJyZXc9MTQ5MTtlLmRhbGZpbmFsYXJhYmljPTY1MTk0O2UuZGFtbWFhcmFiaWM9MTYxNTtlLmRhbW1hbG93YXJhYmljPTE2MTU7ZS5kYW1tYXRhbmFsdG9uZWFyYWJpYz0xNjEyO2UuZGFtbWF0YW5hcmFiaWM9MTYxMjtlLmRhbmRhPTI0MDQ7ZS5kYXJnYWhlYnJldz0xNDQ3O2UuZGFyZ2FsZWZ0aGVicmV3PTE0NDc7ZS5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1NztlLmRibEdyYXZlPTYzMTg3O2UuZGJsYW5nbGVicmFja2V0bGVmdD0xMjI5ODtlLmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NTtlLmRibGFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk5O2UuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NjtlLmRibGFyY2hpbnZlcnRlZGJlbG93Y21iPTgxMTtlLmRibGFycm93bGVmdD04NjYwO2UuZGJsYXJyb3dyaWdodD04NjU4O2UuZGJsZGFuZGE9MjQwNTtlLmRibGdyYXZlPTYzMTkwO2UuZGJsZ3JhdmVjbWI9NzgzO2UuZGJsaW50ZWdyYWw9ODc0ODtlLmRibGxvd2xpbmU9ODIxNTtlLmRibGxvd2xpbmVjbWI9ODE5O2UuZGJsb3ZlcmxpbmVjbWI9ODMxO2UuZGJscHJpbWVtb2Q9Njk4O2UuZGJsdmVydGljYWxiYXI9ODIxNDtlLmRibHZlcnRpY2FsbGluZWFib3ZlY21iPTc4MjtlLmRib3BvbW9mbz0xMjU1MztlLmRic3F1YXJlPTEzMjU2O2UuZGNhcm9uPTI3MTtlLmRjZWRpbGxhPTc2OTc7ZS5kY2lyY2xlPTk0Mjc7ZS5kY2lyY3VtZmxleGJlbG93PTc2OTk7ZS5kY3JvYXQ9MjczO2UuZGRhYmVuZ2FsaT0yNDY1O2UuZGRhZGV2YT0yMzM3O2UuZGRhZ3VqYXJhdGk9MjcyMTtlLmRkYWd1cm11a2hpPTI1OTM7ZS5kZGFsYXJhYmljPTE2NzI7ZS5kZGFsZmluYWxhcmFiaWM9NjQzOTM7ZS5kZGRoYWRldmE9MjM5NjtlLmRkaGFiZW5nYWxpPTI0NjY7ZS5kZGhhZGV2YT0yMzM4O2UuZGRoYWd1amFyYXRpPTI3MjI7ZS5kZGhhZ3VybXVraGk9MjU5NDtlLmRkb3RhY2NlbnQ9NzY5MTtlLmRkb3RiZWxvdz03NjkzO2UuZGVjaW1hbHNlcGFyYXRvcmFyYWJpYz0xNjQzO2UuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW49MTY0MztlLmRlY3lyaWxsaWM9MTA3NjtlLmRlZ3JlZT0xNzY7ZS5kZWhpaGVicmV3PTE0NTM7ZS5kZWhpcmFnYW5hPTEyMzkxO2UuZGVpY29wdGljPTEwMDc7ZS5kZWthdGFrYW5hPTEyNDg3O2UuZGVsZXRlbGVmdD05MDAzO2UuZGVsZXRlcmlnaHQ9ODk5ODtlLmRlbHRhPTk0ODtlLmRlbHRhdHVybmVkPTM5NztlLmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpPTI1NTI7ZS5kZXpoPTY3NjtlLmRoYWJlbmdhbGk9MjQ3MTtlLmRoYWRldmE9MjM0MztlLmRoYWd1amFyYXRpPTI3Mjc7ZS5kaGFndXJtdWtoaT0yNTk5O2UuZGhvb2s9NTk5O2UuZGlhbHl0aWthdG9ub3M9OTAxO2UuZGlhbHl0aWthdG9ub3NjbWI9ODM2O2UuZGlhbW9uZD05ODMwO2UuZGlhbW9uZHN1aXR3aGl0ZT05ODI2O2UuZGllcmVzaXM9MTY4O2UuZGllcmVzaXNhY3V0ZT02MzE5MTtlLmRpZXJlc2lzYmVsb3djbWI9ODA0O2UuZGllcmVzaXNjbWI9Nzc2O2UuZGllcmVzaXNncmF2ZT02MzE5MjtlLmRpZXJlc2lzdG9ub3M9OTAxO2UuZGloaXJhZ2FuYT0xMjM4NjtlLmRpa2F0YWthbmE9MTI0ODI7ZS5kaXR0b21hcms9MTIyOTE7ZS5kaXZpZGU9MjQ3O2UuZGl2aWRlcz04NzM5O2UuZGl2aXNpb25zbGFzaD04NzI1O2UuZGplY3lyaWxsaWM9MTEwNjtlLmRrc2hhZGU9OTYxOTtlLmRsaW5lYmVsb3c9NzY5NTtlLmRsc3F1YXJlPTEzMjA3O2UuZG1hY3Jvbj0yNzM7ZS5kbW9ub3NwYWNlPTY1MzQ4O2UuZG5ibG9jaz05NjA0O2UuZG9jaGFkYXRoYWk9MzU5ODtlLmRvZGVrdGhhaT0zNjA0O2UuZG9oaXJhZ2FuYT0xMjM5MztlLmRva2F0YWthbmE9MTI0ODk7ZS5kb2xsYXI9MzY7ZS5kb2xsYXJpbmZlcmlvcj02MzIwMztlLmRvbGxhcm1vbm9zcGFjZT02NTI4NDtlLmRvbGxhcm9sZHN0eWxlPTYzMjY4O2UuZG9sbGFyc21hbGw9NjUxMjk7ZS5kb2xsYXJzdXBlcmlvcj02MzIwNDtlLmRvbmc9ODM2MztlLmRvcnVzcXVhcmU9MTMwOTQ7ZS5kb3RhY2NlbnQ9NzI5O2UuZG90YWNjZW50Y21iPTc3NTtlLmRvdGJlbG93Y21iPTgwMztlLmRvdGJlbG93Y29tYj04MDM7ZS5kb3RrYXRha2FuYT0xMjUzOTtlLmRvdGxlc3NpPTMwNTtlLmRvdGxlc3NqPTYzMTY2O2UuZG90bGVzc2pzdHJva2Vob29rPTY0NDtlLmRvdG1hdGg9ODkwMTtlLmRvdHRlZGNpcmNsZT05Njc2O2UuZG91YmxleW9kcGF0YWg9NjQyODc7ZS5kb3VibGV5b2RwYXRhaGhlYnJldz02NDI4NztlLmRvd250YWNrYmVsb3djbWI9Nzk4O2UuZG93bnRhY2ttb2Q9NzI1O2UuZHBhcmVuPTkzNzU7ZS5kc3VwZXJpb3I9NjMyMTE7ZS5kdGFpbD01OTg7ZS5kdG9wYmFyPTM5NjtlLmR1aGlyYWdhbmE9MTIzODk7ZS5kdWthdGFrYW5hPTEyNDg1O2UuZHo9NDk5O2UuZHphbHRvbmU9Njc1O2UuZHpjYXJvbj00NTQ7ZS5kemN1cmw9Njc3O2UuZHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OTtlLmR6ZWN5cmlsbGljPTExMDk7ZS5kemhlY3lyaWxsaWM9MTExOTtlLmU9MTAxO2UuZWFjdXRlPTIzMztlLmVhcnRoPTk3OTM7ZS5lYmVuZ2FsaT0yNDQ3O2UuZWJvcG9tb2ZvPTEyNTcyO2UuZWJyZXZlPTI3NztlLmVjYW5kcmFkZXZhPTIzMTc7ZS5lY2FuZHJhZ3VqYXJhdGk9MjcwMTtlLmVjYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzM7ZS5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NztlLmVjYXJvbj0yODM7ZS5lY2VkaWxsYWJyZXZlPTc3MDk7ZS5lY2hhcm1lbmlhbj0xMzgxO2UuZWNoeWl3bmFybWVuaWFuPTE0MTU7ZS5lY2lyY2xlPTk0Mjg7ZS5lY2lyY3VtZmxleD0yMzQ7ZS5lY2lyY3VtZmxleGFjdXRlPTc4NzE7ZS5lY2lyY3VtZmxleGJlbG93PTc3MDU7ZS5lY2lyY3VtZmxleGRvdGJlbG93PTc4Nzk7ZS5lY2lyY3VtZmxleGdyYXZlPTc4NzM7ZS5lY2lyY3VtZmxleGhvb2thYm92ZT03ODc1O2UuZWNpcmN1bWZsZXh0aWxkZT03ODc3O2UuZWN5cmlsbGljPTExMDg7ZS5lZGJsZ3JhdmU9NTE3O2UuZWRldmE9MjMxOTtlLmVkaWVyZXNpcz0yMzU7ZS5lZG90PTI3OTtlLmVkb3RhY2NlbnQ9Mjc5O2UuZWRvdGJlbG93PTc4NjU7ZS5lZWd1cm11a2hpPTI1NzU7ZS5lZW1hdHJhZ3VybXVraGk9MjYzMTtlLmVmY3lyaWxsaWM9MTA5MjtlLmVncmF2ZT0yMzI7ZS5lZ3VqYXJhdGk9MjcwMztlLmVoYXJtZW5pYW49MTM4MztlLmVoYm9wb21vZm89MTI1NzM7ZS5laGlyYWdhbmE9MTIzNjA7ZS5laG9va2Fib3ZlPTc4Njc7ZS5laWJvcG9tb2ZvPTEyNTc1O2UuZWlnaHQ9NTY7ZS5laWdodGFyYWJpYz0xNjQwO2UuZWlnaHRiZW5nYWxpPTI1NDI7ZS5laWdodGNpcmNsZT05MzE5O2UuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI5O2UuZWlnaHRkZXZhPTI0MTQ7ZS5laWdodGVlbmNpcmNsZT05MzI5O2UuZWlnaHRlZW5wYXJlbj05MzQ5O2UuZWlnaHRlZW5wZXJpb2Q9OTM2OTtlLmVpZ2h0Z3VqYXJhdGk9Mjc5ODtlLmVpZ2h0Z3VybXVraGk9MjY3MDtlLmVpZ2h0aGFja2FyYWJpYz0xNjQwO2UuZWlnaHRoYW5nemhvdT0xMjMyODtlLmVpZ2h0aG5vdGViZWFtZWQ9OTgzNTtlLmVpZ2h0aWRlb2dyYXBoaWNwYXJlbj0xMjgzOTtlLmVpZ2h0aW5mZXJpb3I9ODMyODtlLmVpZ2h0bW9ub3NwYWNlPTY1MzA0O2UuZWlnaHRvbGRzdHlsZT02MzI4ODtlLmVpZ2h0cGFyZW49OTMzOTtlLmVpZ2h0cGVyaW9kPTkzNTk7ZS5laWdodHBlcnNpYW49MTc4NDtlLmVpZ2h0cm9tYW49ODU2NztlLmVpZ2h0c3VwZXJpb3I9ODMxMjtlLmVpZ2h0dGhhaT0zNjcyO2UuZWludmVydGVkYnJldmU9NTE5O2UuZWlvdGlmaWVkY3lyaWxsaWM9MTEyNTtlLmVrYXRha2FuYT0xMjQ1NjtlLmVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NjtlLmVrb25rYXJndXJtdWtoaT0yNjc2O2UuZWtvcmVhbj0xMjYyODtlLmVsY3lyaWxsaWM9MTA4MztlLmVsZW1lbnQ9ODcxMjtlLmVsZXZlbmNpcmNsZT05MzIyO2UuZWxldmVucGFyZW49OTM0MjtlLmVsZXZlbnBlcmlvZD05MzYyO2UuZWxldmVucm9tYW49ODU3MDtlLmVsbGlwc2lzPTgyMzA7ZS5lbGxpcHNpc3ZlcnRpY2FsPTg5NDI7ZS5lbWFjcm9uPTI3NTtlLmVtYWNyb25hY3V0ZT03NzAzO2UuZW1hY3JvbmdyYXZlPTc3MDE7ZS5lbWN5cmlsbGljPTEwODQ7ZS5lbWRhc2g9ODIxMjtlLmVtZGFzaHZlcnRpY2FsPTY1MDczO2UuZW1vbm9zcGFjZT02NTM0OTtlLmVtcGhhc2lzbWFya2FybWVuaWFuPTEzNzE7ZS5lbXB0eXNldD04NzA5O2UuZW5ib3BvbW9mbz0xMjU3OTtlLmVuY3lyaWxsaWM9MTA4NTtlLmVuZGFzaD04MjExO2UuZW5kYXNodmVydGljYWw9NjUwNzQ7ZS5lbmRlc2NlbmRlcmN5cmlsbGljPTExODc7ZS5lbmc9MzMxO2UuZW5nYm9wb21vZm89MTI1ODE7ZS5lbmdoZWN5cmlsbGljPTExODk7ZS5lbmhvb2tjeXJpbGxpYz0xMjI0O2UuZW5zcGFjZT04MTk0O2UuZW9nb25laz0yODE7ZS5lb2tvcmVhbj0xMjYyNztlLmVvcGVuPTYwMztlLmVvcGVuY2xvc2VkPTY2NjtlLmVvcGVucmV2ZXJzZWQ9NjA0O2UuZW9wZW5yZXZlcnNlZGNsb3NlZD02MDY7ZS5lb3BlbnJldmVyc2VkaG9vaz02MDU7ZS5lcGFyZW49OTM3NjtlLmVwc2lsb249OTQ5O2UuZXBzaWxvbnRvbm9zPTk0MTtlLmVxdWFsPTYxO2UuZXF1YWxtb25vc3BhY2U9NjUzMDk7ZS5lcXVhbHNtYWxsPTY1MTI2O2UuZXF1YWxzdXBlcmlvcj04MzE2O2UuZXF1aXZhbGVuY2U9ODgwMTtlLmVyYm9wb21vZm89MTI1ODI7ZS5lcmN5cmlsbGljPTEwODg7ZS5lcmV2ZXJzZWQ9NjAwO2UuZXJldmVyc2VkY3lyaWxsaWM9MTEwMTtlLmVzY3lyaWxsaWM9MTA4OTtlLmVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NTtlLmVzaD02NDM7ZS5lc2hjdXJsPTY0NjtlLmVzaG9ydGRldmE9MjMxODtlLmVzaG9ydHZvd2Vsc2lnbmRldmE9MjM3NDtlLmVzaHJldmVyc2VkbG9vcD00MjY7ZS5lc2hzcXVhdHJldmVyc2VkPTY0NTtlLmVzbWFsbGhpcmFnYW5hPTEyMzU5O2UuZXNtYWxsa2F0YWthbmE9MTI0NTU7ZS5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NjtlLmVzdGltYXRlZD04NDk0O2UuZXN1cGVyaW9yPTYzMjEyO2UuZXRhPTk1MTtlLmV0YXJtZW5pYW49MTM4NDtlLmV0YXRvbm9zPTk0MjtlLmV0aD0yNDA7ZS5ldGlsZGU9Nzg2OTtlLmV0aWxkZWJlbG93PTc3MDc7ZS5ldG5haHRhZm91a2hoZWJyZXc9MTQyNTtlLmV0bmFodGFmb3VraGxlZnRoZWJyZXc9MTQyNTtlLmV0bmFodGFoZWJyZXc9MTQyNTtlLmV0bmFodGFsZWZ0aGVicmV3PTE0MjU7ZS5ldHVybmVkPTQ3NztlLmV1a29yZWFuPTEyNjQxO2UuZXVybz04MzY0O2UuZXZvd2Vsc2lnbmJlbmdhbGk9MjUwMztlLmV2b3dlbHNpZ25kZXZhPTIzNzU7ZS5ldm93ZWxzaWduZ3VqYXJhdGk9Mjc1OTtlLmV4Y2xhbT0zMztlLmV4Y2xhbWFybWVuaWFuPTEzNzI7ZS5leGNsYW1kYmw9ODI1MjtlLmV4Y2xhbWRvd249MTYxO2UuZXhjbGFtZG93bnNtYWxsPTYzMzkzO2UuZXhjbGFtbW9ub3NwYWNlPTY1MjgxO2UuZXhjbGFtc21hbGw9NjMyNjU7ZS5leGlzdGVudGlhbD04NzA3O2UuZXpoPTY1ODtlLmV6aGNhcm9uPTQ5NTtlLmV6aGN1cmw9NjU5O2UuZXpocmV2ZXJzZWQ9NDQxO2UuZXpodGFpbD00NDI7ZS5mPTEwMjtlLmZhZGV2YT0yMzk4O2UuZmFndXJtdWtoaT0yNjU0O2UuZmFocmVuaGVpdD04NDU3O2UuZmF0aGFhcmFiaWM9MTYxNDtlLmZhdGhhbG93YXJhYmljPTE2MTQ7ZS5mYXRoYXRhbmFyYWJpYz0xNjExO2UuZmJvcG9tb2ZvPTEyNTUyO2UuZmNpcmNsZT05NDI5O2UuZmRvdGFjY2VudD03NzExO2UuZmVoYXJhYmljPTE2MDE7ZS5mZWhhcm1lbmlhbj0xNDE0O2UuZmVoZmluYWxhcmFiaWM9NjUyMzQ7ZS5mZWhpbml0aWFsYXJhYmljPTY1MjM1O2UuZmVobWVkaWFsYXJhYmljPTY1MjM2O2UuZmVpY29wdGljPTk5NztlLmZlbWFsZT05NzkyO2UuZmY9NjQyNTY7ZS5mX2Y9NjQyNTY7ZS5mZmk9NjQyNTk7ZS5mX2ZfaT02NDI1OTtlLmZmbD02NDI2MDtlLmZfZl9sPTY0MjYwO2UuZmk9NjQyNTc7ZS5mX2k9NjQyNTc7ZS5maWZ0ZWVuY2lyY2xlPTkzMjY7ZS5maWZ0ZWVucGFyZW49OTM0NjtlLmZpZnRlZW5wZXJpb2Q9OTM2NjtlLmZpZ3VyZWRhc2g9ODIxMDtlLmZpbGxlZGJveD05NjMyO2UuZmlsbGVkcmVjdD05NjQ0O2UuZmluYWxrYWY9MTQ5ODtlLmZpbmFsa2FmZGFnZXNoPTY0MzE0O2UuZmluYWxrYWZkYWdlc2hoZWJyZXc9NjQzMTQ7ZS5maW5hbGthZmhlYnJldz0xNDk4O2UuZmluYWxtZW09MTUwMTtlLmZpbmFsbWVtaGVicmV3PTE1MDE7ZS5maW5hbG51bj0xNTAzO2UuZmluYWxudW5oZWJyZXc9MTUwMztlLmZpbmFscGU9MTUwNztlLmZpbmFscGVoZWJyZXc9MTUwNztlLmZpbmFsdHNhZGk9MTUwOTtlLmZpbmFsdHNhZGloZWJyZXc9MTUwOTtlLmZpcnN0dG9uZWNoaW5lc2U9NzEzO2UuZmlzaGV5ZT05NjczO2UuZml0YWN5cmlsbGljPTExMzk7ZS5maXZlPTUzO2UuZml2ZWFyYWJpYz0xNjM3O2UuZml2ZWJlbmdhbGk9MjUzOTtlLmZpdmVjaXJjbGU9OTMxNjtlLmZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI2O2UuZml2ZWRldmE9MjQxMTtlLmZpdmVlaWdodGhzPTg1NDE7ZS5maXZlZ3VqYXJhdGk9Mjc5NTtlLmZpdmVndXJtdWtoaT0yNjY3O2UuZml2ZWhhY2thcmFiaWM9MTYzNztlLmZpdmVoYW5nemhvdT0xMjMyNTtlLmZpdmVpZGVvZ3JhcGhpY3BhcmVuPTEyODM2O2UuZml2ZWluZmVyaW9yPTgzMjU7ZS5maXZlbW9ub3NwYWNlPTY1MzAxO2UuZml2ZW9sZHN0eWxlPTYzMjg1O2UuZml2ZXBhcmVuPTkzMzY7ZS5maXZlcGVyaW9kPTkzNTY7ZS5maXZlcGVyc2lhbj0xNzgxO2UuZml2ZXJvbWFuPTg1NjQ7ZS5maXZlc3VwZXJpb3I9ODMwOTtlLmZpdmV0aGFpPTM2Njk7ZS5mbD02NDI1ODtlLmZfbD02NDI1ODtlLmZsb3Jpbj00MDI7ZS5mbW9ub3NwYWNlPTY1MzUwO2UuZm1zcXVhcmU9MTMyMDk7ZS5mb2ZhbnRoYWk9MzYxNTtlLmZvZmF0aGFpPTM2MTM7ZS5mb25nbWFudGhhaT0zNjYzO2UuZm9yYWxsPTg3MDQ7ZS5mb3VyPTUyO2UuZm91cmFyYWJpYz0xNjM2O2UuZm91cmJlbmdhbGk9MjUzODtlLmZvdXJjaXJjbGU9OTMxNTtlLmZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI1O2UuZm91cmRldmE9MjQxMDtlLmZvdXJndWphcmF0aT0yNzk0O2UuZm91cmd1cm11a2hpPTI2NjY7ZS5mb3VyaGFja2FyYWJpYz0xNjM2O2UuZm91cmhhbmd6aG91PTEyMzI0O2UuZm91cmlkZW9ncmFwaGljcGFyZW49MTI4MzU7ZS5mb3VyaW5mZXJpb3I9ODMyNDtlLmZvdXJtb25vc3BhY2U9NjUzMDA7ZS5mb3VybnVtZXJhdG9yYmVuZ2FsaT0yNTUxO2UuZm91cm9sZHN0eWxlPTYzMjg0O2UuZm91cnBhcmVuPTkzMzU7ZS5mb3VycGVyaW9kPTkzNTU7ZS5mb3VycGVyc2lhbj0xNzgwO2UuZm91cnJvbWFuPTg1NjM7ZS5mb3Vyc3VwZXJpb3I9ODMwODtlLmZvdXJ0ZWVuY2lyY2xlPTkzMjU7ZS5mb3VydGVlbnBhcmVuPTkzNDU7ZS5mb3VydGVlbnBlcmlvZD05MzY1O2UuZm91cnRoYWk9MzY2ODtlLmZvdXJ0aHRvbmVjaGluZXNlPTcxNTtlLmZwYXJlbj05Mzc3O2UuZnJhY3Rpb249ODI2MDtlLmZyYW5jPTgzNTU7ZS5nPTEwMztlLmdhYmVuZ2FsaT0yNDU1O2UuZ2FjdXRlPTUwMTtlLmdhZGV2YT0yMzI3O2UuZ2FmYXJhYmljPTE3MTE7ZS5nYWZmaW5hbGFyYWJpYz02NDQwMztlLmdhZmluaXRpYWxhcmFiaWM9NjQ0MDQ7ZS5nYWZtZWRpYWxhcmFiaWM9NjQ0MDU7ZS5nYWd1amFyYXRpPTI3MTE7ZS5nYWd1cm11a2hpPTI1ODM7ZS5nYWhpcmFnYW5hPTEyMzY0O2UuZ2FrYXRha2FuYT0xMjQ2MDtlLmdhbW1hPTk0NztlLmdhbW1hbGF0aW5zbWFsbD02MTE7ZS5nYW1tYXN1cGVyaW9yPTczNjtlLmdhbmdpYWNvcHRpYz0xMDAzO2UuZ2JvcG9tb2ZvPTEyNTU3O2UuZ2JyZXZlPTI4NztlLmdjYXJvbj00ODc7ZS5nY2VkaWxsYT0yOTE7ZS5nY2lyY2xlPTk0MzA7ZS5nY2lyY3VtZmxleD0yODU7ZS5nY29tbWFhY2NlbnQ9MjkxO2UuZ2RvdD0yODk7ZS5nZG90YWNjZW50PTI4OTtlLmdlY3lyaWxsaWM9MTA3NTtlLmdlaGlyYWdhbmE9MTIzNzA7ZS5nZWthdGFrYW5hPTEyNDY2O2UuZ2VvbWV0cmljYWxseWVxdWFsPTg3ODU7ZS5nZXJlc2hhY2NlbnRoZWJyZXc9MTQzNjtlLmdlcmVzaGhlYnJldz0xNTIzO2UuZ2VyZXNobXVxZGFtaGVicmV3PTE0Mzc7ZS5nZXJtYW5kYmxzPTIyMztlLmdlcnNoYXlpbWFjY2VudGhlYnJldz0xNDM4O2UuZ2Vyc2hheWltaGVicmV3PTE1MjQ7ZS5nZXRhbWFyaz0xMjMwNztlLmdoYWJlbmdhbGk9MjQ1NjtlLmdoYWRhcm1lbmlhbj0xMzk0O2UuZ2hhZGV2YT0yMzI4O2UuZ2hhZ3VqYXJhdGk9MjcxMjtlLmdoYWd1cm11a2hpPTI1ODQ7ZS5naGFpbmFyYWJpYz0xNTk0O2UuZ2hhaW5maW5hbGFyYWJpYz02NTIzMDtlLmdoYWluaW5pdGlhbGFyYWJpYz02NTIzMTtlLmdoYWlubWVkaWFsYXJhYmljPTY1MjMyO2UuZ2hlbWlkZGxlaG9va2N5cmlsbGljPTExNzM7ZS5naGVzdHJva2VjeXJpbGxpYz0xMTcxO2UuZ2hldXB0dXJuY3lyaWxsaWM9MTE2OTtlLmdoaGFkZXZhPTIzOTQ7ZS5naGhhZ3VybXVraGk9MjY1MDtlLmdob29rPTYwODtlLmdoenNxdWFyZT0xMzIwMztlLmdpaGlyYWdhbmE9MTIzNjY7ZS5naWthdGFrYW5hPTEyNDYyO2UuZ2ltYXJtZW5pYW49MTM3OTtlLmdpbWVsPTE0OTA7ZS5naW1lbGRhZ2VzaD02NDMwNjtlLmdpbWVsZGFnZXNoaGVicmV3PTY0MzA2O2UuZ2ltZWxoZWJyZXc9MTQ5MDtlLmdqZWN5cmlsbGljPTExMDc7ZS5nbG90dGFsaW52ZXJ0ZWRzdHJva2U9NDQ2O2UuZ2xvdHRhbHN0b3A9NjYwO2UuZ2xvdHRhbHN0b3BpbnZlcnRlZD02NjI7ZS5nbG90dGFsc3RvcG1vZD03MDQ7ZS5nbG90dGFsc3RvcHJldmVyc2VkPTY2MTtlLmdsb3R0YWxzdG9wcmV2ZXJzZWRtb2Q9NzA1O2UuZ2xvdHRhbHN0b3ByZXZlcnNlZHN1cGVyaW9yPTc0MDtlLmdsb3R0YWxzdG9wc3Ryb2tlPTY3MztlLmdsb3R0YWxzdG9wc3Ryb2tlcmV2ZXJzZWQ9Njc0O2UuZ21hY3Jvbj03NzEzO2UuZ21vbm9zcGFjZT02NTM1MTtlLmdvaGlyYWdhbmE9MTIzNzI7ZS5nb2thdGFrYW5hPTEyNDY4O2UuZ3BhcmVuPTkzNzg7ZS5ncGFzcXVhcmU9MTMyMjg7ZS5ncmFkaWVudD04NzExO2UuZ3JhdmU9OTY7ZS5ncmF2ZWJlbG93Y21iPTc5MDtlLmdyYXZlY21iPTc2ODtlLmdyYXZlY29tYj03Njg7ZS5ncmF2ZWRldmE9MjM4NztlLmdyYXZlbG93bW9kPTcxODtlLmdyYXZlbW9ub3NwYWNlPTY1MzQ0O2UuZ3JhdmV0b25lY21iPTgzMjtlLmdyZWF0ZXI9NjI7ZS5ncmVhdGVyZXF1YWw9ODgwNTtlLmdyZWF0ZXJlcXVhbG9ybGVzcz04OTIzO2UuZ3JlYXRlcm1vbm9zcGFjZT02NTMxMDtlLmdyZWF0ZXJvcmVxdWl2YWxlbnQ9ODgxOTtlLmdyZWF0ZXJvcmxlc3M9ODgyMztlLmdyZWF0ZXJvdmVyZXF1YWw9ODgwNztlLmdyZWF0ZXJzbWFsbD02NTEyNTtlLmdzY3JpcHQ9NjA5O2UuZ3N0cm9rZT00ODU7ZS5ndWhpcmFnYW5hPTEyMzY4O2UuZ3VpbGxlbW90bGVmdD0xNzE7ZS5ndWlsbGVtb3RyaWdodD0xODc7ZS5ndWlsc2luZ2xsZWZ0PTgyNDk7ZS5ndWlsc2luZ2xyaWdodD04MjUwO2UuZ3VrYXRha2FuYT0xMjQ2NDtlLmd1cmFtdXNxdWFyZT0xMzA4MDtlLmd5c3F1YXJlPTEzMjU3O2UuaD0xMDQ7ZS5oYWFia2hhc2lhbmN5cmlsbGljPTExOTM7ZS5oYWFsdG9uZWFyYWJpYz0xNzI5O2UuaGFiZW5nYWxpPTI0ODk7ZS5oYWRlc2NlbmRlcmN5cmlsbGljPTEyMDM7ZS5oYWRldmE9MjM2MTtlLmhhZ3VqYXJhdGk9Mjc0NTtlLmhhZ3VybXVraGk9MjYxNztlLmhhaGFyYWJpYz0xNTgxO2UuaGFoZmluYWxhcmFiaWM9NjUxODY7ZS5oYWhpbml0aWFsYXJhYmljPTY1MTg3O2UuaGFoaXJhZ2FuYT0xMjM5OTtlLmhhaG1lZGlhbGFyYWJpYz02NTE4ODtlLmhhaXR1c3F1YXJlPTEzMDk4O2UuaGFrYXRha2FuYT0xMjQ5NTtlLmhha2F0YWthbmFoYWxmd2lkdGg9NjU0MTg7ZS5oYWxhbnRndXJtdWtoaT0yNjM3O2UuaGFtemFhcmFiaWM9MTU2OTtlLmhhbXphbG93YXJhYmljPTE1Njk7ZS5oYW5ndWxmaWxsZXI9MTI2NDQ7ZS5oYXJkc2lnbmN5cmlsbGljPTEwOTg7ZS5oYXJwb29ubGVmdGJhcmJ1cD04NjM2O2UuaGFycG9vbnJpZ2h0YmFyYnVwPTg2NDA7ZS5oYXNxdWFyZT0xMzI1ODtlLmhhdGFmcGF0YWg9MTQ1ODtlLmhhdGFmcGF0YWgxNj0xNDU4O2UuaGF0YWZwYXRhaDIzPTE0NTg7ZS5oYXRhZnBhdGFoMmY9MTQ1ODtlLmhhdGFmcGF0YWhoZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhuYXJyb3doZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhxdWFydGVyaGVicmV3PTE0NTg7ZS5oYXRhZnBhdGFod2lkZWhlYnJldz0xNDU4O2UuaGF0YWZxYW1hdHM9MTQ1OTtlLmhhdGFmcWFtYXRzMWI9MTQ1OTtlLmhhdGFmcWFtYXRzMjg9MTQ1OTtlLmhhdGFmcWFtYXRzMzQ9MTQ1OTtlLmhhdGFmcWFtYXRzaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c25hcnJvd2hlYnJldz0xNDU5O2UuaGF0YWZxYW1hdHNxdWFydGVyaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c3dpZGVoZWJyZXc9MTQ1OTtlLmhhdGFmc2Vnb2w9MTQ1NztlLmhhdGFmc2Vnb2wxNz0xNDU3O2UuaGF0YWZzZWdvbDI0PTE0NTc7ZS5oYXRhZnNlZ29sMzA9MTQ1NztlLmhhdGFmc2Vnb2xoZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xuYXJyb3doZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xxdWFydGVyaGVicmV3PTE0NTc7ZS5oYXRhZnNlZ29sd2lkZWhlYnJldz0xNDU3O2UuaGJhcj0yOTU7ZS5oYm9wb21vZm89MTI1NTk7ZS5oYnJldmViZWxvdz03NzIzO2UuaGNlZGlsbGE9NzcyMTtlLmhjaXJjbGU9OTQzMTtlLmhjaXJjdW1mbGV4PTI5MztlLmhkaWVyZXNpcz03NzE5O2UuaGRvdGFjY2VudD03NzE1O2UuaGRvdGJlbG93PTc3MTc7ZS5oZT0xNDkyO2UuaGVhcnQ9OTgyOTtlLmhlYXJ0c3VpdGJsYWNrPTk4Mjk7ZS5oZWFydHN1aXR3aGl0ZT05ODI1O2UuaGVkYWdlc2g9NjQzMDg7ZS5oZWRhZ2VzaGhlYnJldz02NDMwODtlLmhlaGFsdG9uZWFyYWJpYz0xNzI5O2UuaGVoYXJhYmljPTE2MDc7ZS5oZWhlYnJldz0xNDkyO2UuaGVoZmluYWxhbHRvbmVhcmFiaWM9NjQ0MjM7ZS5oZWhmaW5hbGFsdHR3b2FyYWJpYz02NTI1ODtlLmhlaGZpbmFsYXJhYmljPTY1MjU4O2UuaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY0NDIxO2UuaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY0NDIwO2UuaGVoaW5pdGlhbGFsdG9uZWFyYWJpYz02NDQyNDtlLmhlaGluaXRpYWxhcmFiaWM9NjUyNTk7ZS5oZWhpcmFnYW5hPTEyNDA4O2UuaGVobWVkaWFsYWx0b25lYXJhYmljPTY0NDI1O2UuaGVobWVkaWFsYXJhYmljPTY1MjYwO2UuaGVpc2VpZXJhc3F1YXJlPTEzMTc5O2UuaGVrYXRha2FuYT0xMjUwNDtlLmhla2F0YWthbmFoYWxmd2lkdGg9NjU0MjE7ZS5oZWt1dGFhcnVzcXVhcmU9MTMxMTA7ZS5oZW5naG9vaz02MTU7ZS5oZXJ1dHVzcXVhcmU9MTMxMTM7ZS5oZXQ9MTQ5NTtlLmhldGhlYnJldz0xNDk1O2UuaGhvb2s9NjE0O2UuaGhvb2tzdXBlcmlvcj02ODk7ZS5oaWV1aGFjaXJjbGVrb3JlYW49MTI5MjM7ZS5oaWV1aGFwYXJlbmtvcmVhbj0xMjgyNztlLmhpZXVoY2lyY2xla29yZWFuPTEyOTA5O2UuaGlldWhrb3JlYW49MTI2MjI7ZS5oaWV1aHBhcmVua29yZWFuPTEyODEzO2UuaGloaXJhZ2FuYT0xMjQwMjtlLmhpa2F0YWthbmE9MTI0OTg7ZS5oaWthdGFrYW5haGFsZndpZHRoPTY1NDE5O2UuaGlyaXE9MTQ2MDtlLmhpcmlxMTQ9MTQ2MDtlLmhpcmlxMjE9MTQ2MDtlLmhpcmlxMmQ9MTQ2MDtlLmhpcmlxaGVicmV3PTE0NjA7ZS5oaXJpcW5hcnJvd2hlYnJldz0xNDYwO2UuaGlyaXFxdWFydGVyaGVicmV3PTE0NjA7ZS5oaXJpcXdpZGVoZWJyZXc9MTQ2MDtlLmhsaW5lYmVsb3c9NzgzMDtlLmhtb25vc3BhY2U9NjUzNTI7ZS5ob2FybWVuaWFuPTEzOTI7ZS5ob2hpcHRoYWk9MzYyNztlLmhvaGlyYWdhbmE9MTI0MTE7ZS5ob2thdGFrYW5hPTEyNTA3O2UuaG9rYXRha2FuYWhhbGZ3aWR0aD02NTQyMjtlLmhvbGFtPTE0NjU7ZS5ob2xhbTE5PTE0NjU7ZS5ob2xhbTI2PTE0NjU7ZS5ob2xhbTMyPTE0NjU7ZS5ob2xhbWhlYnJldz0xNDY1O2UuaG9sYW1uYXJyb3doZWJyZXc9MTQ2NTtlLmhvbGFtcXVhcnRlcmhlYnJldz0xNDY1O2UuaG9sYW13aWRlaGVicmV3PTE0NjU7ZS5ob25va2h1a3RoYWk9MzYzMDtlLmhvb2thYm92ZWNvbWI9Nzc3O2UuaG9va2NtYj03Nzc7ZS5ob29rcGFsYXRhbGl6ZWRiZWxvd2NtYj04MDE7ZS5ob29rcmV0cm9mbGV4YmVsb3djbWI9ODAyO2UuaG9vbnNxdWFyZT0xMzEyMjtlLmhvcmljb3B0aWM9MTAwMTtlLmhvcml6b250YWxiYXI9ODIxMztlLmhvcm5jbWI9Nzk1O2UuaG90c3ByaW5ncz05ODMyO2UuaG91c2U9ODk2MjtlLmhwYXJlbj05Mzc5O2UuaHN1cGVyaW9yPTY4ODtlLmh0dXJuZWQ9NjEzO2UuaHVoaXJhZ2FuYT0xMjQwNTtlLmh1aWl0b3NxdWFyZT0xMzEwNztlLmh1a2F0YWthbmE9MTI1MDE7ZS5odWthdGFrYW5haGFsZndpZHRoPTY1NDIwO2UuaHVuZ2FydW1sYXV0PTczMztlLmh1bmdhcnVtbGF1dGNtYj03Nzk7ZS5odj00MDU7ZS5oeXBoZW49NDU7ZS5oeXBoZW5pbmZlcmlvcj02MzIwNTtlLmh5cGhlbm1vbm9zcGFjZT02NTI5MztlLmh5cGhlbnNtYWxsPTY1MTIzO2UuaHlwaGVuc3VwZXJpb3I9NjMyMDY7ZS5oeXBoZW50d289ODIwODtlLmk9MTA1O2UuaWFjdXRlPTIzNztlLmlhY3lyaWxsaWM9MTEwMztlLmliZW5nYWxpPTI0Mzk7ZS5pYm9wb21vZm89MTI1ODM7ZS5pYnJldmU9MzAxO2UuaWNhcm9uPTQ2NDtlLmljaXJjbGU9OTQzMjtlLmljaXJjdW1mbGV4PTIzODtlLmljeXJpbGxpYz0xMTEwO2UuaWRibGdyYXZlPTUyMTtlLmlkZW9ncmFwaGVhcnRoY2lyY2xlPTEyOTQzO2UuaWRlb2dyYXBoZmlyZWNpcmNsZT0xMjkzOTtlLmlkZW9ncmFwaGljYWxsaWFuY2VwYXJlbj0xMjg2MztlLmlkZW9ncmFwaGljY2FsbHBhcmVuPTEyODU4O2UuaWRlb2dyYXBoaWNjZW50cmVjaXJjbGU9MTI5NjU7ZS5pZGVvZ3JhcGhpY2Nsb3NlPTEyMjk0O2UuaWRlb2dyYXBoaWNjb21tYT0xMjI4OTtlLmlkZW9ncmFwaGljY29tbWFsZWZ0PTY1MzgwO2UuaWRlb2dyYXBoaWNjb25ncmF0dWxhdGlvbnBhcmVuPTEyODU1O2UuaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlPTEyOTYzO2UuaWRlb2dyYXBoaWNlYXJ0aHBhcmVuPTEyODQ3O2UuaWRlb2dyYXBoaWNlbnRlcnByaXNlcGFyZW49MTI4NjE7ZS5pZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZT0xMjk1NztlLmlkZW9ncmFwaGljZmVzdGl2YWxwYXJlbj0xMjg2NDtlLmlkZW9ncmFwaGljZmluYW5jaWFsY2lyY2xlPTEyOTUwO2UuaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlbj0xMjg1NDtlLmlkZW9ncmFwaGljZmlyZXBhcmVuPTEyODQzO2UuaWRlb2dyYXBoaWNoYXZlcGFyZW49MTI4NTA7ZS5pZGVvZ3JhcGhpY2hpZ2hjaXJjbGU9MTI5NjQ7ZS5pZGVvZ3JhcGhpY2l0ZXJhdGlvbm1hcms9MTIyOTM7ZS5pZGVvZ3JhcGhpY2xhYm9yY2lyY2xlPTEyOTUyO2UuaWRlb2dyYXBoaWNsYWJvcnBhcmVuPTEyODU2O2UuaWRlb2dyYXBoaWNsZWZ0Y2lyY2xlPTEyOTY3O2UuaWRlb2dyYXBoaWNsb3djaXJjbGU9MTI5NjY7ZS5pZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlPTEyOTY5O2UuaWRlb2dyYXBoaWNtZXRhbHBhcmVuPTEyODQ2O2UuaWRlb2dyYXBoaWNtb29ucGFyZW49MTI4NDI7ZS5pZGVvZ3JhcGhpY25hbWVwYXJlbj0xMjg1MjtlLmlkZW9ncmFwaGljcGVyaW9kPTEyMjkwO2UuaWRlb2dyYXBoaWNwcmludGNpcmNsZT0xMjk1ODtlLmlkZW9ncmFwaGljcmVhY2hwYXJlbj0xMjg2NztlLmlkZW9ncmFwaGljcmVwcmVzZW50cGFyZW49MTI4NTc7ZS5pZGVvZ3JhcGhpY3Jlc291cmNlcGFyZW49MTI4NjI7ZS5pZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlPTEyOTY4O2UuaWRlb2dyYXBoaWNzZWNyZXRjaXJjbGU9MTI5NTM7ZS5pZGVvZ3JhcGhpY3NlbGZwYXJlbj0xMjg2NjtlLmlkZW9ncmFwaGljc29jaWV0eXBhcmVuPTEyODUxO2UuaWRlb2dyYXBoaWNzcGFjZT0xMjI4ODtlLmlkZW9ncmFwaGljc3BlY2lhbHBhcmVuPTEyODUzO2UuaWRlb2dyYXBoaWNzdG9ja3BhcmVuPTEyODQ5O2UuaWRlb2dyYXBoaWNzdHVkeXBhcmVuPTEyODU5O2UuaWRlb2dyYXBoaWNzdW5wYXJlbj0xMjg0ODtlLmlkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW49MTI4NjA7ZS5pZGVvZ3JhcGhpY3dhdGVycGFyZW49MTI4NDQ7ZS5pZGVvZ3JhcGhpY3dvb2RwYXJlbj0xMjg0NTtlLmlkZW9ncmFwaGljemVybz0xMjI5NTtlLmlkZW9ncmFwaG1ldGFsY2lyY2xlPTEyOTQyO2UuaWRlb2dyYXBobW9vbmNpcmNsZT0xMjkzODtlLmlkZW9ncmFwaG5hbWVjaXJjbGU9MTI5NDg7ZS5pZGVvZ3JhcGhzdW5jaXJjbGU9MTI5NDQ7ZS5pZGVvZ3JhcGh3YXRlcmNpcmNsZT0xMjk0MDtlLmlkZW9ncmFwaHdvb2RjaXJjbGU9MTI5NDE7ZS5pZGV2YT0yMzExO2UuaWRpZXJlc2lzPTIzOTtlLmlkaWVyZXNpc2FjdXRlPTc3Mjc7ZS5pZGllcmVzaXNjeXJpbGxpYz0xMjUzO2UuaWRvdGJlbG93PTc4ODM7ZS5pZWJyZXZlY3lyaWxsaWM9MTIzOTtlLmllY3lyaWxsaWM9MTA3NztlLmlldW5nYWNpcmNsZWtvcmVhbj0xMjkxNztlLmlldW5nYXBhcmVua29yZWFuPTEyODIxO2UuaWV1bmdjaXJjbGVrb3JlYW49MTI5MDM7ZS5pZXVuZ2tvcmVhbj0xMjYxNTtlLmlldW5ncGFyZW5rb3JlYW49MTI4MDc7ZS5pZ3JhdmU9MjM2O2UuaWd1amFyYXRpPTI2OTU7ZS5pZ3VybXVraGk9MjU2NztlLmloaXJhZ2FuYT0xMjM1NjtlLmlob29rYWJvdmU9Nzg4MTtlLmlpYmVuZ2FsaT0yNDQwO2UuaWljeXJpbGxpYz0xMDgwO2UuaWlkZXZhPTIzMTI7ZS5paWd1amFyYXRpPTI2OTY7ZS5paWd1cm11a2hpPTI1Njg7ZS5paW1hdHJhZ3VybXVraGk9MjYyNDtlLmlpbnZlcnRlZGJyZXZlPTUyMztlLmlpc2hvcnRjeXJpbGxpYz0xMDgxO2UuaWl2b3dlbHNpZ25iZW5nYWxpPTI0OTY7ZS5paXZvd2Vsc2lnbmRldmE9MjM2ODtlLmlpdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MjtlLmlqPTMwNztlLmlrYXRha2FuYT0xMjQ1MjtlLmlrYXRha2FuYWhhbGZ3aWR0aD02NTM5NDtlLmlrb3JlYW49MTI2NDM7ZS5pbGRlPTczMjtlLmlsdXloZWJyZXc9MTQ1MjtlLmltYWNyb249Mjk5O2UuaW1hY3JvbmN5cmlsbGljPTEyNTE7ZS5pbWFnZW9yYXBwcm94aW1hdGVseWVxdWFsPTg3ODc7ZS5pbWF0cmFndXJtdWtoaT0yNjIzO2UuaW1vbm9zcGFjZT02NTM1MztlLmluY3JlbWVudD04NzEwO2UuaW5maW5pdHk9ODczNDtlLmluaWFybWVuaWFuPTEzODc7ZS5pbnRlZ3JhbD04NzQ3O2UuaW50ZWdyYWxib3R0b209ODk5MztlLmludGVncmFsYnQ9ODk5MztlLmludGVncmFsZXg9NjM3MzM7ZS5pbnRlZ3JhbHRvcD04OTkyO2UuaW50ZWdyYWx0cD04OTkyO2UuaW50ZXJzZWN0aW9uPTg3NDU7ZS5pbnRpc3F1YXJlPTEzMDYxO2UuaW52YnVsbGV0PTk2ODg7ZS5pbnZjaXJjbGU9OTY4OTtlLmludnNtaWxlZmFjZT05Nzg3O2UuaW9jeXJpbGxpYz0xMTA1O2UuaW9nb25laz0zMDM7ZS5pb3RhPTk1MztlLmlvdGFkaWVyZXNpcz05NzA7ZS5pb3RhZGllcmVzaXN0b25vcz05MTI7ZS5pb3RhbGF0aW49NjE3O2UuaW90YXRvbm9zPTk0MztlLmlwYXJlbj05MzgwO2UuaXJpZ3VybXVraGk9MjY3NDtlLmlzbWFsbGhpcmFnYW5hPTEyMzU1O2UuaXNtYWxsa2F0YWthbmE9MTI0NTE7ZS5pc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NDtlLmlzc2hhcmJlbmdhbGk9MjU1NDtlLmlzdHJva2U9NjE2O2UuaXN1cGVyaW9yPTYzMjEzO2UuaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDU7ZS5pdGVyYXRpb25rYXRha2FuYT0xMjU0MTtlLml0aWxkZT0yOTc7ZS5pdGlsZGViZWxvdz03NzI1O2UuaXVib3BvbW9mbz0xMjU4NTtlLml1Y3lyaWxsaWM9MTEwMjtlLml2b3dlbHNpZ25iZW5nYWxpPTI0OTU7ZS5pdm93ZWxzaWduZGV2YT0yMzY3O2UuaXZvd2Vsc2lnbmd1amFyYXRpPTI3NTE7ZS5pemhpdHNhY3lyaWxsaWM9MTE0MTtlLml6aGl0c2FkYmxncmF2ZWN5cmlsbGljPTExNDM7ZS5qPTEwNjtlLmphYXJtZW5pYW49MTM5MztlLmphYmVuZ2FsaT0yNDYwO2UuamFkZXZhPTIzMzI7ZS5qYWd1amFyYXRpPTI3MTY7ZS5qYWd1cm11a2hpPTI1ODg7ZS5qYm9wb21vZm89MTI1NjA7ZS5qY2Fyb249NDk2O2UuamNpcmNsZT05NDMzO2UuamNpcmN1bWZsZXg9MzA5O2UuamNyb3NzZWR0YWlsPTY2OTtlLmpkb3RsZXNzc3Ryb2tlPTYwNztlLmplY3lyaWxsaWM9MTExMjtlLmplZW1hcmFiaWM9MTU4MDtlLmplZW1maW5hbGFyYWJpYz02NTE4MjtlLmplZW1pbml0aWFsYXJhYmljPTY1MTgzO2UuamVlbW1lZGlhbGFyYWJpYz02NTE4NDtlLmplaGFyYWJpYz0xNjg4O2UuamVoZmluYWxhcmFiaWM9NjQzOTU7ZS5qaGFiZW5nYWxpPTI0NjE7ZS5qaGFkZXZhPTIzMzM7ZS5qaGFndWphcmF0aT0yNzE3O2UuamhhZ3VybXVraGk9MjU4OTtlLmpoZWhhcm1lbmlhbj0xNDAzO2UuamlzPTEyMjkyO2Uuam1vbm9zcGFjZT02NTM1NDtlLmpwYXJlbj05MzgxO2UuanN1cGVyaW9yPTY5MDtlLms9MTA3O2Uua2FiYXNoa2lyY3lyaWxsaWM9MTE4NTtlLmthYmVuZ2FsaT0yNDUzO2Uua2FjdXRlPTc3Mjk7ZS5rYWN5cmlsbGljPTEwODI7ZS5rYWRlc2NlbmRlcmN5cmlsbGljPTExNzk7ZS5rYWRldmE9MjMyNTtlLmthZj0xNDk5O2Uua2FmYXJhYmljPTE2MDM7ZS5rYWZkYWdlc2g9NjQzMTU7ZS5rYWZkYWdlc2hoZWJyZXc9NjQzMTU7ZS5rYWZmaW5hbGFyYWJpYz02NTI0MjtlLmthZmhlYnJldz0xNDk5O2Uua2FmaW5pdGlhbGFyYWJpYz02NTI0MztlLmthZm1lZGlhbGFyYWJpYz02NTI0NDtlLmthZnJhZmVoZWJyZXc9NjQzMzM7ZS5rYWd1amFyYXRpPTI3MDk7ZS5rYWd1cm11a2hpPTI1ODE7ZS5rYWhpcmFnYW5hPTEyMzYzO2Uua2Fob29rY3lyaWxsaWM9MTIyMDtlLmtha2F0YWthbmE9MTI0NTk7ZS5rYWthdGFrYW5haGFsZndpZHRoPTY1Mzk4O2Uua2FwcGE9OTU0O2Uua2FwcGFzeW1ib2xncmVlaz0xMDA4O2Uua2FweWVvdW5taWV1bWtvcmVhbj0xMjY1NztlLmthcHllb3VucGhpZXVwaGtvcmVhbj0xMjY3NjtlLmthcHllb3VucGlldXBrb3JlYW49MTI2NjQ7ZS5rYXB5ZW91bnNzYW5ncGlldXBrb3JlYW49MTI2NjU7ZS5rYXJvcmlpc3F1YXJlPTEzMDY5O2Uua2FzaGlkYWF1dG9hcmFiaWM9MTYwMDtlLmthc2hpZGFhdXRvbm9zaWRlYmVhcmluZ2FyYWJpYz0xNjAwO2Uua2FzbWFsbGthdGFrYW5hPTEyNTMzO2Uua2FzcXVhcmU9MTMxODg7ZS5rYXNyYWFyYWJpYz0xNjE2O2Uua2FzcmF0YW5hcmFiaWM9MTYxMztlLmthc3Ryb2tlY3lyaWxsaWM9MTE4MztlLmthdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGg9NjUzOTI7ZS5rYXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTE4MTtlLmtib3BvbW9mbz0xMjU1ODtlLmtjYWxzcXVhcmU9MTMxOTM7ZS5rY2Fyb249NDg5O2Uua2NlZGlsbGE9MzExO2Uua2NpcmNsZT05NDM0O2Uua2NvbW1hYWNjZW50PTMxMTtlLmtkb3RiZWxvdz03NzMxO2Uua2VoYXJtZW5pYW49MTQxMjtlLmtlaGlyYWdhbmE9MTIzNjk7ZS5rZWthdGFrYW5hPTEyNDY1O2Uua2VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMTtlLmtlbmFybWVuaWFuPTEzOTE7ZS5rZXNtYWxsa2F0YWthbmE9MTI1MzQ7ZS5rZ3JlZW5sYW5kaWM9MzEyO2Uua2hhYmVuZ2FsaT0yNDU0O2Uua2hhY3lyaWxsaWM9MTA5MztlLmtoYWRldmE9MjMyNjtlLmtoYWd1amFyYXRpPTI3MTA7ZS5raGFndXJtdWtoaT0yNTgyO2Uua2hhaGFyYWJpYz0xNTgyO2Uua2hhaGZpbmFsYXJhYmljPTY1MTkwO2Uua2hhaGluaXRpYWxhcmFiaWM9NjUxOTE7ZS5raGFobWVkaWFsYXJhYmljPTY1MTkyO2Uua2hlaWNvcHRpYz05OTk7ZS5raGhhZGV2YT0yMzkzO2Uua2hoYWd1cm11a2hpPTI2NDk7ZS5raGlldWtoYWNpcmNsZWtvcmVhbj0xMjkyMDtlLmtoaWV1a2hhcGFyZW5rb3JlYW49MTI4MjQ7ZS5raGlldWtoY2lyY2xla29yZWFuPTEyOTA2O2Uua2hpZXVraGtvcmVhbj0xMjYxOTtlLmtoaWV1a2hwYXJlbmtvcmVhbj0xMjgxMDtlLmtob2toYWl0aGFpPTM1ODY7ZS5raG9raG9udGhhaT0zNTg5O2Uua2hva2h1YXR0aGFpPTM1ODc7ZS5raG9raHdhaXRoYWk9MzU4ODtlLmtob211dHRoYWk9MzY3NTtlLmtob29rPTQwOTtlLmtob3Jha2hhbmd0aGFpPTM1OTA7ZS5raHpzcXVhcmU9MTMyMDE7ZS5raWhpcmFnYW5hPTEyMzY1O2Uua2lrYXRha2FuYT0xMjQ2MTtlLmtpa2F0YWthbmFoYWxmd2lkdGg9NjUzOTk7ZS5raXJvZ3VyYW11c3F1YXJlPTEzMDc3O2Uua2lyb21lZXRvcnVzcXVhcmU9MTMwNzg7ZS5raXJvc3F1YXJlPTEzMDc2O2Uua2l5ZW9rYWNpcmNsZWtvcmVhbj0xMjkxMDtlLmtpeWVva2FwYXJlbmtvcmVhbj0xMjgxNDtlLmtpeWVva2NpcmNsZWtvcmVhbj0xMjg5NjtlLmtpeWVva2tvcmVhbj0xMjU5MztlLmtpeWVva3BhcmVua29yZWFuPTEyODAwO2Uua2l5ZW9rc2lvc2tvcmVhbj0xMjU5NTtlLmtqZWN5cmlsbGljPTExMTY7ZS5rbGluZWJlbG93PTc3MzM7ZS5rbHNxdWFyZT0xMzIwODtlLmttY3ViZWRzcXVhcmU9MTMyMjI7ZS5rbW9ub3NwYWNlPTY1MzU1O2Uua21zcXVhcmVkc3F1YXJlPTEzMjE4O2Uua29oaXJhZ2FuYT0xMjM3MTtlLmtvaG1zcXVhcmU9MTMyNDg7ZS5rb2thaXRoYWk9MzU4NTtlLmtva2F0YWthbmE9MTI0Njc7ZS5rb2thdGFrYW5haGFsZndpZHRoPTY1NDAyO2Uua29vcG9zcXVhcmU9MTMwODY7ZS5rb3BwYWN5cmlsbGljPTExNTM7ZS5rb3JlYW5zdGFuZGFyZHN5bWJvbD0xMjkyNztlLmtvcm9uaXNjbWI9ODM1O2Uua3BhcmVuPTkzODI7ZS5rcGFzcXVhcmU9MTMyMjY7ZS5rc2ljeXJpbGxpYz0xMTM1O2Uua3RzcXVhcmU9MTMyNjM7ZS5rdHVybmVkPTY3MDtlLmt1aGlyYWdhbmE9MTIzNjc7ZS5rdWthdGFrYW5hPTEyNDYzO2Uua3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMDtlLmt2c3F1YXJlPTEzMjQwO2Uua3dzcXVhcmU9MTMyNDY7ZS5sPTEwODtlLmxhYmVuZ2FsaT0yNDgyO2UubGFjdXRlPTMxNDtlLmxhZGV2YT0yMzU0O2UubGFndWphcmF0aT0yNzM4O2UubGFndXJtdWtoaT0yNjEwO2UubGFra2hhbmd5YW90aGFpPTM2NTM7ZS5sYW1hbGVmZmluYWxhcmFiaWM9NjUyNzY7ZS5sYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MjcyO2UubGFtYWxlZmhhbXphYWJvdmVpc29sYXRlZGFyYWJpYz02NTI3MTtlLmxhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUyNzQ7ZS5sYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljPTY1MjczO2UubGFtYWxlZmlzb2xhdGVkYXJhYmljPTY1Mjc1O2UubGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTI3MDtlLmxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjUyNjk7ZS5sYW1hcmFiaWM9MTYwNDtlLmxhbWJkYT05NTU7ZS5sYW1iZGFzdHJva2U9NDExO2UubGFtZWQ9MTUwMDtlLmxhbWVkZGFnZXNoPTY0MzE2O2UubGFtZWRkYWdlc2hoZWJyZXc9NjQzMTY7ZS5sYW1lZGhlYnJldz0xNTAwO2UubGFtZmluYWxhcmFiaWM9NjUyNDY7ZS5sYW1oYWhpbml0aWFsYXJhYmljPTY0NzE0O2UubGFtaW5pdGlhbGFyYWJpYz02NTI0NztlLmxhbWplZW1pbml0aWFsYXJhYmljPTY0NzEzO2UubGFta2hhaGluaXRpYWxhcmFiaWM9NjQ3MTU7ZS5sYW1sYW1oZWhpc29sYXRlZGFyYWJpYz02NTAxMDtlLmxhbW1lZGlhbGFyYWJpYz02NTI0ODtlLmxhbW1lZW1oYWhpbml0aWFsYXJhYmljPTY0OTA0O2UubGFtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MTY7ZS5sYXJnZWNpcmNsZT05NzExO2UubGJhcj00MTA7ZS5sYmVsdD02MjA7ZS5sYm9wb21vZm89MTI1NTY7ZS5sY2Fyb249MzE4O2UubGNlZGlsbGE9MzE2O2UubGNpcmNsZT05NDM1O2UubGNpcmN1bWZsZXhiZWxvdz03NzQxO2UubGNvbW1hYWNjZW50PTMxNjtlLmxkb3Q9MzIwO2UubGRvdGFjY2VudD0zMjA7ZS5sZG90YmVsb3c9NzczNTtlLmxkb3RiZWxvd21hY3Jvbj03NzM3O2UubGVmdGFuZ2xlYWJvdmVjbWI9Nzk0O2UubGVmdHRhY2tiZWxvd2NtYj03OTI7ZS5sZXNzPTYwO2UubGVzc2VxdWFsPTg4MDQ7ZS5sZXNzZXF1YWxvcmdyZWF0ZXI9ODkyMjtlLmxlc3Ntb25vc3BhY2U9NjUzMDg7ZS5sZXNzb3JlcXVpdmFsZW50PTg4MTg7ZS5sZXNzb3JncmVhdGVyPTg4MjI7ZS5sZXNzb3ZlcmVxdWFsPTg4MDY7ZS5sZXNzc21hbGw9NjUxMjQ7ZS5sZXpoPTYyMjtlLmxmYmxvY2s9OTYxMjtlLmxob29rcmV0cm9mbGV4PTYyMTtlLmxpcmE9ODM1NjtlLmxpd25hcm1lbmlhbj0xMzg4O2UubGo9NDU3O2UubGplY3lyaWxsaWM9MTExMztlLmxsPTYzMTY4O2UubGxhZGV2YT0yMzU1O2UubGxhZ3VqYXJhdGk9MjczOTtlLmxsaW5lYmVsb3c9NzczOTtlLmxsbGFkZXZhPTIzNTY7ZS5sbHZvY2FsaWNiZW5nYWxpPTI1Mjk7ZS5sbHZvY2FsaWNkZXZhPTI0MDE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25kZXZhPTI0MDM7ZS5sbWlkZGxldGlsZGU9NjE5O2UubG1vbm9zcGFjZT02NTM1NjtlLmxtc3F1YXJlPTEzMjY0O2UubG9jaHVsYXRoYWk9MzYyODtlLmxvZ2ljYWxhbmQ9ODc0MztlLmxvZ2ljYWxub3Q9MTcyO2UubG9naWNhbG5vdHJldmVyc2VkPTg5NzY7ZS5sb2dpY2Fsb3I9ODc0NDtlLmxvbGluZ3RoYWk9MzYyMTtlLmxvbmdzPTM4MztlLmxvd2xpbmVjZW50ZXJsaW5lPTY1MTAyO2UubG93bGluZWNtYj04MTg7ZS5sb3dsaW5lZGFzaGVkPTY1MTAxO2UubG96ZW5nZT05Njc0O2UubHBhcmVuPTkzODM7ZS5sc2xhc2g9MzIyO2UubHNxdWFyZT04NDY3O2UubHN1cGVyaW9yPTYzMjE0O2UubHRzaGFkZT05NjE3O2UubHV0aGFpPTM2MjI7ZS5sdm9jYWxpY2JlbmdhbGk9MjQ0NDtlLmx2b2NhbGljZGV2YT0yMzE2O2UubHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzA7ZS5sdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMjtlLmx4c3F1YXJlPTEzMjY3O2UubT0xMDk7ZS5tYWJlbmdhbGk9MjQ3ODtlLm1hY3Jvbj0xNzU7ZS5tYWNyb25iZWxvd2NtYj04MTc7ZS5tYWNyb25jbWI9NzcyO2UubWFjcm9ubG93bW9kPTcxNztlLm1hY3Jvbm1vbm9zcGFjZT02NTUwNztlLm1hY3V0ZT03NzQzO2UubWFkZXZhPTIzNTA7ZS5tYWd1amFyYXRpPTI3MzQ7ZS5tYWd1cm11a2hpPTI2MDY7ZS5tYWhhcGFraGhlYnJldz0xNDQ0O2UubWFoYXBha2hsZWZ0aGVicmV3PTE0NDQ7ZS5tYWhpcmFnYW5hPTEyNDE0O2UubWFpY2hhdHRhd2Fsb3dsZWZ0dGhhaT02MzYzNztlLm1haWNoYXR0YXdhbG93cmlnaHR0aGFpPTYzNjM2O2UubWFpY2hhdHRhd2F0aGFpPTM2NTk7ZS5tYWljaGF0dGF3YXVwcGVybGVmdHRoYWk9NjM2MzU7ZS5tYWlla2xvd2xlZnR0aGFpPTYzNjI4O2UubWFpZWtsb3dyaWdodHRoYWk9NjM2Mjc7ZS5tYWlla3RoYWk9MzY1NjtlLm1haWVrdXBwZXJsZWZ0dGhhaT02MzYyNjtlLm1haWhhbmFrYXRsZWZ0dGhhaT02MzYyMDtlLm1haWhhbmFrYXR0aGFpPTM2MzM7ZS5tYWl0YWlraHVsZWZ0dGhhaT02MzYyNTtlLm1haXRhaWtodXRoYWk9MzY1NTtlLm1haXRob2xvd2xlZnR0aGFpPTYzNjMxO2UubWFpdGhvbG93cmlnaHR0aGFpPTYzNjMwO2UubWFpdGhvdGhhaT0zNjU3O2UubWFpdGhvdXBwZXJsZWZ0dGhhaT02MzYyOTtlLm1haXRyaWxvd2xlZnR0aGFpPTYzNjM0O2UubWFpdHJpbG93cmlnaHR0aGFpPTYzNjMzO2UubWFpdHJpdGhhaT0zNjU4O2UubWFpdHJpdXBwZXJsZWZ0dGhhaT02MzYzMjtlLm1haXlhbW9rdGhhaT0zNjU0O2UubWFrYXRha2FuYT0xMjUxMDtlLm1ha2F0YWthbmFoYWxmd2lkdGg9NjU0MjM7ZS5tYWxlPTk3OTQ7ZS5tYW5zeW9uc3F1YXJlPTEzMTI3O2UubWFxYWZoZWJyZXc9MTQ3MDtlLm1hcnM9OTc5NDtlLm1hc29yYWNpcmNsZWhlYnJldz0xNDU1O2UubWFzcXVhcmU9MTMxODc7ZS5tYm9wb21vZm89MTI1NTE7ZS5tYnNxdWFyZT0xMzI2ODtlLm1jaXJjbGU9OTQzNjtlLm1jdWJlZHNxdWFyZT0xMzIyMTtlLm1kb3RhY2NlbnQ9Nzc0NTtlLm1kb3RiZWxvdz03NzQ3O2UubWVlbWFyYWJpYz0xNjA1O2UubWVlbWZpbmFsYXJhYmljPTY1MjUwO2UubWVlbWluaXRpYWxhcmFiaWM9NjUyNTE7ZS5tZWVtbWVkaWFsYXJhYmljPTY1MjUyO2UubWVlbW1lZW1pbml0aWFsYXJhYmljPTY0NzIxO2UubWVlbW1lZW1pc29sYXRlZGFyYWJpYz02NDU4NDtlLm1lZXRvcnVzcXVhcmU9MTMxMzM7ZS5tZWhpcmFnYW5hPTEyNDE3O2UubWVpemllcmFzcXVhcmU9MTMxODI7ZS5tZWthdGFrYW5hPTEyNTEzO2UubWVrYXRha2FuYWhhbGZ3aWR0aD02NTQyNjtlLm1lbT0xNTAyO2UubWVtZGFnZXNoPTY0MzE4O2UubWVtZGFnZXNoaGVicmV3PTY0MzE4O2UubWVtaGVicmV3PTE1MDI7ZS5tZW5hcm1lbmlhbj0xMzk2O2UubWVya2hhaGVicmV3PTE0NDU7ZS5tZXJraGFrZWZ1bGFoZWJyZXc9MTQ0NjtlLm1lcmtoYWtlZnVsYWxlZnRoZWJyZXc9MTQ0NjtlLm1lcmtoYWxlZnRoZWJyZXc9MTQ0NTtlLm1ob29rPTYyNTtlLm1oenNxdWFyZT0xMzIwMjtlLm1pZGRsZWRvdGthdGFrYW5haGFsZndpZHRoPTY1MzgxO2UubWlkZG90PTE4MztlLm1pZXVtYWNpcmNsZWtvcmVhbj0xMjkxNDtlLm1pZXVtYXBhcmVua29yZWFuPTEyODE4O2UubWlldW1jaXJjbGVrb3JlYW49MTI5MDA7ZS5taWV1bWtvcmVhbj0xMjYwOTtlLm1pZXVtcGFuc2lvc2tvcmVhbj0xMjY1NjtlLm1pZXVtcGFyZW5rb3JlYW49MTI4MDQ7ZS5taWV1bXBpZXVwa29yZWFuPTEyNjU0O2UubWlldW1zaW9za29yZWFuPTEyNjU1O2UubWloaXJhZ2FuYT0xMjQxNTtlLm1pa2F0YWthbmE9MTI1MTE7ZS5taWthdGFrYW5haGFsZndpZHRoPTY1NDI0O2UubWludXM9ODcyMjtlLm1pbnVzYmVsb3djbWI9ODAwO2UubWludXNjaXJjbGU9ODg1NDtlLm1pbnVzbW9kPTcyNztlLm1pbnVzcGx1cz04NzIzO2UubWludXRlPTgyNDI7ZS5taXJpYmFhcnVzcXVhcmU9MTMxMzA7ZS5taXJpc3F1YXJlPTEzMTI5O2UubWxvbmdsZWd0dXJuZWQ9NjI0O2UubWxzcXVhcmU9MTMyMDY7ZS5tbWN1YmVkc3F1YXJlPTEzMjE5O2UubW1vbm9zcGFjZT02NTM1NztlLm1tc3F1YXJlZHNxdWFyZT0xMzIxNTtlLm1vaGlyYWdhbmE9MTI0MTg7ZS5tb2htc3F1YXJlPTEzMjQ5O2UubW9rYXRha2FuYT0xMjUxNDtlLm1va2F0YWthbmFoYWxmd2lkdGg9NjU0Mjc7ZS5tb2xzcXVhcmU9MTMyNzA7ZS5tb21hdGhhaT0zNjE3O2UubW92ZXJzc3F1YXJlPTEzMjIzO2UubW92ZXJzc3F1YXJlZHNxdWFyZT0xMzIyNDtlLm1wYXJlbj05Mzg0O2UubXBhc3F1YXJlPTEzMjI3O2UubXNzcXVhcmU9MTMyMzU7ZS5tc3VwZXJpb3I9NjMyMTU7ZS5tdHVybmVkPTYyMztlLm11PTE4MTtlLm11MT0xODE7ZS5tdWFzcXVhcmU9MTMxODY7ZS5tdWNoZ3JlYXRlcj04ODExO2UubXVjaGxlc3M9ODgxMDtlLm11ZnNxdWFyZT0xMzE5NjtlLm11Z3JlZWs9OTU2O2UubXVnc3F1YXJlPTEzMTk3O2UubXVoaXJhZ2FuYT0xMjQxNjtlLm11a2F0YWthbmE9MTI1MTI7ZS5tdWthdGFrYW5haGFsZndpZHRoPTY1NDI1O2UubXVsc3F1YXJlPTEzMjA1O2UubXVsdGlwbHk9MjE1O2UubXVtc3F1YXJlPTEzMjExO2UubXVuYWhoZWJyZXc9MTQ0MztlLm11bmFobGVmdGhlYnJldz0xNDQzO2UubXVzaWNhbG5vdGU9OTgzNDtlLm11c2ljYWxub3RlZGJsPTk4MzU7ZS5tdXNpY2ZsYXRzaWduPTk4Mzc7ZS5tdXNpY3NoYXJwc2lnbj05ODM5O2UubXVzc3F1YXJlPTEzMjM0O2UubXV2c3F1YXJlPTEzMjM4O2UubXV3c3F1YXJlPTEzMjQ0O2UubXZtZWdhc3F1YXJlPTEzMjQxO2UubXZzcXVhcmU9MTMyMzk7ZS5td21lZ2FzcXVhcmU9MTMyNDc7ZS5td3NxdWFyZT0xMzI0NTtlLm49MTEwO2UubmFiZW5nYWxpPTI0NzI7ZS5uYWJsYT04NzExO2UubmFjdXRlPTMyNDtlLm5hZGV2YT0yMzQ0O2UubmFndWphcmF0aT0yNzI4O2UubmFndXJtdWtoaT0yNjAwO2UubmFoaXJhZ2FuYT0xMjM5NDtlLm5ha2F0YWthbmE9MTI0OTA7ZS5uYWthdGFrYW5haGFsZndpZHRoPTY1NDEzO2UubmFwb3N0cm9waGU9MzI5O2UubmFzcXVhcmU9MTMxODU7ZS5uYm9wb21vZm89MTI1NTU7ZS5uYnNwYWNlPTE2MDtlLm5jYXJvbj0zMjg7ZS5uY2VkaWxsYT0zMjY7ZS5uY2lyY2xlPTk0Mzc7ZS5uY2lyY3VtZmxleGJlbG93PTc3NTU7ZS5uY29tbWFhY2NlbnQ9MzI2O2UubmRvdGFjY2VudD03NzQ5O2UubmRvdGJlbG93PTc3NTE7ZS5uZWhpcmFnYW5hPTEyMzk3O2UubmVrYXRha2FuYT0xMjQ5MztlLm5la2F0YWthbmFoYWxmd2lkdGg9NjU0MTY7ZS5uZXdzaGVxZWxzaWduPTgzNjI7ZS5uZnNxdWFyZT0xMzE5NTtlLm5nYWJlbmdhbGk9MjQ1NztlLm5nYWRldmE9MjMyOTtlLm5nYWd1amFyYXRpPTI3MTM7ZS5uZ2FndXJtdWtoaT0yNTg1O2Uubmdvbmd1dGhhaT0zNTkxO2UubmhpcmFnYW5hPTEyNDM1O2Uubmhvb2tsZWZ0PTYyNjtlLm5ob29rcmV0cm9mbGV4PTYyNztlLm5pZXVuYWNpcmNsZWtvcmVhbj0xMjkxMTtlLm5pZXVuYXBhcmVua29yZWFuPTEyODE1O2UubmlldW5jaWV1Y2tvcmVhbj0xMjU5NztlLm5pZXVuY2lyY2xla29yZWFuPTEyODk3O2UubmlldW5oaWV1aGtvcmVhbj0xMjU5ODtlLm5pZXVua29yZWFuPTEyNTk2O2UubmlldW5wYW5zaW9za29yZWFuPTEyNjQ4O2UubmlldW5wYXJlbmtvcmVhbj0xMjgwMTtlLm5pZXVuc2lvc2tvcmVhbj0xMjY0NztlLm5pZXVudGlrZXV0a29yZWFuPTEyNjQ2O2UubmloaXJhZ2FuYT0xMjM5NTtlLm5pa2F0YWthbmE9MTI0OTE7ZS5uaWthdGFrYW5haGFsZndpZHRoPTY1NDE0O2UubmlraGFoaXRsZWZ0dGhhaT02MzY0MTtlLm5pa2hhaGl0dGhhaT0zNjYxO2UubmluZT01NztlLm5pbmVhcmFiaWM9MTY0MTtlLm5pbmViZW5nYWxpPTI1NDM7ZS5uaW5lY2lyY2xlPTkzMjA7ZS5uaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEzMDtlLm5pbmVkZXZhPTI0MTU7ZS5uaW5lZ3VqYXJhdGk9Mjc5OTtlLm5pbmVndXJtdWtoaT0yNjcxO2UubmluZWhhY2thcmFiaWM9MTY0MTtlLm5pbmVoYW5nemhvdT0xMjMyOTtlLm5pbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODQwO2UubmluZWluZmVyaW9yPTgzMjk7ZS5uaW5lbW9ub3NwYWNlPTY1MzA1O2UubmluZW9sZHN0eWxlPTYzMjg5O2UubmluZXBhcmVuPTkzNDA7ZS5uaW5lcGVyaW9kPTkzNjA7ZS5uaW5lcGVyc2lhbj0xNzg1O2UubmluZXJvbWFuPTg1Njg7ZS5uaW5lc3VwZXJpb3I9ODMxMztlLm5pbmV0ZWVuY2lyY2xlPTkzMzA7ZS5uaW5ldGVlbnBhcmVuPTkzNTA7ZS5uaW5ldGVlbnBlcmlvZD05MzcwO2UubmluZXRoYWk9MzY3MztlLm5qPTQ2MDtlLm5qZWN5cmlsbGljPTExMTQ7ZS5ua2F0YWthbmE9MTI1MzE7ZS5ua2F0YWthbmFoYWxmd2lkdGg9NjU0Mzc7ZS5ubGVncmlnaHRsb25nPTQxNDtlLm5saW5lYmVsb3c9Nzc1MztlLm5tb25vc3BhY2U9NjUzNTg7ZS5ubXNxdWFyZT0xMzIxMDtlLm5uYWJlbmdhbGk9MjQ2NztlLm5uYWRldmE9MjMzOTtlLm5uYWd1amFyYXRpPTI3MjM7ZS5ubmFndXJtdWtoaT0yNTk1O2Uubm5uYWRldmE9MjM0NTtlLm5vaGlyYWdhbmE9MTIzOTg7ZS5ub2thdGFrYW5hPTEyNDk0O2Uubm9rYXRha2FuYWhhbGZ3aWR0aD02NTQxNztlLm5vbmJyZWFraW5nc3BhY2U9MTYwO2Uubm9uZW50aGFpPTM2MDM7ZS5ub251dGhhaT0zNjA5O2Uubm9vbmFyYWJpYz0xNjA2O2Uubm9vbmZpbmFsYXJhYmljPTY1MjU0O2Uubm9vbmdodW5uYWFyYWJpYz0xNzIyO2Uubm9vbmdodW5uYWZpbmFsYXJhYmljPTY0NDE1O2Uubm9vbmluaXRpYWxhcmFiaWM9NjUyNTU7ZS5ub29uamVlbWluaXRpYWxhcmFiaWM9NjQ3MjI7ZS5ub29uamVlbWlzb2xhdGVkYXJhYmljPTY0NTg3O2Uubm9vbm1lZGlhbGFyYWJpYz02NTI1NjtlLm5vb25tZWVtaW5pdGlhbGFyYWJpYz02NDcyNTtlLm5vb25tZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1OTA7ZS5ub29ubm9vbmZpbmFsYXJhYmljPTY0NjUzO2Uubm90Y29udGFpbnM9ODcxNjtlLm5vdGVsZW1lbnQ9ODcxMztlLm5vdGVsZW1lbnRvZj04NzEzO2Uubm90ZXF1YWw9ODgwMDtlLm5vdGdyZWF0ZXI9ODgxNTtlLm5vdGdyZWF0ZXJub3JlcXVhbD04ODE3O2Uubm90Z3JlYXRlcm5vcmxlc3M9ODgyNTtlLm5vdGlkZW50aWNhbD04ODAyO2Uubm90bGVzcz04ODE0O2Uubm90bGVzc25vcmVxdWFsPTg4MTY7ZS5ub3RwYXJhbGxlbD04NzQyO2Uubm90cHJlY2VkZXM9ODgzMjtlLm5vdHN1YnNldD04ODM2O2Uubm90c3VjY2VlZHM9ODgzMztlLm5vdHN1cGVyc2V0PTg4Mzc7ZS5ub3dhcm1lbmlhbj0xMzk4O2UubnBhcmVuPTkzODU7ZS5uc3NxdWFyZT0xMzIzMztlLm5zdXBlcmlvcj04MzE5O2UubnRpbGRlPTI0MTtlLm51PTk1NztlLm51aGlyYWdhbmE9MTIzOTY7ZS5udWthdGFrYW5hPTEyNDkyO2UubnVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNTtlLm51a3RhYmVuZ2FsaT0yNDkyO2UubnVrdGFkZXZhPTIzNjQ7ZS5udWt0YWd1amFyYXRpPTI3NDg7ZS5udWt0YWd1cm11a2hpPTI2MjA7ZS5udW1iZXJzaWduPTM1O2UubnVtYmVyc2lnbm1vbm9zcGFjZT02NTI4MztlLm51bWJlcnNpZ25zbWFsbD02NTExOTtlLm51bWVyYWxzaWduZ3JlZWs9ODg0O2UubnVtZXJhbHNpZ25sb3dlcmdyZWVrPTg4NTtlLm51bWVybz04NDcwO2UubnVuPTE1MDQ7ZS5udW5kYWdlc2g9NjQzMjA7ZS5udW5kYWdlc2hoZWJyZXc9NjQzMjA7ZS5udW5oZWJyZXc9MTUwNDtlLm52c3F1YXJlPTEzMjM3O2UubndzcXVhcmU9MTMyNDM7ZS5ueWFiZW5nYWxpPTI0NjI7ZS5ueWFkZXZhPTIzMzQ7ZS5ueWFndWphcmF0aT0yNzE4O2UubnlhZ3VybXVraGk9MjU5MDtlLm89MTExO2Uub2FjdXRlPTI0MztlLm9hbmd0aGFpPTM2Mjk7ZS5vYmFycmVkPTYyOTtlLm9iYXJyZWRjeXJpbGxpYz0xMjU3O2Uub2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM9MTI1OTtlLm9iZW5nYWxpPTI0NTE7ZS5vYm9wb21vZm89MTI1NzE7ZS5vYnJldmU9MzM1O2Uub2NhbmRyYWRldmE9MjMyMTtlLm9jYW5kcmFndWphcmF0aT0yNzA1O2Uub2NhbmRyYXZvd2Vsc2lnbmRldmE9MjM3NztlLm9jYW5kcmF2b3dlbHNpZ25ndWphcmF0aT0yNzYxO2Uub2Nhcm9uPTQ2NjtlLm9jaXJjbGU9OTQzODtlLm9jaXJjdW1mbGV4PTI0NDtlLm9jaXJjdW1mbGV4YWN1dGU9Nzg4OTtlLm9jaXJjdW1mbGV4ZG90YmVsb3c9Nzg5NztlLm9jaXJjdW1mbGV4Z3JhdmU9Nzg5MTtlLm9jaXJjdW1mbGV4aG9va2Fib3ZlPTc4OTM7ZS5vY2lyY3VtZmxleHRpbGRlPTc4OTU7ZS5vY3lyaWxsaWM9MTA4NjtlLm9kYmxhY3V0ZT0zMzc7ZS5vZGJsZ3JhdmU9NTI1O2Uub2RldmE9MjMyMztlLm9kaWVyZXNpcz0yNDY7ZS5vZGllcmVzaXNjeXJpbGxpYz0xMjU1O2Uub2RvdGJlbG93PTc4ODU7ZS5vZT0zMzk7ZS5vZWtvcmVhbj0xMjYzNDtlLm9nb25laz03MzE7ZS5vZ29uZWtjbWI9ODA4O2Uub2dyYXZlPTI0MjtlLm9ndWphcmF0aT0yNzA3O2Uub2hhcm1lbmlhbj0xNDEzO2Uub2hpcmFnYW5hPTEyMzYyO2Uub2hvb2thYm92ZT03ODg3O2Uub2hvcm49NDE3O2Uub2hvcm5hY3V0ZT03ODk5O2Uub2hvcm5kb3RiZWxvdz03OTA3O2Uub2hvcm5ncmF2ZT03OTAxO2Uub2hvcm5ob29rYWJvdmU9NzkwMztlLm9ob3JudGlsZGU9NzkwNTtlLm9odW5nYXJ1bWxhdXQ9MzM3O2Uub2k9NDE5O2Uub2ludmVydGVkYnJldmU9NTI3O2Uub2thdGFrYW5hPTEyNDU4O2Uub2thdGFrYW5haGFsZndpZHRoPTY1Mzk3O2Uub2tvcmVhbj0xMjYzMTtlLm9sZWhlYnJldz0xNDUxO2Uub21hY3Jvbj0zMzM7ZS5vbWFjcm9uYWN1dGU9Nzc2MztlLm9tYWNyb25ncmF2ZT03NzYxO2Uub21kZXZhPTIzODQ7ZS5vbWVnYT05Njk7ZS5vbWVnYTE9OTgyO2Uub21lZ2FjeXJpbGxpYz0xMTIxO2Uub21lZ2FsYXRpbmNsb3NlZD02MzE7ZS5vbWVnYXJvdW5kY3lyaWxsaWM9MTE0NztlLm9tZWdhdGl0bG9jeXJpbGxpYz0xMTQ5O2Uub21lZ2F0b25vcz05NzQ7ZS5vbWd1amFyYXRpPTI3Njg7ZS5vbWljcm9uPTk1OTtlLm9taWNyb250b25vcz05NzI7ZS5vbW9ub3NwYWNlPTY1MzU5O2Uub25lPTQ5O2Uub25lYXJhYmljPTE2MzM7ZS5vbmViZW5nYWxpPTI1MzU7ZS5vbmVjaXJjbGU9OTMxMjtlLm9uZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjI7ZS5vbmVkZXZhPTI0MDc7ZS5vbmVkb3RlbmxlYWRlcj04MjI4O2Uub25lZWlnaHRoPTg1Mzk7ZS5vbmVmaXR0ZWQ9NjMxOTY7ZS5vbmVndWphcmF0aT0yNzkxO2Uub25lZ3VybXVraGk9MjY2MztlLm9uZWhhY2thcmFiaWM9MTYzMztlLm9uZWhhbGY9MTg5O2Uub25laGFuZ3pob3U9MTIzMjE7ZS5vbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODMyO2Uub25laW5mZXJpb3I9ODMyMTtlLm9uZW1vbm9zcGFjZT02NTI5NztlLm9uZW51bWVyYXRvcmJlbmdhbGk9MjU0ODtlLm9uZW9sZHN0eWxlPTYzMjgxO2Uub25lcGFyZW49OTMzMjtlLm9uZXBlcmlvZD05MzUyO2Uub25lcGVyc2lhbj0xNzc3O2Uub25lcXVhcnRlcj0xODg7ZS5vbmVyb21hbj04NTYwO2Uub25lc3VwZXJpb3I9MTg1O2Uub25ldGhhaT0zNjY1O2Uub25ldGhpcmQ9ODUzMTtlLm9vZ29uZWs9NDkxO2Uub29nb25la21hY3Jvbj00OTM7ZS5vb2d1cm11a2hpPTI1Nzk7ZS5vb21hdHJhZ3VybXVraGk9MjYzNTtlLm9vcGVuPTU5NjtlLm9wYXJlbj05Mzg2O2Uub3BlbmJ1bGxldD05NzAyO2Uub3B0aW9uPTg5OTc7ZS5vcmRmZW1pbmluZT0xNzA7ZS5vcmRtYXNjdWxpbmU9MTg2O2Uub3J0aG9nb25hbD04NzM1O2Uub3Nob3J0ZGV2YT0yMzIyO2Uub3Nob3J0dm93ZWxzaWduZGV2YT0yMzc4O2Uub3NsYXNoPTI0ODtlLm9zbGFzaGFjdXRlPTUxMTtlLm9zbWFsbGhpcmFnYW5hPTEyMzYxO2Uub3NtYWxsa2F0YWthbmE9MTI0NTc7ZS5vc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NztlLm9zdHJva2VhY3V0ZT01MTE7ZS5vc3VwZXJpb3I9NjMyMTY7ZS5vdGN5cmlsbGljPTExNTE7ZS5vdGlsZGU9MjQ1O2Uub3RpbGRlYWN1dGU9Nzc1NztlLm90aWxkZWRpZXJlc2lzPTc3NTk7ZS5vdWJvcG9tb2ZvPTEyNTc3O2Uub3ZlcmxpbmU9ODI1NDtlLm92ZXJsaW5lY2VudGVybGluZT02NTA5ODtlLm92ZXJsaW5lY21iPTc3MztlLm92ZXJsaW5lZGFzaGVkPTY1MDk3O2Uub3ZlcmxpbmVkYmx3YXZ5PTY1MTAwO2Uub3ZlcmxpbmV3YXZ5PTY1MDk5O2Uub3ZlcnNjb3JlPTE3NTtlLm92b3dlbHNpZ25iZW5nYWxpPTI1MDc7ZS5vdm93ZWxzaWduZGV2YT0yMzc5O2Uub3Zvd2Vsc2lnbmd1amFyYXRpPTI3NjM7ZS5wPTExMjtlLnBhYW1wc3NxdWFyZT0xMzE4NDtlLnBhYXNlbnRvc3F1YXJlPTEzMDk5O2UucGFiZW5nYWxpPTI0NzQ7ZS5wYWN1dGU9Nzc2NTtlLnBhZGV2YT0yMzQ2O2UucGFnZWRvd249ODY3MTtlLnBhZ2V1cD04NjcwO2UucGFndWphcmF0aT0yNzMwO2UucGFndXJtdWtoaT0yNjAyO2UucGFoaXJhZ2FuYT0xMjQwMTtlLnBhaXlhbm5vaXRoYWk9MzYzMTtlLnBha2F0YWthbmE9MTI0OTc7ZS5wYWxhdGFsaXphdGlvbmN5cmlsbGljY21iPTExNTY7ZS5wYWxvY2hrYWN5cmlsbGljPTEyMTY7ZS5wYW5zaW9za29yZWFuPTEyNjcxO2UucGFyYWdyYXBoPTE4MjtlLnBhcmFsbGVsPTg3NDE7ZS5wYXJlbmxlZnQ9NDA7ZS5wYXJlbmxlZnRhbHRvbmVhcmFiaWM9NjQ4MzA7ZS5wYXJlbmxlZnRidD02MzcyNTtlLnBhcmVubGVmdGV4PTYzNzI0O2UucGFyZW5sZWZ0aW5mZXJpb3I9ODMzMztlLnBhcmVubGVmdG1vbm9zcGFjZT02NTI4ODtlLnBhcmVubGVmdHNtYWxsPTY1MTEzO2UucGFyZW5sZWZ0c3VwZXJpb3I9ODMxNztlLnBhcmVubGVmdHRwPTYzNzIzO2UucGFyZW5sZWZ0dmVydGljYWw9NjUwNzc7ZS5wYXJlbnJpZ2h0PTQxO2UucGFyZW5yaWdodGFsdG9uZWFyYWJpYz02NDgzMTtlLnBhcmVucmlnaHRidD02MzczNjtlLnBhcmVucmlnaHRleD02MzczNTtlLnBhcmVucmlnaHRpbmZlcmlvcj04MzM0O2UucGFyZW5yaWdodG1vbm9zcGFjZT02NTI4OTtlLnBhcmVucmlnaHRzbWFsbD02NTExNDtlLnBhcmVucmlnaHRzdXBlcmlvcj04MzE4O2UucGFyZW5yaWdodHRwPTYzNzM0O2UucGFyZW5yaWdodHZlcnRpY2FsPTY1MDc4O2UucGFydGlhbGRpZmY9ODcwNjtlLnBhc2VxaGVicmV3PTE0NzI7ZS5wYXNodGFoZWJyZXc9MTQzMztlLnBhc3F1YXJlPTEzMjI1O2UucGF0YWg9MTQ2MztlLnBhdGFoMTE9MTQ2MztlLnBhdGFoMWQ9MTQ2MztlLnBhdGFoMmE9MTQ2MztlLnBhdGFoaGVicmV3PTE0NjM7ZS5wYXRhaG5hcnJvd2hlYnJldz0xNDYzO2UucGF0YWhxdWFydGVyaGVicmV3PTE0NjM7ZS5wYXRhaHdpZGVoZWJyZXc9MTQ2MztlLnBhemVyaGVicmV3PTE0NDE7ZS5wYm9wb21vZm89MTI1NTA7ZS5wY2lyY2xlPTk0Mzk7ZS5wZG90YWNjZW50PTc3Njc7ZS5wZT0xNTA4O2UucGVjeXJpbGxpYz0xMDg3O2UucGVkYWdlc2g9NjQzMjQ7ZS5wZWRhZ2VzaGhlYnJldz02NDMyNDtlLnBlZXppc3F1YXJlPTEzMTE1O2UucGVmaW5hbGRhZ2VzaGhlYnJldz02NDMyMztlLnBlaGFyYWJpYz0xNjYyO2UucGVoYXJtZW5pYW49MTQwMjtlLnBlaGVicmV3PTE1MDg7ZS5wZWhmaW5hbGFyYWJpYz02NDM0MztlLnBlaGluaXRpYWxhcmFiaWM9NjQzNDQ7ZS5wZWhpcmFnYW5hPTEyNDEwO2UucGVobWVkaWFsYXJhYmljPTY0MzQ1O2UucGVrYXRha2FuYT0xMjUwNjtlLnBlbWlkZGxlaG9va2N5cmlsbGljPTExOTE7ZS5wZXJhZmVoZWJyZXc9NjQzMzQ7ZS5wZXJjZW50PTM3O2UucGVyY2VudGFyYWJpYz0xNjQyO2UucGVyY2VudG1vbm9zcGFjZT02NTI4NTtlLnBlcmNlbnRzbWFsbD02NTEzMDtlLnBlcmlvZD00NjtlLnBlcmlvZGFybWVuaWFuPTE0MTc7ZS5wZXJpb2RjZW50ZXJlZD0xODM7ZS5wZXJpb2RoYWxmd2lkdGg9NjUzNzc7ZS5wZXJpb2RpbmZlcmlvcj02MzIwNztlLnBlcmlvZG1vbm9zcGFjZT02NTI5NDtlLnBlcmlvZHNtYWxsPTY1MTA2O2UucGVyaW9kc3VwZXJpb3I9NjMyMDg7ZS5wZXJpc3BvbWVuaWdyZWVrY21iPTgzNDtlLnBlcnBlbmRpY3VsYXI9ODg2OTtlLnBlcnRob3VzYW5kPTgyNDA7ZS5wZXNldGE9ODM1OTtlLnBmc3F1YXJlPTEzMTk0O2UucGhhYmVuZ2FsaT0yNDc1O2UucGhhZGV2YT0yMzQ3O2UucGhhZ3VqYXJhdGk9MjczMTtlLnBoYWd1cm11a2hpPTI2MDM7ZS5waGk9OTY2O2UucGhpMT05ODE7ZS5waGlldXBoYWNpcmNsZWtvcmVhbj0xMjkyMjtlLnBoaWV1cGhhcGFyZW5rb3JlYW49MTI4MjY7ZS5waGlldXBoY2lyY2xla29yZWFuPTEyOTA4O2UucGhpZXVwaGtvcmVhbj0xMjYyMTtlLnBoaWV1cGhwYXJlbmtvcmVhbj0xMjgxMjtlLnBoaWxhdGluPTYzMjtlLnBoaW50aHV0aGFpPTM2NDI7ZS5waGlzeW1ib2xncmVlaz05ODE7ZS5waG9vaz00MjE7ZS5waG9waGFudGhhaT0zNjE0O2UucGhvcGh1bmd0aGFpPTM2MTI7ZS5waG9zYW1waGFvdGhhaT0zNjE2O2UucGk9OTYwO2UucGlldXBhY2lyY2xla29yZWFuPTEyOTE1O2UucGlldXBhcGFyZW5rb3JlYW49MTI4MTk7ZS5waWV1cGNpZXVja29yZWFuPTEyNjYyO2UucGlldXBjaXJjbGVrb3JlYW49MTI5MDE7ZS5waWV1cGtpeWVva2tvcmVhbj0xMjY1ODtlLnBpZXVwa29yZWFuPTEyNjEwO2UucGlldXBwYXJlbmtvcmVhbj0xMjgwNTtlLnBpZXVwc2lvc2tpeWVva2tvcmVhbj0xMjY2MDtlLnBpZXVwc2lvc2tvcmVhbj0xMjYxMjtlLnBpZXVwc2lvc3Rpa2V1dGtvcmVhbj0xMjY2MTtlLnBpZXVwdGhpZXV0aGtvcmVhbj0xMjY2MztlLnBpZXVwdGlrZXV0a29yZWFuPTEyNjU5O2UucGloaXJhZ2FuYT0xMjQwNDtlLnBpa2F0YWthbmE9MTI1MDA7ZS5waXN5bWJvbGdyZWVrPTk4MjtlLnBpd3Jhcm1lbmlhbj0xNDExO2UucGx1cz00MztlLnBsdXNiZWxvd2NtYj03OTk7ZS5wbHVzY2lyY2xlPTg4NTM7ZS5wbHVzbWludXM9MTc3O2UucGx1c21vZD03MjY7ZS5wbHVzbW9ub3NwYWNlPTY1MjkxO2UucGx1c3NtYWxsPTY1MTIyO2UucGx1c3N1cGVyaW9yPTgzMTQ7ZS5wbW9ub3NwYWNlPTY1MzYwO2UucG1zcXVhcmU9MTMyNzI7ZS5wb2hpcmFnYW5hPTEyNDEzO2UucG9pbnRpbmdpbmRleGRvd253aGl0ZT05NzU5O2UucG9pbnRpbmdpbmRleGxlZnR3aGl0ZT05NzU2O2UucG9pbnRpbmdpbmRleHJpZ2h0d2hpdGU9OTc1ODtlLnBvaW50aW5naW5kZXh1cHdoaXRlPTk3NTc7ZS5wb2thdGFrYW5hPTEyNTA5O2UucG9wbGF0aGFpPTM2MTE7ZS5wb3N0YWxtYXJrPTEyMzA2O2UucG9zdGFsbWFya2ZhY2U9MTIzMjA7ZS5wcGFyZW49OTM4NztlLnByZWNlZGVzPTg4MjY7ZS5wcmVzY3JpcHRpb249ODQ3ODtlLnByaW1lbW9kPTY5NztlLnByaW1lcmV2ZXJzZWQ9ODI0NTtlLnByb2R1Y3Q9ODcxOTtlLnByb2plY3RpdmU9ODk2NTtlLnByb2xvbmdlZGthbmE9MTI1NDA7ZS5wcm9wZWxsb3I9ODk4NDtlLnByb3BlcnN1YnNldD04ODM0O2UucHJvcGVyc3VwZXJzZXQ9ODgzNTtlLnByb3BvcnRpb249ODc1OTtlLnByb3BvcnRpb25hbD04NzMzO2UucHNpPTk2ODtlLnBzaWN5cmlsbGljPTExMzc7ZS5wc2lsaXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1ODtlLnBzc3F1YXJlPTEzMjMyO2UucHVoaXJhZ2FuYT0xMjQwNztlLnB1a2F0YWthbmE9MTI1MDM7ZS5wdnNxdWFyZT0xMzIzNjtlLnB3c3F1YXJlPTEzMjQyO2UucT0xMTM7ZS5xYWRldmE9MjM5MjtlLnFhZG1haGVicmV3PTE0NDg7ZS5xYWZhcmFiaWM9MTYwMjtlLnFhZmZpbmFsYXJhYmljPTY1MjM4O2UucWFmaW5pdGlhbGFyYWJpYz02NTIzOTtlLnFhZm1lZGlhbGFyYWJpYz02NTI0MDtlLnFhbWF0cz0xNDY0O2UucWFtYXRzMTA9MTQ2NDtlLnFhbWF0czFhPTE0NjQ7ZS5xYW1hdHMxYz0xNDY0O2UucWFtYXRzMjc9MTQ2NDtlLnFhbWF0czI5PTE0NjQ7ZS5xYW1hdHMzMz0xNDY0O2UucWFtYXRzZGU9MTQ2NDtlLnFhbWF0c2hlYnJldz0xNDY0O2UucWFtYXRzbmFycm93aGVicmV3PTE0NjQ7ZS5xYW1hdHNxYXRhbmhlYnJldz0xNDY0O2UucWFtYXRzcWF0YW5uYXJyb3doZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFucXVhcnRlcmhlYnJldz0xNDY0O2UucWFtYXRzcWF0YW53aWRlaGVicmV3PTE0NjQ7ZS5xYW1hdHNxdWFydGVyaGVicmV3PTE0NjQ7ZS5xYW1hdHN3aWRlaGVicmV3PTE0NjQ7ZS5xYXJuZXlwYXJhaGVicmV3PTE0Mzk7ZS5xYm9wb21vZm89MTI1NjE7ZS5xY2lyY2xlPTk0NDA7ZS5xaG9vaz02NzI7ZS5xbW9ub3NwYWNlPTY1MzYxO2UucW9mPTE1MTE7ZS5xb2ZkYWdlc2g9NjQzMjc7ZS5xb2ZkYWdlc2hoZWJyZXc9NjQzMjc7ZS5xb2ZoZWJyZXc9MTUxMTtlLnFwYXJlbj05Mzg4O2UucXVhcnRlcm5vdGU9OTgzMztlLnF1YnV0cz0xNDY3O2UucXVidXRzMTg9MTQ2NztlLnF1YnV0czI1PTE0Njc7ZS5xdWJ1dHMzMT0xNDY3O2UucXVidXRzaGVicmV3PTE0Njc7ZS5xdWJ1dHNuYXJyb3doZWJyZXc9MTQ2NztlLnF1YnV0c3F1YXJ0ZXJoZWJyZXc9MTQ2NztlLnF1YnV0c3dpZGVoZWJyZXc9MTQ2NztlLnF1ZXN0aW9uPTYzO2UucXVlc3Rpb25hcmFiaWM9MTU2NztlLnF1ZXN0aW9uYXJtZW5pYW49MTM3NDtlLnF1ZXN0aW9uZG93bj0xOTE7ZS5xdWVzdGlvbmRvd25zbWFsbD02MzQyMztlLnF1ZXN0aW9uZ3JlZWs9ODk0O2UucXVlc3Rpb25tb25vc3BhY2U9NjUzMTE7ZS5xdWVzdGlvbnNtYWxsPTYzMjk1O2UucXVvdGVkYmw9MzQ7ZS5xdW90ZWRibGJhc2U9ODIyMjtlLnF1b3RlZGJsbGVmdD04MjIwO2UucXVvdGVkYmxtb25vc3BhY2U9NjUyODI7ZS5xdW90ZWRibHByaW1lPTEyMzE4O2UucXVvdGVkYmxwcmltZXJldmVyc2VkPTEyMzE3O2UucXVvdGVkYmxyaWdodD04MjIxO2UucXVvdGVsZWZ0PTgyMTY7ZS5xdW90ZWxlZnRyZXZlcnNlZD04MjE5O2UucXVvdGVyZXZlcnNlZD04MjE5O2UucXVvdGVyaWdodD04MjE3O2UucXVvdGVyaWdodG49MzI5O2UucXVvdGVzaW5nbGJhc2U9ODIxODtlLnF1b3Rlc2luZ2xlPTM5O2UucXVvdGVzaW5nbGVtb25vc3BhY2U9NjUyODc7ZS5yPTExNDtlLnJhYXJtZW5pYW49MTQwNDtlLnJhYmVuZ2FsaT0yNDgwO2UucmFjdXRlPTM0MTtlLnJhZGV2YT0yMzUyO2UucmFkaWNhbD04NzMwO2UucmFkaWNhbGV4PTYzNzE3O2UucmFkb3ZlcnNzcXVhcmU9MTMyMzA7ZS5yYWRvdmVyc3NxdWFyZWRzcXVhcmU9MTMyMzE7ZS5yYWRzcXVhcmU9MTMyMjk7ZS5yYWZlPTE0NzE7ZS5yYWZlaGVicmV3PTE0NzE7ZS5yYWd1amFyYXRpPTI3MzY7ZS5yYWd1cm11a2hpPTI2MDg7ZS5yYWhpcmFnYW5hPTEyNDI1O2UucmFrYXRha2FuYT0xMjUyMTtlLnJha2F0YWthbmFoYWxmd2lkdGg9NjU0MzE7ZS5yYWxvd2VyZGlhZ29uYWxiZW5nYWxpPTI1NDU7ZS5yYW1pZGRsZWRpYWdvbmFsYmVuZ2FsaT0yNTQ0O2UucmFtc2hvcm49NjEyO2UucmF0aW89ODc1ODtlLnJib3BvbW9mbz0xMjU2NjtlLnJjYXJvbj0zNDU7ZS5yY2VkaWxsYT0zNDM7ZS5yY2lyY2xlPTk0NDE7ZS5yY29tbWFhY2NlbnQ9MzQzO2UucmRibGdyYXZlPTUyOTtlLnJkb3RhY2NlbnQ9Nzc2OTtlLnJkb3RiZWxvdz03NzcxO2UucmRvdGJlbG93bWFjcm9uPTc3NzM7ZS5yZWZlcmVuY2VtYXJrPTgyNTE7ZS5yZWZsZXhzdWJzZXQ9ODgzODtlLnJlZmxleHN1cGVyc2V0PTg4Mzk7ZS5yZWdpc3RlcmVkPTE3NDtlLnJlZ2lzdGVyc2Fucz02MzcyMDtlLnJlZ2lzdGVyc2VyaWY9NjMxOTQ7ZS5yZWhhcmFiaWM9MTU4NTtlLnJlaGFybWVuaWFuPTE0MDg7ZS5yZWhmaW5hbGFyYWJpYz02NTE5ODtlLnJlaGlyYWdhbmE9MTI0Mjg7ZS5yZWthdGFrYW5hPTEyNTI0O2UucmVrYXRha2FuYWhhbGZ3aWR0aD02NTQzNDtlLnJlc2g9MTUxMjtlLnJlc2hkYWdlc2hoZWJyZXc9NjQzMjg7ZS5yZXNoaGVicmV3PTE1MTI7ZS5yZXZlcnNlZHRpbGRlPTg3NjU7ZS5yZXZpYWhlYnJldz0xNDMxO2UucmV2aWFtdWdyYXNoaGVicmV3PTE0MzE7ZS5yZXZsb2dpY2Fsbm90PTg5NzY7ZS5yZmlzaGhvb2s9NjM4O2UucmZpc2hob29rcmV2ZXJzZWQ9NjM5O2UucmhhYmVuZ2FsaT0yNTI1O2UucmhhZGV2YT0yMzk3O2UucmhvPTk2MTtlLnJob29rPTYzNztlLnJob29rdHVybmVkPTYzNTtlLnJob29rdHVybmVkc3VwZXJpb3I9NjkzO2Uucmhvc3ltYm9sZ3JlZWs9MTAwOTtlLnJob3RpY2hvb2ttb2Q9NzM0O2UucmlldWxhY2lyY2xla29yZWFuPTEyOTEzO2UucmlldWxhcGFyZW5rb3JlYW49MTI4MTc7ZS5yaWV1bGNpcmNsZWtvcmVhbj0xMjg5OTtlLnJpZXVsaGlldWhrb3JlYW49MTI2MDg7ZS5yaWV1bGtpeWVva2tvcmVhbj0xMjYwMjtlLnJpZXVsa2l5ZW9rc2lvc2tvcmVhbj0xMjY0OTtlLnJpZXVsa29yZWFuPTEyNjAxO2UucmlldWxtaWV1bWtvcmVhbj0xMjYwMztlLnJpZXVscGFuc2lvc2tvcmVhbj0xMjY1MjtlLnJpZXVscGFyZW5rb3JlYW49MTI4MDM7ZS5yaWV1bHBoaWV1cGhrb3JlYW49MTI2MDc7ZS5yaWV1bHBpZXVwa29yZWFuPTEyNjA0O2UucmlldWxwaWV1cHNpb3Nrb3JlYW49MTI2NTE7ZS5yaWV1bHNpb3Nrb3JlYW49MTI2MDU7ZS5yaWV1bHRoaWV1dGhrb3JlYW49MTI2MDY7ZS5yaWV1bHRpa2V1dGtvcmVhbj0xMjY1MDtlLnJpZXVseWVvcmluaGlldWhrb3JlYW49MTI2NTM7ZS5yaWdodGFuZ2xlPTg3MzU7ZS5yaWdodHRhY2tiZWxvd2NtYj03OTM7ZS5yaWdodHRyaWFuZ2xlPTg4OTU7ZS5yaWhpcmFnYW5hPTEyNDI2O2UucmlrYXRha2FuYT0xMjUyMjtlLnJpa2F0YWthbmFoYWxmd2lkdGg9NjU0MzI7ZS5yaW5nPTczMDtlLnJpbmdiZWxvd2NtYj04MDU7ZS5yaW5nY21iPTc3ODtlLnJpbmdoYWxmbGVmdD03MDM7ZS5yaW5naGFsZmxlZnRhcm1lbmlhbj0xMzY5O2UucmluZ2hhbGZsZWZ0YmVsb3djbWI9Nzk2O2UucmluZ2hhbGZsZWZ0Y2VudGVyZWQ9NzIzO2UucmluZ2hhbGZyaWdodD03MDI7ZS5yaW5naGFsZnJpZ2h0YmVsb3djbWI9ODI1O2UucmluZ2hhbGZyaWdodGNlbnRlcmVkPTcyMjtlLnJpbnZlcnRlZGJyZXZlPTUzMTtlLnJpdHRvcnVzcXVhcmU9MTMxMzc7ZS5ybGluZWJlbG93PTc3NzU7ZS5ybG9uZ2xlZz02MzY7ZS5ybG9uZ2xlZ3R1cm5lZD02MzQ7ZS5ybW9ub3NwYWNlPTY1MzYyO2Uucm9oaXJhZ2FuYT0xMjQyOTtlLnJva2F0YWthbmE9MTI1MjU7ZS5yb2thdGFrYW5haGFsZndpZHRoPTY1NDM1O2Uucm9ydWF0aGFpPTM2MTk7ZS5ycGFyZW49OTM4OTtlLnJyYWJlbmdhbGk9MjUyNDtlLnJyYWRldmE9MjM1MztlLnJyYWd1cm11a2hpPTI2NTI7ZS5ycmVoYXJhYmljPTE2ODE7ZS5ycmVoZmluYWxhcmFiaWM9NjQzOTc7ZS5ycnZvY2FsaWNiZW5nYWxpPTI1Mjg7ZS5ycnZvY2FsaWNkZXZhPTI0MDA7ZS5ycnZvY2FsaWNndWphcmF0aT0yNzg0O2UucnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaT0yNTAwO2UucnJ2b2NhbGljdm93ZWxzaWduZGV2YT0yMzcyO2UucnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NjtlLnJzdXBlcmlvcj02MzIxNztlLnJ0YmxvY2s9OTYxNjtlLnJ0dXJuZWQ9NjMzO2UucnR1cm5lZHN1cGVyaW9yPTY5MjtlLnJ1aGlyYWdhbmE9MTI0Mjc7ZS5ydWthdGFrYW5hPTEyNTIzO2UucnVrYXRha2FuYWhhbGZ3aWR0aD02NTQzMztlLnJ1cGVlbWFya2JlbmdhbGk9MjU0NjtlLnJ1cGVlc2lnbmJlbmdhbGk9MjU0NztlLnJ1cGlhaD02MzE5NztlLnJ1dGhhaT0zNjIwO2UucnZvY2FsaWNiZW5nYWxpPTI0NDM7ZS5ydm9jYWxpY2RldmE9MjMxNTtlLnJ2b2NhbGljZ3VqYXJhdGk9MjY5OTtlLnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaT0yNDk5O2UucnZvY2FsaWN2b3dlbHNpZ25kZXZhPTIzNzE7ZS5ydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpPTI3NTU7ZS5zPTExNTtlLnNhYmVuZ2FsaT0yNDg4O2Uuc2FjdXRlPTM0NztlLnNhY3V0ZWRvdGFjY2VudD03NzgxO2Uuc2FkYXJhYmljPTE1ODk7ZS5zYWRldmE9MjM2MDtlLnNhZGZpbmFsYXJhYmljPTY1MjEwO2Uuc2FkaW5pdGlhbGFyYWJpYz02NTIxMTtlLnNhZG1lZGlhbGFyYWJpYz02NTIxMjtlLnNhZ3VqYXJhdGk9Mjc0NDtlLnNhZ3VybXVraGk9MjYxNjtlLnNhaGlyYWdhbmE9MTIzNzM7ZS5zYWthdGFrYW5hPTEyNDY5O2Uuc2FrYXRha2FuYWhhbGZ3aWR0aD02NTQwMztlLnNhbGxhbGxhaG91YWxheWhld2FzYWxsYW1hcmFiaWM9NjUwMTg7ZS5zYW1la2g9MTUwNTtlLnNhbWVraGRhZ2VzaD02NDMyMTtlLnNhbWVraGRhZ2VzaGhlYnJldz02NDMyMTtlLnNhbWVraGhlYnJldz0xNTA1O2Uuc2FyYWFhdGhhaT0zNjM0O2Uuc2FyYWFldGhhaT0zNjQ5O2Uuc2FyYWFpbWFpbWFsYWl0aGFpPTM2NTI7ZS5zYXJhYWltYWltdWFudGhhaT0zNjUxO2Uuc2FyYWFtdGhhaT0zNjM1O2Uuc2FyYWF0aGFpPTM2MzI7ZS5zYXJhZXRoYWk9MzY0ODtlLnNhcmFpaWxlZnR0aGFpPTYzNjIyO2Uuc2FyYWlpdGhhaT0zNjM3O2Uuc2FyYWlsZWZ0dGhhaT02MzYyMTtlLnNhcmFpdGhhaT0zNjM2O2Uuc2FyYW90aGFpPTM2NTA7ZS5zYXJhdWVlbGVmdHRoYWk9NjM2MjQ7ZS5zYXJhdWVldGhhaT0zNjM5O2Uuc2FyYXVlbGVmdHRoYWk9NjM2MjM7ZS5zYXJhdWV0aGFpPTM2Mzg7ZS5zYXJhdXRoYWk9MzY0MDtlLnNhcmF1dXRoYWk9MzY0MTtlLnNib3BvbW9mbz0xMjU2OTtlLnNjYXJvbj0zNTM7ZS5zY2Fyb25kb3RhY2NlbnQ9Nzc4MztlLnNjZWRpbGxhPTM1MTtlLnNjaHdhPTYwMTtlLnNjaHdhY3lyaWxsaWM9MTI0MTtlLnNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQzO2Uuc2Nod2Fob29rPTYwMjtlLnNjaXJjbGU9OTQ0MjtlLnNjaXJjdW1mbGV4PTM0OTtlLnNjb21tYWFjY2VudD01Mzc7ZS5zZG90YWNjZW50PTc3Nzc7ZS5zZG90YmVsb3c9Nzc3OTtlLnNkb3RiZWxvd2RvdGFjY2VudD03Nzg1O2Uuc2VhZ3VsbGJlbG93Y21iPTgyODtlLnNlY29uZD04MjQzO2Uuc2Vjb25kdG9uZWNoaW5lc2U9NzE0O2Uuc2VjdGlvbj0xNjc7ZS5zZWVuYXJhYmljPTE1ODc7ZS5zZWVuZmluYWxhcmFiaWM9NjUyMDI7ZS5zZWVuaW5pdGlhbGFyYWJpYz02NTIwMztlLnNlZW5tZWRpYWxhcmFiaWM9NjUyMDQ7ZS5zZWdvbD0xNDYyO2Uuc2Vnb2wxMz0xNDYyO2Uuc2Vnb2wxZj0xNDYyO2Uuc2Vnb2wyYz0xNDYyO2Uuc2Vnb2xoZWJyZXc9MTQ2MjtlLnNlZ29sbmFycm93aGVicmV3PTE0NjI7ZS5zZWdvbHF1YXJ0ZXJoZWJyZXc9MTQ2MjtlLnNlZ29sdGFoZWJyZXc9MTQyNjtlLnNlZ29sd2lkZWhlYnJldz0xNDYyO2Uuc2VoYXJtZW5pYW49MTQwNTtlLnNlaGlyYWdhbmE9MTIzNzk7ZS5zZWthdGFrYW5hPTEyNDc1O2Uuc2VrYXRha2FuYWhhbGZ3aWR0aD02NTQwNjtlLnNlbWljb2xvbj01OTtlLnNlbWljb2xvbmFyYWJpYz0xNTYzO2Uuc2VtaWNvbG9ubW9ub3NwYWNlPTY1MzA3O2Uuc2VtaWNvbG9uc21hbGw9NjUxMDg7ZS5zZW1pdm9pY2VkbWFya2thbmE9MTI0NDQ7ZS5zZW1pdm9pY2VkbWFya2thbmFoYWxmd2lkdGg9NjU0Mzk7ZS5zZW50aXNxdWFyZT0xMzA5MDtlLnNlbnRvc3F1YXJlPTEzMDkxO2Uuc2V2ZW49NTU7ZS5zZXZlbmFyYWJpYz0xNjM5O2Uuc2V2ZW5iZW5nYWxpPTI1NDE7ZS5zZXZlbmNpcmNsZT05MzE4O2Uuc2V2ZW5jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI4O2Uuc2V2ZW5kZXZhPTI0MTM7ZS5zZXZlbmVpZ2h0aHM9ODU0MjtlLnNldmVuZ3VqYXJhdGk9Mjc5NztlLnNldmVuZ3VybXVraGk9MjY2OTtlLnNldmVuaGFja2FyYWJpYz0xNjM5O2Uuc2V2ZW5oYW5nemhvdT0xMjMyNztlLnNldmVuaWRlb2dyYXBoaWNwYXJlbj0xMjgzODtlLnNldmVuaW5mZXJpb3I9ODMyNztlLnNldmVubW9ub3NwYWNlPTY1MzAzO2Uuc2V2ZW5vbGRzdHlsZT02MzI4NztlLnNldmVucGFyZW49OTMzODtlLnNldmVucGVyaW9kPTkzNTg7ZS5zZXZlbnBlcnNpYW49MTc4MztlLnNldmVucm9tYW49ODU2NjtlLnNldmVuc3VwZXJpb3I9ODMxMTtlLnNldmVudGVlbmNpcmNsZT05MzI4O2Uuc2V2ZW50ZWVucGFyZW49OTM0ODtlLnNldmVudGVlbnBlcmlvZD05MzY4O2Uuc2V2ZW50aGFpPTM2NzE7ZS5zZnRoeXBoZW49MTczO2Uuc2hhYXJtZW5pYW49MTM5OTtlLnNoYWJlbmdhbGk9MjQ4NjtlLnNoYWN5cmlsbGljPTEwOTY7ZS5zaGFkZGFhcmFiaWM9MTYxNztlLnNoYWRkYWRhbW1hYXJhYmljPTY0NjA5O2Uuc2hhZGRhZGFtbWF0YW5hcmFiaWM9NjQ2MDY7ZS5zaGFkZGFmYXRoYWFyYWJpYz02NDYwODtlLnNoYWRkYWthc3JhYXJhYmljPTY0NjEwO2Uuc2hhZGRha2FzcmF0YW5hcmFiaWM9NjQ2MDc7ZS5zaGFkZT05NjE4O2Uuc2hhZGVkYXJrPTk2MTk7ZS5zaGFkZWxpZ2h0PTk2MTc7ZS5zaGFkZW1lZGl1bT05NjE4O2Uuc2hhZGV2YT0yMzU4O2Uuc2hhZ3VqYXJhdGk9Mjc0MjtlLnNoYWd1cm11a2hpPTI2MTQ7ZS5zaGFsc2hlbGV0aGVicmV3PTE0Mjc7ZS5zaGJvcG9tb2ZvPTEyNTY1O2Uuc2hjaGFjeXJpbGxpYz0xMDk3O2Uuc2hlZW5hcmFiaWM9MTU4ODtlLnNoZWVuZmluYWxhcmFiaWM9NjUyMDY7ZS5zaGVlbmluaXRpYWxhcmFiaWM9NjUyMDc7ZS5zaGVlbm1lZGlhbGFyYWJpYz02NTIwODtlLnNoZWljb3B0aWM9OTk1O2Uuc2hlcWVsPTgzNjI7ZS5zaGVxZWxoZWJyZXc9ODM2MjtlLnNoZXZhPTE0NTY7ZS5zaGV2YTExNT0xNDU2O2Uuc2hldmExNT0xNDU2O2Uuc2hldmEyMj0xNDU2O2Uuc2hldmEyZT0xNDU2O2Uuc2hldmFoZWJyZXc9MTQ1NjtlLnNoZXZhbmFycm93aGVicmV3PTE0NTY7ZS5zaGV2YXF1YXJ0ZXJoZWJyZXc9MTQ1NjtlLnNoZXZhd2lkZWhlYnJldz0xNDU2O2Uuc2hoYWN5cmlsbGljPTEyMTE7ZS5zaGltYWNvcHRpYz0xMDA1O2Uuc2hpbj0xNTEzO2Uuc2hpbmRhZ2VzaD02NDMyOTtlLnNoaW5kYWdlc2hoZWJyZXc9NjQzMjk7ZS5zaGluZGFnZXNoc2hpbmRvdD02NDMwMDtlLnNoaW5kYWdlc2hzaGluZG90aGVicmV3PTY0MzAwO2Uuc2hpbmRhZ2VzaHNpbmRvdD02NDMwMTtlLnNoaW5kYWdlc2hzaW5kb3RoZWJyZXc9NjQzMDE7ZS5zaGluZG90aGVicmV3PTE0NzM7ZS5zaGluaGVicmV3PTE1MTM7ZS5zaGluc2hpbmRvdD02NDI5ODtlLnNoaW5zaGluZG90aGVicmV3PTY0Mjk4O2Uuc2hpbnNpbmRvdD02NDI5OTtlLnNoaW5zaW5kb3RoZWJyZXc9NjQyOTk7ZS5zaG9vaz02NDI7ZS5zaWdtYT05NjM7ZS5zaWdtYTE9OTYyO2Uuc2lnbWFmaW5hbD05NjI7ZS5zaWdtYWx1bmF0ZXN5bWJvbGdyZWVrPTEwMTA7ZS5zaWhpcmFnYW5hPTEyMzc1O2Uuc2lrYXRha2FuYT0xMjQ3MTtlLnNpa2F0YWthbmFoYWxmd2lkdGg9NjU0MDQ7ZS5zaWx1cWhlYnJldz0xNDY5O2Uuc2lsdXFsZWZ0aGVicmV3PTE0Njk7ZS5zaW1pbGFyPTg3NjQ7ZS5zaW5kb3RoZWJyZXc9MTQ3NDtlLnNpb3NhY2lyY2xla29yZWFuPTEyOTE2O2Uuc2lvc2FwYXJlbmtvcmVhbj0xMjgyMDtlLnNpb3NjaWV1Y2tvcmVhbj0xMjY3MDtlLnNpb3NjaXJjbGVrb3JlYW49MTI5MDI7ZS5zaW9za2l5ZW9ra29yZWFuPTEyNjY2O2Uuc2lvc2tvcmVhbj0xMjYxMztlLnNpb3NuaWV1bmtvcmVhbj0xMjY2NztlLnNpb3NwYXJlbmtvcmVhbj0xMjgwNjtlLnNpb3NwaWV1cGtvcmVhbj0xMjY2OTtlLnNpb3N0aWtldXRrb3JlYW49MTI2Njg7ZS5zaXg9NTQ7ZS5zaXhhcmFiaWM9MTYzODtlLnNpeGJlbmdhbGk9MjU0MDtlLnNpeGNpcmNsZT05MzE3O2Uuc2l4Y2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyNztlLnNpeGRldmE9MjQxMjtlLnNpeGd1amFyYXRpPTI3OTY7ZS5zaXhndXJtdWtoaT0yNjY4O2Uuc2l4aGFja2FyYWJpYz0xNjM4O2Uuc2l4aGFuZ3pob3U9MTIzMjY7ZS5zaXhpZGVvZ3JhcGhpY3BhcmVuPTEyODM3O2Uuc2l4aW5mZXJpb3I9ODMyNjtlLnNpeG1vbm9zcGFjZT02NTMwMjtlLnNpeG9sZHN0eWxlPTYzMjg2O2Uuc2l4cGFyZW49OTMzNztlLnNpeHBlcmlvZD05MzU3O2Uuc2l4cGVyc2lhbj0xNzgyO2Uuc2l4cm9tYW49ODU2NTtlLnNpeHN1cGVyaW9yPTgzMTA7ZS5zaXh0ZWVuY2lyY2xlPTkzMjc7ZS5zaXh0ZWVuY3VycmVuY3lkZW5vbWluYXRvcmJlbmdhbGk9MjU1MztlLnNpeHRlZW5wYXJlbj05MzQ3O2Uuc2l4dGVlbnBlcmlvZD05MzY3O2Uuc2l4dGhhaT0zNjcwO2Uuc2xhc2g9NDc7ZS5zbGFzaG1vbm9zcGFjZT02NTI5NTtlLnNsb25nPTM4MztlLnNsb25nZG90YWNjZW50PTc4MzU7ZS5zbWlsZWZhY2U9OTc4NjtlLnNtb25vc3BhY2U9NjUzNjM7ZS5zb2ZwYXN1cWhlYnJldz0xNDc1O2Uuc29mdGh5cGhlbj0xNzM7ZS5zb2Z0c2lnbmN5cmlsbGljPTExMDA7ZS5zb2hpcmFnYW5hPTEyMzgxO2Uuc29rYXRha2FuYT0xMjQ3NztlLnNva2F0YWthbmFoYWxmd2lkdGg9NjU0MDc7ZS5zb2xpZHVzbG9uZ292ZXJsYXljbWI9ODI0O2Uuc29saWR1c3Nob3J0b3ZlcmxheWNtYj04MjM7ZS5zb3J1c2l0aGFpPTM2MjU7ZS5zb3NhbGF0aGFpPTM2MjQ7ZS5zb3NvdGhhaT0zNTk1O2Uuc29zdWF0aGFpPTM2MjY7ZS5zcGFjZT0zMjtlLnNwYWNlaGFja2FyYWJpYz0zMjtlLnNwYWRlPTk4MjQ7ZS5zcGFkZXN1aXRibGFjaz05ODI0O2Uuc3BhZGVzdWl0d2hpdGU9OTgyODtlLnNwYXJlbj05MzkwO2Uuc3F1YXJlYmVsb3djbWI9ODI3O2Uuc3F1YXJlY2M9MTMyNTI7ZS5zcXVhcmVjbT0xMzIxMztlLnNxdWFyZWRpYWdvbmFsY3Jvc3NoYXRjaGZpbGw9OTY0MTtlLnNxdWFyZWhvcml6b250YWxmaWxsPTk2MzY7ZS5zcXVhcmVrZz0xMzE5OTtlLnNxdWFyZWttPTEzMjE0O2Uuc3F1YXJla21jYXBpdGFsPTEzMjYyO2Uuc3F1YXJlbG49MTMyNjU7ZS5zcXVhcmVsb2c9MTMyNjY7ZS5zcXVhcmVtZz0xMzE5ODtlLnNxdWFyZW1pbD0xMzI2OTtlLnNxdWFyZW1tPTEzMjEyO2Uuc3F1YXJlbXNxdWFyZWQ9MTMyMTc7ZS5zcXVhcmVvcnRob2dvbmFsY3Jvc3NoYXRjaGZpbGw9OTYzODtlLnNxdWFyZXVwcGVybGVmdHRvbG93ZXJyaWdodGZpbGw9OTYzOTtlLnNxdWFyZXVwcGVycmlnaHR0b2xvd2VybGVmdGZpbGw9OTY0MDtlLnNxdWFyZXZlcnRpY2FsZmlsbD05NjM3O2Uuc3F1YXJld2hpdGV3aXRoc21hbGxibGFjaz05NjM1O2Uuc3JzcXVhcmU9MTMyNzU7ZS5zc2FiZW5nYWxpPTI0ODc7ZS5zc2FkZXZhPTIzNTk7ZS5zc2FndWphcmF0aT0yNzQzO2Uuc3NhbmdjaWV1Y2tvcmVhbj0xMjYxNztlLnNzYW5naGlldWhrb3JlYW49MTI2Nzc7ZS5zc2FuZ2lldW5na29yZWFuPTEyNjcyO2Uuc3NhbmdraXllb2trb3JlYW49MTI1OTQ7ZS5zc2FuZ25pZXVua29yZWFuPTEyNjQ1O2Uuc3NhbmdwaWV1cGtvcmVhbj0xMjYxMTtlLnNzYW5nc2lvc2tvcmVhbj0xMjYxNDtlLnNzYW5ndGlrZXV0a29yZWFuPTEyNjAwO2Uuc3N1cGVyaW9yPTYzMjE4O2Uuc3Rlcmxpbmc9MTYzO2Uuc3Rlcmxpbmdtb25vc3BhY2U9NjU1MDU7ZS5zdHJva2Vsb25nb3ZlcmxheWNtYj04MjI7ZS5zdHJva2VzaG9ydG92ZXJsYXljbWI9ODIxO2Uuc3Vic2V0PTg4MzQ7ZS5zdWJzZXRub3RlcXVhbD04ODQyO2Uuc3Vic2V0b3JlcXVhbD04ODM4O2Uuc3VjY2VlZHM9ODgyNztlLnN1Y2h0aGF0PTg3MTU7ZS5zdWhpcmFnYW5hPTEyMzc3O2Uuc3VrYXRha2FuYT0xMjQ3MztlLnN1a2F0YWthbmFoYWxmd2lkdGg9NjU0MDU7ZS5zdWt1bmFyYWJpYz0xNjE4O2Uuc3VtbWF0aW9uPTg3MjE7ZS5zdW49OTc4ODtlLnN1cGVyc2V0PTg4MzU7ZS5zdXBlcnNldG5vdGVxdWFsPTg4NDM7ZS5zdXBlcnNldG9yZXF1YWw9ODgzOTtlLnN2c3F1YXJlPTEzMjc2O2Uuc3lvdXdhZXJhc3F1YXJlPTEzMTgwO2UudD0xMTY7ZS50YWJlbmdhbGk9MjQ2ODtlLnRhY2tkb3duPTg4Njg7ZS50YWNrbGVmdD04ODY3O2UudGFkZXZhPTIzNDA7ZS50YWd1amFyYXRpPTI3MjQ7ZS50YWd1cm11a2hpPTI1OTY7ZS50YWhhcmFiaWM9MTU5MTtlLnRhaGZpbmFsYXJhYmljPTY1MjE4O2UudGFoaW5pdGlhbGFyYWJpYz02NTIxOTtlLnRhaGlyYWdhbmE9MTIzODM7ZS50YWhtZWRpYWxhcmFiaWM9NjUyMjA7ZS50YWlzeW91ZXJhc3F1YXJlPTEzMTgxO2UudGFrYXRha2FuYT0xMjQ3OTtlLnRha2F0YWthbmFoYWxmd2lkdGg9NjU0MDg7ZS50YXR3ZWVsYXJhYmljPTE2MDA7ZS50YXU9OTY0O2UudGF2PTE1MTQ7ZS50YXZkYWdlcz02NDMzMDtlLnRhdmRhZ2VzaD02NDMzMDtlLnRhdmRhZ2VzaGhlYnJldz02NDMzMDtlLnRhdmhlYnJldz0xNTE0O2UudGJhcj0zNTk7ZS50Ym9wb21vZm89MTI1NTQ7ZS50Y2Fyb249MzU3O2UudGNjdXJsPTY4MDtlLnRjZWRpbGxhPTM1NTtlLnRjaGVoYXJhYmljPTE2NzA7ZS50Y2hlaGZpbmFsYXJhYmljPTY0Mzc5O2UudGNoZWhpbml0aWFsYXJhYmljPTY0MzgwO2UudGNoZWhtZWRpYWxhcmFiaWM9NjQzODE7ZS50Y2lyY2xlPTk0NDM7ZS50Y2lyY3VtZmxleGJlbG93PTc3OTM7ZS50Y29tbWFhY2NlbnQ9MzU1O2UudGRpZXJlc2lzPTc4MzE7ZS50ZG90YWNjZW50PTc3ODc7ZS50ZG90YmVsb3c9Nzc4OTtlLnRlY3lyaWxsaWM9MTA5MDtlLnRlZGVzY2VuZGVyY3lyaWxsaWM9MTE5NztlLnRlaGFyYWJpYz0xNTc4O2UudGVoZmluYWxhcmFiaWM9NjUxNzQ7ZS50ZWhoYWhpbml0aWFsYXJhYmljPTY0Njc0O2UudGVoaGFoaXNvbGF0ZWRhcmFiaWM9NjQ1MjQ7ZS50ZWhpbml0aWFsYXJhYmljPTY1MTc1O2UudGVoaXJhZ2FuYT0xMjM5MDtlLnRlaGplZW1pbml0aWFsYXJhYmljPTY0NjczO2UudGVoamVlbWlzb2xhdGVkYXJhYmljPTY0NTIzO2UudGVobWFyYnV0YWFyYWJpYz0xNTc3O2UudGVobWFyYnV0YWZpbmFsYXJhYmljPTY1MTcyO2UudGVobWVkaWFsYXJhYmljPTY1MTc2O2UudGVobWVlbWluaXRpYWxhcmFiaWM9NjQ2NzY7ZS50ZWhtZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1MjY7ZS50ZWhub29uZmluYWxhcmFiaWM9NjQ2Mjc7ZS50ZWthdGFrYW5hPTEyNDg2O2UudGVrYXRha2FuYWhhbGZ3aWR0aD02NTQxMTtlLnRlbGVwaG9uZT04NDgxO2UudGVsZXBob25lYmxhY2s9OTc0MjtlLnRlbGlzaGFnZWRvbGFoZWJyZXc9MTQ0MDtlLnRlbGlzaGFxZXRhbmFoZWJyZXc9MTQ0OTtlLnRlbmNpcmNsZT05MzIxO2UudGVuaWRlb2dyYXBoaWNwYXJlbj0xMjg0MTtlLnRlbnBhcmVuPTkzNDE7ZS50ZW5wZXJpb2Q9OTM2MTtlLnRlbnJvbWFuPTg1Njk7ZS50ZXNoPTY3OTtlLnRldD0xNDk2O2UudGV0ZGFnZXNoPTY0MzEyO2UudGV0ZGFnZXNoaGVicmV3PTY0MzEyO2UudGV0aGVicmV3PTE0OTY7ZS50ZXRzZWN5cmlsbGljPTEyMDU7ZS50ZXZpcmhlYnJldz0xNDM1O2UudGV2aXJsZWZ0aGVicmV3PTE0MzU7ZS50aGFiZW5nYWxpPTI0Njk7ZS50aGFkZXZhPTIzNDE7ZS50aGFndWphcmF0aT0yNzI1O2UudGhhZ3VybXVraGk9MjU5NztlLnRoYWxhcmFiaWM9MTU4NDtlLnRoYWxmaW5hbGFyYWJpYz02NTE5NjtlLnRoYW50aGFraGF0bG93bGVmdHRoYWk9NjM2NDA7ZS50aGFudGhha2hhdGxvd3JpZ2h0dGhhaT02MzYzOTtlLnRoYW50aGFraGF0dGhhaT0zNjYwO2UudGhhbnRoYWtoYXR1cHBlcmxlZnR0aGFpPTYzNjM4O2UudGhlaGFyYWJpYz0xNTc5O2UudGhlaGZpbmFsYXJhYmljPTY1MTc4O2UudGhlaGluaXRpYWxhcmFiaWM9NjUxNzk7ZS50aGVobWVkaWFsYXJhYmljPTY1MTgwO2UudGhlcmVleGlzdHM9ODcwNztlLnRoZXJlZm9yZT04NzU2O2UudGhldGE9OTUyO2UudGhldGExPTk3NztlLnRoZXRhc3ltYm9sZ3JlZWs9OTc3O2UudGhpZXV0aGFjaXJjbGVrb3JlYW49MTI5MjE7ZS50aGlldXRoYXBhcmVua29yZWFuPTEyODI1O2UudGhpZXV0aGNpcmNsZWtvcmVhbj0xMjkwNztlLnRoaWV1dGhrb3JlYW49MTI2MjA7ZS50aGlldXRocGFyZW5rb3JlYW49MTI4MTE7ZS50aGlydGVlbmNpcmNsZT05MzI0O2UudGhpcnRlZW5wYXJlbj05MzQ0O2UudGhpcnRlZW5wZXJpb2Q9OTM2NDtlLnRob25hbmdtb250aG90aGFpPTM2MDE7ZS50aG9vaz00Mjk7ZS50aG9waHV0aGFvdGhhaT0zNjAyO2UudGhvcm49MjU0O2UudGhvdGhhaGFudGhhaT0zNjA3O2UudGhvdGhhbnRoYWk9MzYwMDtlLnRob3Rob25ndGhhaT0zNjA4O2UudGhvdGh1bmd0aGFpPTM2MDY7ZS50aG91c2FuZGN5cmlsbGljPTExNTQ7ZS50aG91c2FuZHNzZXBhcmF0b3JhcmFiaWM9MTY0NDtlLnRob3VzYW5kc3NlcGFyYXRvcnBlcnNpYW49MTY0NDtlLnRocmVlPTUxO2UudGhyZWVhcmFiaWM9MTYzNTtlLnRocmVlYmVuZ2FsaT0yNTM3O2UudGhyZWVjaXJjbGU9OTMxNDtlLnRocmVlY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyNDtlLnRocmVlZGV2YT0yNDA5O2UudGhyZWVlaWdodGhzPTg1NDA7ZS50aHJlZWd1amFyYXRpPTI3OTM7ZS50aHJlZWd1cm11a2hpPTI2NjU7ZS50aHJlZWhhY2thcmFiaWM9MTYzNTtlLnRocmVlaGFuZ3pob3U9MTIzMjM7ZS50aHJlZWlkZW9ncmFwaGljcGFyZW49MTI4MzQ7ZS50aHJlZWluZmVyaW9yPTgzMjM7ZS50aHJlZW1vbm9zcGFjZT02NTI5OTtlLnRocmVlbnVtZXJhdG9yYmVuZ2FsaT0yNTUwO2UudGhyZWVvbGRzdHlsZT02MzI4MztlLnRocmVlcGFyZW49OTMzNDtlLnRocmVlcGVyaW9kPTkzNTQ7ZS50aHJlZXBlcnNpYW49MTc3OTtlLnRocmVlcXVhcnRlcnM9MTkwO2UudGhyZWVxdWFydGVyc2VtZGFzaD02MzE5ODtlLnRocmVlcm9tYW49ODU2MjtlLnRocmVlc3VwZXJpb3I9MTc5O2UudGhyZWV0aGFpPTM2Njc7ZS50aHpzcXVhcmU9MTMyMDQ7ZS50aWhpcmFnYW5hPTEyMzg1O2UudGlrYXRha2FuYT0xMjQ4MTtlLnRpa2F0YWthbmFoYWxmd2lkdGg9NjU0MDk7ZS50aWtldXRhY2lyY2xla29yZWFuPTEyOTEyO2UudGlrZXV0YXBhcmVua29yZWFuPTEyODE2O2UudGlrZXV0Y2lyY2xla29yZWFuPTEyODk4O2UudGlrZXV0a29yZWFuPTEyNTk5O2UudGlrZXV0cGFyZW5rb3JlYW49MTI4MDI7ZS50aWxkZT03MzI7ZS50aWxkZWJlbG93Y21iPTgxNjtlLnRpbGRlY21iPTc3MTtlLnRpbGRlY29tYj03NzE7ZS50aWxkZWRvdWJsZWNtYj04NjQ7ZS50aWxkZW9wZXJhdG9yPTg3NjQ7ZS50aWxkZW92ZXJsYXljbWI9ODIwO2UudGlsZGV2ZXJ0aWNhbGNtYj04MzA7ZS50aW1lc2NpcmNsZT04ODU1O2UudGlwZWhhaGVicmV3PTE0MzA7ZS50aXBlaGFsZWZ0aGVicmV3PTE0MzA7ZS50aXBwaWd1cm11a2hpPTI2NzI7ZS50aXRsb2N5cmlsbGljY21iPTExNTU7ZS50aXduYXJtZW5pYW49MTQwNztlLnRsaW5lYmVsb3c9Nzc5MTtlLnRtb25vc3BhY2U9NjUzNjQ7ZS50b2FybWVuaWFuPTEzODU7ZS50b2hpcmFnYW5hPTEyMzkyO2UudG9rYXRha2FuYT0xMjQ4ODtlLnRva2F0YWthbmFoYWxmd2lkdGg9NjU0MTI7ZS50b25lYmFyZXh0cmFoaWdobW9kPTc0MTtlLnRvbmViYXJleHRyYWxvd21vZD03NDU7ZS50b25lYmFyaGlnaG1vZD03NDI7ZS50b25lYmFybG93bW9kPTc0NDtlLnRvbmViYXJtaWRtb2Q9NzQzO2UudG9uZWZpdmU9NDQ1O2UudG9uZXNpeD0zODk7ZS50b25ldHdvPTQyNDtlLnRvbm9zPTkwMDtlLnRvbnNxdWFyZT0xMzA5NTtlLnRvcGF0YWt0aGFpPTM1OTk7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQ9MTIzMDg7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnRzbWFsbD02NTExNztlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHZlcnRpY2FsPTY1MDgxO2UudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodD0xMjMwOTtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHRzbWFsbD02NTExODtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4MjtlLnRvdGFvdGhhaT0zNjA1O2UudHBhbGF0YWxob29rPTQyNztlLnRwYXJlbj05MzkxO2UudHJhZGVtYXJrPTg0ODI7ZS50cmFkZW1hcmtzYW5zPTYzNzIyO2UudHJhZGVtYXJrc2VyaWY9NjMxOTU7ZS50cmV0cm9mbGV4aG9vaz02NDg7ZS50cmlhZ2RuPTk2NjA7ZS50cmlhZ2xmPTk2Njg7ZS50cmlhZ3J0PTk2NTg7ZS50cmlhZ3VwPTk2NTA7ZS50cz02Nzg7ZS50c2FkaT0xNTEwO2UudHNhZGlkYWdlc2g9NjQzMjY7ZS50c2FkaWRhZ2VzaGhlYnJldz02NDMyNjtlLnRzYWRpaGVicmV3PTE1MTA7ZS50c2VjeXJpbGxpYz0xMDk0O2UudHNlcmU9MTQ2MTtlLnRzZXJlMTI9MTQ2MTtlLnRzZXJlMWU9MTQ2MTtlLnRzZXJlMmI9MTQ2MTtlLnRzZXJlaGVicmV3PTE0NjE7ZS50c2VyZW5hcnJvd2hlYnJldz0xNDYxO2UudHNlcmVxdWFydGVyaGVicmV3PTE0NjE7ZS50c2VyZXdpZGVoZWJyZXc9MTQ2MTtlLnRzaGVjeXJpbGxpYz0xMTE1O2UudHN1cGVyaW9yPTYzMjE5O2UudHRhYmVuZ2FsaT0yNDYzO2UudHRhZGV2YT0yMzM1O2UudHRhZ3VqYXJhdGk9MjcxOTtlLnR0YWd1cm11a2hpPTI1OTE7ZS50dGVoYXJhYmljPTE2NTc7ZS50dGVoZmluYWxhcmFiaWM9NjQzNTk7ZS50dGVoaW5pdGlhbGFyYWJpYz02NDM2MDtlLnR0ZWhtZWRpYWxhcmFiaWM9NjQzNjE7ZS50dGhhYmVuZ2FsaT0yNDY0O2UudHRoYWRldmE9MjMzNjtlLnR0aGFndWphcmF0aT0yNzIwO2UudHRoYWd1cm11a2hpPTI1OTI7ZS50dHVybmVkPTY0NztlLnR1aGlyYWdhbmE9MTIzODg7ZS50dWthdGFrYW5hPTEyNDg0O2UudHVrYXRha2FuYWhhbGZ3aWR0aD02NTQxMDtlLnR1c21hbGxoaXJhZ2FuYT0xMjM4NztlLnR1c21hbGxrYXRha2FuYT0xMjQ4MztlLnR1c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM5MTtlLnR3ZWx2ZWNpcmNsZT05MzIzO2UudHdlbHZlcGFyZW49OTM0MztlLnR3ZWx2ZXBlcmlvZD05MzYzO2UudHdlbHZlcm9tYW49ODU3MTtlLnR3ZW50eWNpcmNsZT05MzMxO2UudHdlbnR5aGFuZ3pob3U9MjEzMTY7ZS50d2VudHlwYXJlbj05MzUxO2UudHdlbnR5cGVyaW9kPTkzNzE7ZS50d289NTA7ZS50d29hcmFiaWM9MTYzNDtlLnR3b2JlbmdhbGk9MjUzNjtlLnR3b2NpcmNsZT05MzEzO2UudHdvY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyMztlLnR3b2RldmE9MjQwODtlLnR3b2RvdGVubGVhZGVyPTgyMjk7ZS50d29kb3RsZWFkZXI9ODIyOTtlLnR3b2RvdGxlYWRlcnZlcnRpY2FsPTY1MDcyO2UudHdvZ3VqYXJhdGk9Mjc5MjtlLnR3b2d1cm11a2hpPTI2NjQ7ZS50d29oYWNrYXJhYmljPTE2MzQ7ZS50d29oYW5nemhvdT0xMjMyMjtlLnR3b2lkZW9ncmFwaGljcGFyZW49MTI4MzM7ZS50d29pbmZlcmlvcj04MzIyO2UudHdvbW9ub3NwYWNlPTY1Mjk4O2UudHdvbnVtZXJhdG9yYmVuZ2FsaT0yNTQ5O2UudHdvb2xkc3R5bGU9NjMyODI7ZS50d29wYXJlbj05MzMzO2UudHdvcGVyaW9kPTkzNTM7ZS50d29wZXJzaWFuPTE3Nzg7ZS50d29yb21hbj04NTYxO2UudHdvc3Ryb2tlPTQ0MztlLnR3b3N1cGVyaW9yPTE3ODtlLnR3b3RoYWk9MzY2NjtlLnR3b3RoaXJkcz04NTMyO2UudT0xMTc7ZS51YWN1dGU9MjUwO2UudWJhcj02NDk7ZS51YmVuZ2FsaT0yNDQxO2UudWJvcG9tb2ZvPTEyNTg0O2UudWJyZXZlPTM2NTtlLnVjYXJvbj00Njg7ZS51Y2lyY2xlPTk0NDQ7ZS51Y2lyY3VtZmxleD0yNTE7ZS51Y2lyY3VtZmxleGJlbG93PTc3OTk7ZS51Y3lyaWxsaWM9MTA5MTtlLnVkYXR0YWRldmE9MjM4NTtlLnVkYmxhY3V0ZT0zNjk7ZS51ZGJsZ3JhdmU9NTMzO2UudWRldmE9MjMxMztlLnVkaWVyZXNpcz0yNTI7ZS51ZGllcmVzaXNhY3V0ZT00NzI7ZS51ZGllcmVzaXNiZWxvdz03Nzk1O2UudWRpZXJlc2lzY2Fyb249NDc0O2UudWRpZXJlc2lzY3lyaWxsaWM9MTI2NTtlLnVkaWVyZXNpc2dyYXZlPTQ3NjtlLnVkaWVyZXNpc21hY3Jvbj00NzA7ZS51ZG90YmVsb3c9NzkwOTtlLnVncmF2ZT0yNDk7ZS51Z3VqYXJhdGk9MjY5NztlLnVndXJtdWtoaT0yNTY5O2UudWhpcmFnYW5hPTEyMzU4O2UudWhvb2thYm92ZT03OTExO2UudWhvcm49NDMyO2UudWhvcm5hY3V0ZT03OTEzO2UudWhvcm5kb3RiZWxvdz03OTIxO2UudWhvcm5ncmF2ZT03OTE1O2UudWhvcm5ob29rYWJvdmU9NzkxNztlLnVob3JudGlsZGU9NzkxOTtlLnVodW5nYXJ1bWxhdXQ9MzY5O2UudWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjc7ZS51aW52ZXJ0ZWRicmV2ZT01MzU7ZS51a2F0YWthbmE9MTI0NTQ7ZS51a2F0YWthbmFoYWxmd2lkdGg9NjUzOTU7ZS51a2N5cmlsbGljPTExNDU7ZS51a29yZWFuPTEyNjM2O2UudW1hY3Jvbj0zNjM7ZS51bWFjcm9uY3lyaWxsaWM9MTI2MztlLnVtYWNyb25kaWVyZXNpcz03ODAzO2UudW1hdHJhZ3VybXVraGk9MjYyNTtlLnVtb25vc3BhY2U9NjUzNjU7ZS51bmRlcnNjb3JlPTk1O2UudW5kZXJzY29yZWRibD04MjE1O2UudW5kZXJzY29yZW1vbm9zcGFjZT02NTM0MztlLnVuZGVyc2NvcmV2ZXJ0aWNhbD02NTA3NTtlLnVuZGVyc2NvcmV3YXZ5PTY1MTAzO2UudW5pb249ODc0NjtlLnVuaXZlcnNhbD04NzA0O2UudW9nb25laz0zNzE7ZS51cGFyZW49OTM5MjtlLnVwYmxvY2s9OTYwMDtlLnVwcGVyZG90aGVicmV3PTE0NzY7ZS51cHNpbG9uPTk2NTtlLnVwc2lsb25kaWVyZXNpcz05NzE7ZS51cHNpbG9uZGllcmVzaXN0b25vcz05NDQ7ZS51cHNpbG9ubGF0aW49NjUwO2UudXBzaWxvbnRvbm9zPTk3MztlLnVwdGFja2JlbG93Y21iPTc5NztlLnVwdGFja21vZD03MjQ7ZS51cmFndXJtdWtoaT0yNjc1O2UudXJpbmc9MzY3O2UudXNob3J0Y3lyaWxsaWM9MTExODtlLnVzbWFsbGhpcmFnYW5hPTEyMzU3O2UudXNtYWxsa2F0YWthbmE9MTI0NTM7ZS51c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NTtlLnVzdHJhaWdodGN5cmlsbGljPTExOTk7ZS51c3RyYWlnaHRzdHJva2VjeXJpbGxpYz0xMjAxO2UudXRpbGRlPTM2MTtlLnV0aWxkZWFjdXRlPTc4MDE7ZS51dGlsZGViZWxvdz03Nzk3O2UudXViZW5nYWxpPTI0NDI7ZS51dWRldmE9MjMxNDtlLnV1Z3VqYXJhdGk9MjY5ODtlLnV1Z3VybXVraGk9MjU3MDtlLnV1bWF0cmFndXJtdWtoaT0yNjI2O2UudXV2b3dlbHNpZ25iZW5nYWxpPTI0OTg7ZS51dXZvd2Vsc2lnbmRldmE9MjM3MDtlLnV1dm93ZWxzaWduZ3VqYXJhdGk9Mjc1NDtlLnV2b3dlbHNpZ25iZW5nYWxpPTI0OTc7ZS51dm93ZWxzaWduZGV2YT0yMzY5O2UudXZvd2Vsc2lnbmd1amFyYXRpPTI3NTM7ZS52PTExODtlLnZhZGV2YT0yMzU3O2UudmFndWphcmF0aT0yNzQxO2UudmFndXJtdWtoaT0yNjEzO2UudmFrYXRha2FuYT0xMjUzNTtlLnZhdj0xNDkzO2UudmF2ZGFnZXNoPTY0MzA5O2UudmF2ZGFnZXNoNjU9NjQzMDk7ZS52YXZkYWdlc2hoZWJyZXc9NjQzMDk7ZS52YXZoZWJyZXc9MTQ5MztlLnZhdmhvbGFtPTY0MzMxO2UudmF2aG9sYW1oZWJyZXc9NjQzMzE7ZS52YXZ2YXZoZWJyZXc9MTUyMDtlLnZhdnlvZGhlYnJldz0xNTIxO2UudmNpcmNsZT05NDQ1O2UudmRvdGJlbG93PTc4MDc7ZS52ZWN5cmlsbGljPTEwNzQ7ZS52ZWhhcmFiaWM9MTcwMDtlLnZlaGZpbmFsYXJhYmljPTY0MzYzO2UudmVoaW5pdGlhbGFyYWJpYz02NDM2NDtlLnZlaG1lZGlhbGFyYWJpYz02NDM2NTtlLnZla2F0YWthbmE9MTI1Mzc7ZS52ZW51cz05NzkyO2UudmVydGljYWxiYXI9MTI0O2UudmVydGljYWxsaW5lYWJvdmVjbWI9NzgxO2UudmVydGljYWxsaW5lYmVsb3djbWI9ODA5O2UudmVydGljYWxsaW5lbG93bW9kPTcxNjtlLnZlcnRpY2FsbGluZW1vZD03MTI7ZS52ZXdhcm1lbmlhbj0xNDA2O2Uudmhvb2s9NjUxO2UudmlrYXRha2FuYT0xMjUzNjtlLnZpcmFtYWJlbmdhbGk9MjUwOTtlLnZpcmFtYWRldmE9MjM4MTtlLnZpcmFtYWd1amFyYXRpPTI3NjU7ZS52aXNhcmdhYmVuZ2FsaT0yNDM1O2UudmlzYXJnYWRldmE9MjMwNztlLnZpc2FyZ2FndWphcmF0aT0yNjkxO2Uudm1vbm9zcGFjZT02NTM2NjtlLnZvYXJtZW5pYW49MTQwMDtlLnZvaWNlZGl0ZXJhdGlvbmhpcmFnYW5hPTEyNDQ2O2Uudm9pY2VkaXRlcmF0aW9ua2F0YWthbmE9MTI1NDI7ZS52b2ljZWRtYXJra2FuYT0xMjQ0MztlLnZvaWNlZG1hcmtrYW5haGFsZndpZHRoPTY1NDM4O2Uudm9rYXRha2FuYT0xMjUzODtlLnZwYXJlbj05MzkzO2UudnRpbGRlPTc4MDU7ZS52dHVybmVkPTY1MjtlLnZ1aGlyYWdhbmE9MTI0MzY7ZS52dWthdGFrYW5hPTEyNTMyO2Uudz0xMTk7ZS53YWN1dGU9NzgxMTtlLndhZWtvcmVhbj0xMjYzMztlLndhaGlyYWdhbmE9MTI0MzE7ZS53YWthdGFrYW5hPTEyNTI3O2Uud2FrYXRha2FuYWhhbGZ3aWR0aD02NTQzNjtlLndha29yZWFuPTEyNjMyO2Uud2FzbWFsbGhpcmFnYW5hPTEyNDMwO2Uud2FzbWFsbGthdGFrYW5hPTEyNTI2O2Uud2F0dG9zcXVhcmU9MTMxNDM7ZS53YXZlZGFzaD0xMjMxNjtlLndhdnl1bmRlcnNjb3JldmVydGljYWw9NjUwNzY7ZS53YXdhcmFiaWM9MTYwODtlLndhd2ZpbmFsYXJhYmljPTY1MjYyO2Uud2F3aGFtemFhYm92ZWFyYWJpYz0xNTcyO2Uud2F3aGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU4O2Uud2JzcXVhcmU9MTMyNzc7ZS53Y2lyY2xlPTk0NDY7ZS53Y2lyY3VtZmxleD0zNzM7ZS53ZGllcmVzaXM9NzgxMztlLndkb3RhY2NlbnQ9NzgxNTtlLndkb3RiZWxvdz03ODE3O2Uud2VoaXJhZ2FuYT0xMjQzMztlLndlaWVyc3RyYXNzPTg0NzI7ZS53ZWthdGFrYW5hPTEyNTI5O2Uud2Vrb3JlYW49MTI2Mzg7ZS53ZW9rb3JlYW49MTI2Mzc7ZS53Z3JhdmU9NzgwOTtlLndoaXRlYnVsbGV0PTk3MDI7ZS53aGl0ZWNpcmNsZT05Njc1O2Uud2hpdGVjaXJjbGVpbnZlcnNlPTk2ODk7ZS53aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0PTEyMzAyO2Uud2hpdGVjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsPTY1MDkxO2Uud2hpdGVjb3JuZXJicmFja2V0cmlnaHQ9MTIzMDM7ZS53aGl0ZWNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkyO2Uud2hpdGVkaWFtb25kPTk2NzE7ZS53aGl0ZWRpYW1vbmRjb250YWluaW5nYmxhY2tzbWFsbGRpYW1vbmQ9OTY3MjtlLndoaXRlZG93bnBvaW50aW5nc21hbGx0cmlhbmdsZT05NjYzO2Uud2hpdGVkb3ducG9pbnRpbmd0cmlhbmdsZT05NjYxO2Uud2hpdGVsZWZ0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2Njc7ZS53aGl0ZWxlZnRwb2ludGluZ3RyaWFuZ2xlPTk2NjU7ZS53aGl0ZWxlbnRpY3VsYXJicmFja2V0bGVmdD0xMjMxMDtlLndoaXRlbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMxMTtlLndoaXRlcmlnaHRwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1NztlLndoaXRlcmlnaHRwb2ludGluZ3RyaWFuZ2xlPTk2NTU7ZS53aGl0ZXNtYWxsc3F1YXJlPTk2NDM7ZS53aGl0ZXNtaWxpbmdmYWNlPTk3ODY7ZS53aGl0ZXNxdWFyZT05NjMzO2Uud2hpdGVzdGFyPTk3MzQ7ZS53aGl0ZXRlbGVwaG9uZT05NzQzO2Uud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQ9MTIzMTI7ZS53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQ9MTIzMTM7ZS53aGl0ZXVwcG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NTM7ZS53aGl0ZXVwcG9pbnRpbmd0cmlhbmdsZT05NjUxO2Uud2loaXJhZ2FuYT0xMjQzMjtlLndpa2F0YWthbmE9MTI1Mjg7ZS53aWtvcmVhbj0xMjYzOTtlLndtb25vc3BhY2U9NjUzNjc7ZS53b2hpcmFnYW5hPTEyNDM0O2Uud29rYXRha2FuYT0xMjUzMDtlLndva2F0YWthbmFoYWxmd2lkdGg9NjUzODI7ZS53b249ODM2MTtlLndvbm1vbm9zcGFjZT02NTUxMDtlLndvd2FlbnRoYWk9MzYyMztlLndwYXJlbj05Mzk0O2Uud3Jpbmc9NzgzMjtlLndzdXBlcmlvcj02OTU7ZS53dHVybmVkPTY1MztlLnd5bm49NDQ3O2UueD0xMjA7ZS54YWJvdmVjbWI9ODI5O2UueGJvcG9tb2ZvPTEyNTYyO2UueGNpcmNsZT05NDQ3O2UueGRpZXJlc2lzPTc4MjE7ZS54ZG90YWNjZW50PTc4MTk7ZS54ZWhhcm1lbmlhbj0xMzg5O2UueGk9OTU4O2UueG1vbm9zcGFjZT02NTM2ODtlLnhwYXJlbj05Mzk1O2UueHN1cGVyaW9yPTczOTtlLnk9MTIxO2UueWFhZG9zcXVhcmU9MTMxMzQ7ZS55YWJlbmdhbGk9MjQ3OTtlLnlhY3V0ZT0yNTM7ZS55YWRldmE9MjM1MTtlLnlhZWtvcmVhbj0xMjYyNjtlLnlhZ3VqYXJhdGk9MjczNTtlLnlhZ3VybXVraGk9MjYwNztlLnlhaGlyYWdhbmE9MTI0MjA7ZS55YWthdGFrYW5hPTEyNTE2O2UueWFrYXRha2FuYWhhbGZ3aWR0aD02NTQyODtlLnlha29yZWFuPTEyNjI1O2UueWFtYWtrYW50aGFpPTM2NjI7ZS55YXNtYWxsaGlyYWdhbmE9MTI0MTk7ZS55YXNtYWxsa2F0YWthbmE9MTI1MTU7ZS55YXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODg7ZS55YXRjeXJpbGxpYz0xMTIzO2UueWNpcmNsZT05NDQ4O2UueWNpcmN1bWZsZXg9Mzc1O2UueWRpZXJlc2lzPTI1NTtlLnlkb3RhY2NlbnQ9NzgyMztlLnlkb3RiZWxvdz03OTI1O2UueWVoYXJhYmljPTE2MTA7ZS55ZWhiYXJyZWVhcmFiaWM9MTc0NjtlLnllaGJhcnJlZWZpbmFsYXJhYmljPTY0NDMxO2UueWVoZmluYWxhcmFiaWM9NjUyNjY7ZS55ZWhoYW16YWFib3ZlYXJhYmljPTE1NzQ7ZS55ZWhoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUxNjI7ZS55ZWhoYW16YWFib3ZlaW5pdGlhbGFyYWJpYz02NTE2MztlLnllaGhhbXphYWJvdmVtZWRpYWxhcmFiaWM9NjUxNjQ7ZS55ZWhpbml0aWFsYXJhYmljPTY1MjY3O2UueWVobWVkaWFsYXJhYmljPTY1MjY4O2UueWVobWVlbWluaXRpYWxhcmFiaWM9NjQ3MzM7ZS55ZWhtZWVtaXNvbGF0ZWRhcmFiaWM9NjQ2MDA7ZS55ZWhub29uZmluYWxhcmFiaWM9NjQ2NjA7ZS55ZWh0aHJlZWRvdHNiZWxvd2FyYWJpYz0xNzQ1O2UueWVrb3JlYW49MTI2MzA7ZS55ZW49MTY1O2UueWVubW9ub3NwYWNlPTY1NTA5O2UueWVva29yZWFuPTEyNjI5O2UueWVvcmluaGlldWhrb3JlYW49MTI2Nzg7ZS55ZXJhaGJlbnlvbW9oZWJyZXc9MTQ1MDtlLnllcmFoYmVueW9tb2xlZnRoZWJyZXc9MTQ1MDtlLnllcmljeXJpbGxpYz0xMDk5O2UueWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MztlLnllc2lldW5na29yZWFuPTEyNjczO2UueWVzaWV1bmdwYW5zaW9za29yZWFuPTEyNjc1O2UueWVzaWV1bmdzaW9za29yZWFuPTEyNjc0O2UueWV0aXZoZWJyZXc9MTQzNDtlLnlncmF2ZT03OTIzO2UueWhvb2s9NDM2O2UueWhvb2thYm92ZT03OTI3O2UueWlhcm1lbmlhbj0xMzk3O2UueWljeXJpbGxpYz0xMTExO2UueWlrb3JlYW49MTI2NDI7ZS55aW55YW5nPTk3NzU7ZS55aXduYXJtZW5pYW49MTQxMDtlLnltb25vc3BhY2U9NjUzNjk7ZS55b2Q9MTQ5NztlLnlvZGRhZ2VzaD02NDMxMztlLnlvZGRhZ2VzaGhlYnJldz02NDMxMztlLnlvZGhlYnJldz0xNDk3O2UueW9keW9kaGVicmV3PTE1MjI7ZS55b2R5b2RwYXRhaGhlYnJldz02NDI4NztlLnlvaGlyYWdhbmE9MTI0MjQ7ZS55b2lrb3JlYW49MTI2ODE7ZS55b2thdGFrYW5hPTEyNTIwO2UueW9rYXRha2FuYWhhbGZ3aWR0aD02NTQzMDtlLnlva29yZWFuPTEyNjM1O2UueW9zbWFsbGhpcmFnYW5hPTEyNDIzO2UueW9zbWFsbGthdGFrYW5hPTEyNTE5O2UueW9zbWFsbGthdGFrYW5haGFsZndpZHRoPTY1MzkwO2UueW90Z3JlZWs9MTAxMTtlLnlveWFla29yZWFuPTEyNjgwO2UueW95YWtvcmVhbj0xMjY3OTtlLnlveWFrdGhhaT0zNjE4O2UueW95aW5ndGhhaT0zNTk3O2UueXBhcmVuPTkzOTY7ZS55cG9nZWdyYW1tZW5pPTg5MDtlLnlwb2dlZ3JhbW1lbmlncmVla2NtYj04Mzc7ZS55cj00MjI7ZS55cmluZz03ODMzO2UueXN1cGVyaW9yPTY5NjtlLnl0aWxkZT03OTI5O2UueXR1cm5lZD02NTQ7ZS55dWhpcmFnYW5hPTEyNDIyO2UueXVpa29yZWFuPTEyNjg0O2UueXVrYXRha2FuYT0xMjUxODtlLnl1a2F0YWthbmFoYWxmd2lkdGg9NjU0Mjk7ZS55dWtvcmVhbj0xMjY0MDtlLnl1c2JpZ2N5cmlsbGljPTExMzE7ZS55dXNiaWdpb3RpZmllZGN5cmlsbGljPTExMzM7ZS55dXNsaXR0bGVjeXJpbGxpYz0xMTI3O2UueXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYz0xMTI5O2UueXVzbWFsbGhpcmFnYW5hPTEyNDIxO2UueXVzbWFsbGthdGFrYW5hPTEyNTE3O2UueXVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg5O2UueXV5ZWtvcmVhbj0xMjY4MztlLnl1eWVva29yZWFuPTEyNjgyO2UueXlhYmVuZ2FsaT0yNTI3O2UueXlhZGV2YT0yMzk5O2Uuej0xMjI7ZS56YWFybWVuaWFuPTEzODI7ZS56YWN1dGU9Mzc4O2UuemFkZXZhPTIzOTU7ZS56YWd1cm11a2hpPTI2NTE7ZS56YWhhcmFiaWM9MTU5MjtlLnphaGZpbmFsYXJhYmljPTY1MjIyO2UuemFoaW5pdGlhbGFyYWJpYz02NTIyMztlLnphaGlyYWdhbmE9MTIzNzQ7ZS56YWhtZWRpYWxhcmFiaWM9NjUyMjQ7ZS56YWluYXJhYmljPTE1ODY7ZS56YWluZmluYWxhcmFiaWM9NjUyMDA7ZS56YWthdGFrYW5hPTEyNDcwO2UuemFxZWZnYWRvbGhlYnJldz0xNDI5O2UuemFxZWZxYXRhbmhlYnJldz0xNDI4O2UuemFycWFoZWJyZXc9MTQzMjtlLnpheWluPTE0OTQ7ZS56YXlpbmRhZ2VzaD02NDMxMDtlLnpheWluZGFnZXNoaGVicmV3PTY0MzEwO2UuemF5aW5oZWJyZXc9MTQ5NDtlLnpib3BvbW9mbz0xMjU2NztlLnpjYXJvbj0zODI7ZS56Y2lyY2xlPTk0NDk7ZS56Y2lyY3VtZmxleD03ODI1O2UuemN1cmw9NjU3O2UuemRvdD0zODA7ZS56ZG90YWNjZW50PTM4MDtlLnpkb3RiZWxvdz03ODI3O2UuemVjeXJpbGxpYz0xMDc5O2UuemVkZXNjZW5kZXJjeXJpbGxpYz0xMTc3O2UuemVkaWVyZXNpc2N5cmlsbGljPTEyNDc7ZS56ZWhpcmFnYW5hPTEyMzgwO2UuemVrYXRha2FuYT0xMjQ3NjtlLnplcm89NDg7ZS56ZXJvYXJhYmljPTE2MzI7ZS56ZXJvYmVuZ2FsaT0yNTM0O2UuemVyb2RldmE9MjQwNjtlLnplcm9ndWphcmF0aT0yNzkwO2UuemVyb2d1cm11a2hpPTI2NjI7ZS56ZXJvaGFja2FyYWJpYz0xNjMyO2UuemVyb2luZmVyaW9yPTgzMjA7ZS56ZXJvbW9ub3NwYWNlPTY1Mjk2O2UuemVyb29sZHN0eWxlPTYzMjgwO2UuemVyb3BlcnNpYW49MTc3NjtlLnplcm9zdXBlcmlvcj04MzA0O2UuemVyb3RoYWk9MzY2NDtlLnplcm93aWR0aGpvaW5lcj02NTI3OTtlLnplcm93aWR0aG5vbmpvaW5lcj04MjA0O2UuemVyb3dpZHRoc3BhY2U9ODIwMztlLnpldGE9OTUwO2Uuemhib3BvbW9mbz0xMjU2MztlLnpoZWFybWVuaWFuPTEzODY7ZS56aGVicmV2ZWN5cmlsbGljPTEyMTg7ZS56aGVjeXJpbGxpYz0xMDc4O2UuemhlZGVzY2VuZGVyY3lyaWxsaWM9MTE3NTtlLnpoZWRpZXJlc2lzY3lyaWxsaWM9MTI0NTtlLnppaGlyYWdhbmE9MTIzNzY7ZS56aWthdGFrYW5hPTEyNDcyO2Uuemlub3JoZWJyZXc9MTQ1NDtlLnpsaW5lYmVsb3c9NzgyOTtlLnptb25vc3BhY2U9NjUzNzA7ZS56b2hpcmFnYW5hPTEyMzgyO2Uuem9rYXRha2FuYT0xMjQ3ODtlLnpwYXJlbj05Mzk3O2UuenJldHJvZmxleGhvb2s9NjU2O2UuenN0cm9rZT00Mzg7ZS56dWhpcmFnYW5hPTEyMzc4O2UuenVrYXRha2FuYT0xMjQ3NDtlWyIubm90ZGVmIl09MDtlLmFuZ2JyYWNrZXRsZWZ0YmlnPTkwMDE7ZS5hbmdicmFja2V0bGVmdEJpZz05MDAxO2UuYW5nYnJhY2tldGxlZnRiaWdnPTkwMDE7ZS5hbmdicmFja2V0bGVmdEJpZ2c9OTAwMTtlLmFuZ2JyYWNrZXRyaWdodEJpZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0YmlnPTkwMDI7ZS5hbmdicmFja2V0cmlnaHRCaWdnPTkwMDI7ZS5hbmdicmFja2V0cmlnaHRiaWdnPTkwMDI7ZS5hcnJvd2hvb2tsZWZ0PTg2MTg7ZS5hcnJvd2hvb2tyaWdodD04NjE3O2UuYXJyb3dsZWZ0dG9waGFsZj04NjM2O2UuYXJyb3dsZWZ0Ym90aGFsZj04NjM3O2UuYXJyb3dub3J0aGVhc3Q9ODU5OTtlLmFycm93bm9ydGh3ZXN0PTg1OTg7ZS5hcnJvd3JpZ2h0dG9waGFsZj04NjQwO2UuYXJyb3dyaWdodGJvdGhhbGY9ODY0MTtlLmFycm93c291dGhlYXN0PTg2MDA7ZS5hcnJvd3NvdXRod2VzdD04NjAxO2UuYmFja3NsYXNoYmlnPTg3MjY7ZS5iYWNrc2xhc2hCaWc9ODcyNjtlLmJhY2tzbGFzaEJpZ2c9ODcyNjtlLmJhY2tzbGFzaGJpZ2c9ODcyNjtlLmJhcmRibD04MjE0O2UuYnJhY2VodGlwZG93bmxlZnQ9NjUwNzk7ZS5icmFjZWh0aXBkb3ducmlnaHQ9NjUwNzk7ZS5icmFjZWh0aXB1cGxlZnQ9NjUwODA7ZS5icmFjZWh0aXB1cHJpZ2h0PTY1MDgwO2UuYnJhY2VsZWZ0QmlnPTEyMztlLmJyYWNlbGVmdGJpZz0xMjM7ZS5icmFjZWxlZnRiaWdnPTEyMztlLmJyYWNlbGVmdEJpZ2c9MTIzO2UuYnJhY2VyaWdodEJpZz0xMjU7ZS5icmFjZXJpZ2h0YmlnPTEyNTtlLmJyYWNlcmlnaHRiaWdnPTEyNTtlLmJyYWNlcmlnaHRCaWdnPTEyNTtlLmJyYWNrZXRsZWZ0YmlnPTkxO2UuYnJhY2tldGxlZnRCaWc9OTE7ZS5icmFja2V0bGVmdGJpZ2c9OTE7ZS5icmFja2V0bGVmdEJpZ2c9OTE7ZS5icmFja2V0cmlnaHRCaWc9OTM7ZS5icmFja2V0cmlnaHRiaWc9OTM7ZS5icmFja2V0cmlnaHRiaWdnPTkzO2UuYnJhY2tldHJpZ2h0QmlnZz05MztlLmNlaWxpbmdsZWZ0YmlnPTg5Njg7ZS5jZWlsaW5nbGVmdEJpZz04OTY4O2UuY2VpbGluZ2xlZnRCaWdnPTg5Njg7ZS5jZWlsaW5nbGVmdGJpZ2c9ODk2ODtlLmNlaWxpbmdyaWdodGJpZz04OTY5O2UuY2VpbGluZ3JpZ2h0QmlnPTg5Njk7ZS5jZWlsaW5ncmlnaHRiaWdnPTg5Njk7ZS5jZWlsaW5ncmlnaHRCaWdnPTg5Njk7ZS5jaXJjbGVkb3RkaXNwbGF5PTg4NTc7ZS5jaXJjbGVkb3R0ZXh0PTg4NTc7ZS5jaXJjbGVtdWx0aXBseWRpc3BsYXk9ODg1NTtlLmNpcmNsZW11bHRpcGx5dGV4dD04ODU1O2UuY2lyY2xlcGx1c2Rpc3BsYXk9ODg1MztlLmNpcmNsZXBsdXN0ZXh0PTg4NTM7ZS5jb250aW50ZWdyYWxkaXNwbGF5PTg3NTA7ZS5jb250aW50ZWdyYWx0ZXh0PTg3NTA7ZS5jb3Byb2R1Y3RkaXNwbGF5PTg3MjA7ZS5jb3Byb2R1Y3R0ZXh0PTg3MjA7ZS5mbG9vcmxlZnRCaWc9ODk3MDtlLmZsb29ybGVmdGJpZz04OTcwO2UuZmxvb3JsZWZ0YmlnZz04OTcwO2UuZmxvb3JsZWZ0QmlnZz04OTcwO2UuZmxvb3JyaWdodGJpZz04OTcxO2UuZmxvb3JyaWdodEJpZz04OTcxO2UuZmxvb3JyaWdodEJpZ2c9ODk3MTtlLmZsb29ycmlnaHRiaWdnPTg5NzE7ZS5oYXR3aWRlPTc3MDtlLmhhdHdpZGVyPTc3MDtlLmhhdHdpZGVzdD03NzA7ZS5pbnRlcmNhbD03NDg4O2UuaW50ZWdyYWxkaXNwbGF5PTg3NDc7ZS5pbnRlZ3JhbHRleHQ9ODc0NztlLmludGVyc2VjdGlvbmRpc3BsYXk9ODg5ODtlLmludGVyc2VjdGlvbnRleHQ9ODg5ODtlLmxvZ2ljYWxhbmRkaXNwbGF5PTg3NDM7ZS5sb2dpY2FsYW5kdGV4dD04NzQzO2UubG9naWNhbG9yZGlzcGxheT04NzQ0O2UubG9naWNhbG9ydGV4dD04NzQ0O2UucGFyZW5sZWZ0QmlnPTQwO2UucGFyZW5sZWZ0YmlnPTQwO2UucGFyZW5sZWZ0QmlnZz00MDtlLnBhcmVubGVmdGJpZ2c9NDA7ZS5wYXJlbnJpZ2h0QmlnPTQxO2UucGFyZW5yaWdodGJpZz00MTtlLnBhcmVucmlnaHRCaWdnPTQxO2UucGFyZW5yaWdodGJpZ2c9NDE7ZS5wcmltZT04MjQyO2UucHJvZHVjdGRpc3BsYXk9ODcxOTtlLnByb2R1Y3R0ZXh0PTg3MTk7ZS5yYWRpY2FsYmlnPTg3MzA7ZS5yYWRpY2FsQmlnPTg3MzA7ZS5yYWRpY2FsQmlnZz04NzMwO2UucmFkaWNhbGJpZ2c9ODczMDtlLnJhZGljYWxidD04NzMwO2UucmFkaWNhbHRwPTg3MzA7ZS5yYWRpY2FsdmVydGV4PTg3MzA7ZS5zbGFzaGJpZz00NztlLnNsYXNoQmlnPTQ3O2Uuc2xhc2hCaWdnPTQ3O2Uuc2xhc2hiaWdnPTQ3O2Uuc3VtbWF0aW9uZGlzcGxheT04NzIxO2Uuc3VtbWF0aW9udGV4dD04NzIxO2UudGlsZGV3aWRlPTczMjtlLnRpbGRld2lkZXI9NzMyO2UudGlsZGV3aWRlc3Q9NzMyO2UudW5pb25kaXNwbGF5PTg4OTk7ZS51bmlvbm11bHRpZGlzcGxheT04ODQ2O2UudW5pb25tdWx0aXRleHQ9ODg0NjtlLnVuaW9uc3FkaXNwbGF5PTg4NTI7ZS51bmlvbnNxdGV4dD04ODUyO2UudW5pb250ZXh0PTg4OTk7ZS52ZXh0ZW5kZG91YmxlPTg3NDE7ZS52ZXh0ZW5kc2luZ2xlPTg3Mzl9KSksbj0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MzI7ZS5hMT05OTg1O2UuYTI9OTk4NjtlLmEyMDI9OTk4NztlLmEzPTk5ODg7ZS5hND05NzQyO2UuYTU9OTk5MDtlLmExMTk9OTk5MTtlLmExMTg9OTk5MjtlLmExMTc9OTk5MztlLmExMT05NzU1O2UuYTEyPTk3NTg7ZS5hMTM9OTk5NjtlLmExND05OTk3O2UuYTE1PTk5OTg7ZS5hMTY9OTk5OTtlLmExMDU9MWU0O2UuYTE3PTEwMDAxO2UuYTE4PTEwMDAyO2UuYTE5PTEwMDAzO2UuYTIwPTEwMDA0O2UuYTIxPTEwMDA1O2UuYTIyPTEwMDA2O2UuYTIzPTEwMDA3O2UuYTI0PTEwMDA4O2UuYTI1PTEwMDA5O2UuYTI2PTEwMDEwO2UuYTI3PTEwMDExO2UuYTI4PTEwMDEyO2UuYTY9MTAwMTM7ZS5hNz0xMDAxNDtlLmE4PTEwMDE1O2UuYTk9MTAwMTY7ZS5hMTA9MTAwMTc7ZS5hMjk9MTAwMTg7ZS5hMzA9MTAwMTk7ZS5hMzE9MTAwMjA7ZS5hMzI9MTAwMjE7ZS5hMzM9MTAwMjI7ZS5hMzQ9MTAwMjM7ZS5hMzU9OTczMztlLmEzNj0xMDAyNTtlLmEzNz0xMDAyNjtlLmEzOD0xMDAyNztlLmEzOT0xMDAyODtlLmE0MD0xMDAyOTtlLmE0MT0xMDAzMDtlLmE0Mj0xMDAzMTtlLmE0Mz0xMDAzMjtlLmE0ND0xMDAzMztlLmE0NT0xMDAzNDtlLmE0Nj0xMDAzNTtlLmE0Nz0xMDAzNjtlLmE0OD0xMDAzNztlLmE0OT0xMDAzODtlLmE1MD0xMDAzOTtlLmE1MT0xMDA0MDtlLmE1Mj0xMDA0MTtlLmE1Mz0xMDA0MjtlLmE1ND0xMDA0MztlLmE1NT0xMDA0NDtlLmE1Nj0xMDA0NTtlLmE1Nz0xMDA0NjtlLmE1OD0xMDA0NztlLmE1OT0xMDA0ODtlLmE2MD0xMDA0OTtlLmE2MT0xMDA1MDtlLmE2Mj0xMDA1MTtlLmE2Mz0xMDA1MjtlLmE2ND0xMDA1MztlLmE2NT0xMDA1NDtlLmE2Nj0xMDA1NTtlLmE2Nz0xMDA1NjtlLmE2OD0xMDA1NztlLmE2OT0xMDA1ODtlLmE3MD0xMDA1OTtlLmE3MT05Njc5O2UuYTcyPTEwMDYxO2UuYTczPTk2MzI7ZS5hNzQ9MTAwNjM7ZS5hMjAzPTEwMDY0O2UuYTc1PTEwMDY1O2UuYTIwND0xMDA2NjtlLmE3Nj05NjUwO2UuYTc3PTk2NjA7ZS5hNzg9OTY3MDtlLmE3OT0xMDA3MDtlLmE4MT05Njg3O2UuYTgyPTEwMDcyO2UuYTgzPTEwMDczO2UuYTg0PTEwMDc0O2UuYTk3PTEwMDc1O2UuYTk4PTEwMDc2O2UuYTk5PTEwMDc3O2UuYTEwMD0xMDA3ODtlLmExMDE9MTAwODE7ZS5hMTAyPTEwMDgyO2UuYTEwMz0xMDA4MztlLmExMDQ9MTAwODQ7ZS5hMTA2PTEwMDg1O2UuYTEwNz0xMDA4NjtlLmExMDg9MTAwODc7ZS5hMTEyPTk4Mjc7ZS5hMTExPTk4MzA7ZS5hMTEwPTk4Mjk7ZS5hMTA5PTk4MjQ7ZS5hMTIwPTkzMTI7ZS5hMTIxPTkzMTM7ZS5hMTIyPTkzMTQ7ZS5hMTIzPTkzMTU7ZS5hMTI0PTkzMTY7ZS5hMTI1PTkzMTc7ZS5hMTI2PTkzMTg7ZS5hMTI3PTkzMTk7ZS5hMTI4PTkzMjA7ZS5hMTI5PTkzMjE7ZS5hMTMwPTEwMTAyO2UuYTEzMT0xMDEwMztlLmExMzI9MTAxMDQ7ZS5hMTMzPTEwMTA1O2UuYTEzND0xMDEwNjtlLmExMzU9MTAxMDc7ZS5hMTM2PTEwMTA4O2UuYTEzNz0xMDEwOTtlLmExMzg9MTAxMTA7ZS5hMTM5PTEwMTExO2UuYTE0MD0xMDExMjtlLmExNDE9MTAxMTM7ZS5hMTQyPTEwMTE0O2UuYTE0Mz0xMDExNTtlLmExNDQ9MTAxMTY7ZS5hMTQ1PTEwMTE3O2UuYTE0Nj0xMDExODtlLmExNDc9MTAxMTk7ZS5hMTQ4PTEwMTIwO2UuYTE0OT0xMDEyMTtlLmExNTA9MTAxMjI7ZS5hMTUxPTEwMTIzO2UuYTE1Mj0xMDEyNDtlLmExNTM9MTAxMjU7ZS5hMTU0PTEwMTI2O2UuYTE1NT0xMDEyNztlLmExNTY9MTAxMjg7ZS5hMTU3PTEwMTI5O2UuYTE1OD0xMDEzMDtlLmExNTk9MTAxMzE7ZS5hMTYwPTEwMTMyO2UuYTE2MT04NTk0O2UuYTE2Mz04NTk2O2UuYTE2ND04NTk3O2UuYTE5Nj0xMDEzNjtlLmExNjU9MTAxMzc7ZS5hMTkyPTEwMTM4O2UuYTE2Nj0xMDEzOTtlLmExNjc9MTAxNDA7ZS5hMTY4PTEwMTQxO2UuYTE2OT0xMDE0MjtlLmExNzA9MTAxNDM7ZS5hMTcxPTEwMTQ0O2UuYTE3Mj0xMDE0NTtlLmExNzM9MTAxNDY7ZS5hMTYyPTEwMTQ3O2UuYTE3ND0xMDE0ODtlLmExNzU9MTAxNDk7ZS5hMTc2PTEwMTUwO2UuYTE3Nz0xMDE1MTtlLmExNzg9MTAxNTI7ZS5hMTc5PTEwMTUzO2UuYTE5Mz0xMDE1NDtlLmExODA9MTAxNTU7ZS5hMTk5PTEwMTU2O2UuYTE4MT0xMDE1NztlLmEyMDA9MTAxNTg7ZS5hMTgyPTEwMTU5O2UuYTIwMT0xMDE2MTtlLmExODM9MTAxNjI7ZS5hMTg0PTEwMTYzO2UuYTE5Nz0xMDE2NDtlLmExODU9MTAxNjU7ZS5hMTk0PTEwMTY2O2UuYTE5OD0xMDE2NztlLmExODY9MTAxNjg7ZS5hMTk1PTEwMTY5O2UuYTE4Nz0xMDE3MDtlLmExODg9MTAxNzE7ZS5hMTg5PTEwMTcyO2UuYTE5MD0xMDE3MztlLmExOTE9MTAxNzQ7ZS5hODk9MTAwODg7ZS5hOTA9MTAwODk7ZS5hOTM9MTAwOTA7ZS5hOTQ9MTAwOTE7ZS5hOTE9MTAwOTI7ZS5hOTI9MTAwOTM7ZS5hMjA1PTEwMDk0O2UuYTg1PTEwMDk1O2UuYTIwNj0xMDA5NjtlLmE4Nj0xMDA5NztlLmE4Nz0xMDA5ODtlLmE4OD0xMDA5OTtlLmE5NT0xMDEwMDtlLmE5Nj0xMDEwMTtlWyIubm90ZGVmIl09MH0pKX0sKGUsdCxhKT0+e2Eucih0KTthLmQodCx7Y2xlYXJVbmljb2RlQ2FjaGVzOigpPT5jbGVhclVuaWNvZGVDYWNoZXMsZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeTooKT0+Z2V0Q2hhclVuaWNvZGVDYXRlZ29yeSxnZXRVbmljb2RlRm9yR2x5cGg6KCk9PmdldFVuaWNvZGVGb3JHbHlwaCxnZXRVbmljb2RlUmFuZ2VGb3I6KCk9PmdldFVuaWNvZGVSYW5nZUZvcixtYXBTcGVjaWFsVW5pY29kZVZhbHVlczooKT0+bWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXN9KTtjb25zdCByPSgwLGEoMykuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5O2VbNjMxOTNdPTE2OTtlWzYzNzIwXT0xNzQ7ZVs2MzE5NF09MTc0O2VbNjM3MjJdPTg0ODI7ZVs2MzE5NV09ODQ4MjtlWzYzNzI5XT05MTI3O2VbNjM3MzBdPTkxMjg7ZVs2MzczMV09OTEyOTtlWzYzNzQwXT05MTMxO2VbNjM3NDFdPTkxMzI7ZVs2Mzc0Ml09OTEzMztlWzYzNzI2XT05MTIxO2VbNjM3MjddPTkxMjI7ZVs2MzcyOF09OTEyMztlWzYzNzM3XT05MTI0O2VbNjM3MzhdPTkxMjU7ZVs2MzczOV09OTEyNjtlWzYzNzIzXT05MTE1O2VbNjM3MjRdPTkxMTY7ZVs2MzcyNV09OTExNztlWzYzNzM0XT05MTE4O2VbNjM3MzVdPTkxMTk7ZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcyhlKXtyZXR1cm4gZT49NjU1MjAmJmU8PTY1NTM1PzA6ZT49NjI5NzYmJmU8PTYzNzQzP3IoKVtlXXx8ZToxNzM9PT1lPzQ1OmV9ZnVuY3Rpb24gZ2V0VW5pY29kZUZvckdseXBoKGUsdCl7bGV0IGE9dFtlXTtpZih2b2lkIDAhPT1hKXJldHVybiBhO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IHI7aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pcj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7cj1lLnN1YnN0cmluZygxKX1pZihyPT09ci50b1VwcGVyQ2FzZSgpKXthPXBhcnNlSW50KHIsMTYpO2lmKGE+PTApcmV0dXJuIGF9fXJldHVybi0xfWNvbnN0IGk9W1swLDEyN10sWzEyOCwyNTVdLFsyNTYsMzgzXSxbMzg0LDU5MV0sWzU5Miw2ODcsNzQyNCw3NTUxLDc1NTIsNzYxNV0sWzY4OCw3NjcsNDI3NTIsNDI3ODNdLFs3NjgsODc5LDc2MTYsNzY3OV0sWzg4MCwxMDIzXSxbMTEzOTIsMTE1MTldLFsxMDI0LDEyNzksMTI4MCwxMzI3LDExNzQ0LDExNzc1LDQyNTYwLDQyNjU1XSxbMTMyOCwxNDIzXSxbMTQyNCwxNTM1XSxbNDIyNDAsNDI1NTldLFsxNTM2LDE3OTEsMTg3MiwxOTE5XSxbMTk4NCwyMDQ3XSxbMjMwNCwyNDMxXSxbMjQzMiwyNTU5XSxbMjU2MCwyNjg3XSxbMjY4OCwyODE1XSxbMjgxNiwyOTQzXSxbMjk0NCwzMDcxXSxbMzA3MiwzMTk5XSxbMzIwMCwzMzI3XSxbMzMyOCwzNDU1XSxbMzU4NCwzNzExXSxbMzcxMiwzODM5XSxbNDI1Niw0MzUxLDExNTIwLDExNTY3XSxbNjkxMiw3MDM5XSxbNDM1Miw0NjA3XSxbNzY4MCw3OTM1LDExMzYwLDExMzkxLDQyNzg0LDQzMDA3XSxbNzkzNiw4MTkxXSxbODE5Miw4MzAzLDExNzc2LDExOTAzXSxbODMwNCw4MzUxXSxbODM1Miw4Mzk5XSxbODQwMCw4NDQ3XSxbODQ0OCw4NTI3XSxbODUyOCw4NTkxXSxbODU5Miw4NzAzLDEwMjI0LDEwMjM5LDEwNDk2LDEwNjIzLDExMDA4LDExMjYzXSxbODcwNCw4OTU5LDEwNzUyLDExMDA3LDEwMTc2LDEwMjIzLDEwNjI0LDEwNzUxXSxbODk2MCw5MjE1XSxbOTIxNiw5Mjc5XSxbOTI4MCw5MzExXSxbOTMxMiw5NDcxXSxbOTQ3Miw5NTk5XSxbOTYwMCw5NjMxXSxbOTYzMiw5NzI3XSxbOTcyOCw5OTgzXSxbOTk4NCwxMDE3NV0sWzEyMjg4LDEyMzUxXSxbMTIzNTIsMTI0NDddLFsxMjQ0OCwxMjU0MywxMjc4NCwxMjc5OV0sWzEyNTQ0LDEyNTkxLDEyNzA0LDEyNzM1XSxbMTI1OTIsMTI2ODddLFs0MzA3Miw0MzEzNV0sWzEyODAwLDEzMDU1XSxbMTMwNTYsMTMzMTFdLFs0NDAzMiw1NTIxNV0sWzU1Mjk2LDU3MzQzXSxbNjc4NDAsNjc4NzFdLFsxOTk2OCw0MDk1OSwxMTkwNCwxMjAzMSwxMjAzMiwxMjI1NSwxMjI3MiwxMjI4NywxMzMxMiwxOTkwMywxMzEwNzIsMTczNzkxLDEyNjg4LDEyNzAzXSxbNTczNDQsNjM3NDNdLFsxMjczNiwxMjc4Myw2Mzc0NCw2NDI1NSwxOTQ1NjAsMTk1MTAzXSxbNjQyNTYsNjQzMzVdLFs2NDMzNiw2NTAyM10sWzY1MDU2LDY1MDcxXSxbNjUwNDAsNjUwNTVdLFs2NTEwNCw2NTEzNV0sWzY1MTM2LDY1Mjc5XSxbNjUyODAsNjU1MTldLFs2NTUyMCw2NTUzNV0sWzM4NDAsNDA5NV0sWzE3OTIsMTg3MV0sWzE5MjAsMTk4M10sWzM0NTYsMzU4M10sWzQwOTYsNDI1NV0sWzQ2MDgsNDk5MSw0OTkyLDUwMjMsMTE2NDgsMTE3NDNdLFs1MDI0LDUxMTldLFs1MTIwLDU3NTldLFs1NzYwLDU3OTFdLFs1NzkyLDU4ODddLFs2MDE2LDYxNDNdLFs2MTQ0LDYzMTldLFsxMDI0MCwxMDQ5NV0sWzQwOTYwLDQyMTI3XSxbNTg4OCw1OTE5LDU5MjAsNTk1MSw1OTUyLDU5ODMsNTk4NCw2MDE1XSxbNjYzMDQsNjYzNTFdLFs2NjM1Miw2NjM4M10sWzY2NTYwLDY2NjM5XSxbMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTI5NiwxMTkzNzVdLFsxMTk4MDgsMTIwODMxXSxbMTA0NDQ4MCwxMDQ4NTczXSxbNjUwMjQsNjUwMzksOTE3NzYwLDkxNzk5OV0sWzkxNzUwNCw5MTc2MzFdLFs2NDAwLDY0NzldLFs2NDgwLDY1MjddLFs2NTI4LDY2MjNdLFs2NjU2LDY2ODddLFsxMTI2NCwxMTM1OV0sWzExNTY4LDExNjQ3XSxbMTk5MDQsMTk5NjddLFs0MzAwOCw0MzA1NV0sWzY1NTM2LDY1NjYzLDY1NjY0LDY1NzkxLDY1NzkyLDY1ODU1XSxbNjU4NTYsNjU5MzVdLFs2NjQzMiw2NjQ2M10sWzY2NDY0LDY2NTI3XSxbNjY2NDAsNjY2ODddLFs2NjY4OCw2NjczNV0sWzY3NTg0LDY3NjQ3XSxbNjgwOTYsNjgxOTFdLFsxMTk1NTIsMTE5NjQ3XSxbNzM3MjgsNzQ3NTEsNzQ3NTIsNzQ4NzldLFsxMTk2NDgsMTE5Njc5XSxbNzA0MCw3MTAzXSxbNzE2OCw3MjQ3XSxbNzI0OCw3Mjk1XSxbNDMxMzYsNDMyMzFdLFs0MzI2NCw0MzMxMV0sWzQzMzEyLDQzMzU5XSxbNDM1MjAsNDM2MTVdLFs2NTkzNiw2NTk5OV0sWzY2ZTMsNjYwNDddLFs2NjIwOCw2NjI3MSw2NjE3Niw2NjIwNyw2Nzg3Miw2NzkwM10sWzEyNzAyNCwxMjcxMzUsMTI2OTc2LDEyNzAyM11dO2Z1bmN0aW9uIGdldFVuaWNvZGVSYW5nZUZvcihlLHQ9LTEpe2lmKC0xIT09dCl7Y29uc3QgYT1pW3RdO2ZvcihsZXQgcj0wLGk9YS5sZW5ndGg7cjxpO3IrPTIpaWYoZT49YVtyXSYmZTw9YVtyKzFdKXJldHVybiB0fWZvcihsZXQgdD0wLGE9aS5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1pW3RdO2ZvcihsZXQgcj0wLGk9YS5sZW5ndGg7cjxpO3IrPTIpaWYoZT49YVtyXSYmZTw9YVtyKzFdKXJldHVybiB0fXJldHVybi0xfWNvbnN0IG49bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLHM9bmV3IE1hcDtmdW5jdGlvbiBnZXRDaGFyVW5pY29kZUNhdGVnb3J5KGUpe2NvbnN0IHQ9cy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPWUubWF0Y2gobikscj17aXNXaGl0ZXNwYWNlOiEhYT8uWzFdLGlzWmVyb1dpZHRoRGlhY3JpdGljOiEhYT8uWzJdLGlzSW52aXNpYmxlRm9ybWF0TWFyazohIWE/LlszXX07cy5zZXQoZSxyKTtyZXR1cm4gcn1mdW5jdGlvbiBjbGVhclVuaWNvZGVDYWNoZXMoKXtzLmNsZWFyKCl9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZ2V0U2VyaWZGb250cz10LmdldE5vblN0ZEZvbnRNYXA9dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9dC5nZXRGb250TmFtZVRvRmlsZU1hcD12b2lkIDA7dC5nZXRTdGFuZGFyZEZvbnROYW1lPWZ1bmN0aW9uIGdldFN0YW5kYXJkRm9udE5hbWUoZSl7Y29uc3QgdD0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gbigpW3RdfTt0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciByPWEoMyksaT1hKDM4KTtjb25zdCBuPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iO2UuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiO2UuQ291cmllcj0iQ291cmllciI7ZS5TeW1ib2w9IlN5bWJvbCI7ZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCI7ZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyI7ZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiO2VbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIjtlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWw9IkhlbHZldGljYSI7ZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbE1UPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkFyaWFsLUJvbGRJdGFsaWNNVC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtQm9sZE1ULUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUl0YWxpY01ULUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbFVuaWNvZGVNUz0iSGVsdmV0aWNhIjtlWyJBcmlhbFVuaWNvZGVNUy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbFVuaWNvZGVNUy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWxVbmljb2RlTVMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJDb3VyaWVyLUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllci1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlLkNvdXJpZXJOZXc9IkNvdXJpZXIiO2VbIkNvdXJpZXJOZXctQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2VbIkNvdXJpZXJOZXctQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyTmV3LUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIkNvdXJpZXJOZXdQUy1Cb2xkSXRhbGljTVQiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllck5ld1BTLUJvbGRNVCJdPSJDb3VyaWVyLUJvbGQiO2VbIkNvdXJpZXJOZXdQUy1JdGFsaWNNVCJdPSJDb3VyaWVyLU9ibGlxdWUiO2UuQ291cmllck5ld1BTTVQ9IkNvdXJpZXIiO2VbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiSGVsdmV0aWNhLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiU3ltYm9sLUJvbGQiXT0iU3ltYm9sIjtlWyJTeW1ib2wtQm9sZEl0YWxpYyJdPSJTeW1ib2wiO2VbIlN5bWJvbC1JdGFsaWMiXT0iU3ltYm9sIjtlLlRpbWVzTmV3Um9tYW49IlRpbWVzLVJvbWFuIjtlWyJUaW1lc05ld1JvbWFuLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW4tSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZS5UaW1lc05ld1JvbWFuUFM9IlRpbWVzLVJvbWFuIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVCJdPSJUaW1lcy1JdGFsaWMiO2UuVGltZXNOZXdSb21hblBTTVQ9IlRpbWVzLVJvbWFuIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTTVQtSXRhbGljIl09IlRpbWVzLUl0YWxpYyJ9KSk7dC5nZXRTdGRGb250TWFwPW47Y29uc3Qgcz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj0iRm94aXRGaXhlZC5wZmIiO2VbIkNvdXJpZXItQm9sZCJdPSJGb3hpdEZpeGVkQm9sZC5wZmIiO2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT0iRm94aXRGaXhlZEJvbGRJdGFsaWMucGZiIjtlWyJDb3VyaWVyLU9ibGlxdWUiXT0iRm94aXRGaXhlZEl0YWxpYy5wZmIiO2UuSGVsdmV0aWNhPSJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiI7ZVsiSGVsdmV0aWNhLUJvbGQiXT0iTGliZXJhdGlvblNhbnMtQm9sZC50dGYiO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiI7ZVsiVGltZXMtUm9tYW4iXT0iRm94aXRTZXJpZi5wZmIiO2VbIlRpbWVzLUJvbGQiXT0iRm94aXRTZXJpZkJvbGQucGZiIjtlWyJUaW1lcy1Cb2xkSXRhbGljIl09IkZveGl0U2VyaWZCb2xkSXRhbGljLnBmYiI7ZVsiVGltZXMtSXRhbGljIl09IkZveGl0U2VyaWZJdGFsaWMucGZiIjtlLlN5bWJvbD0iRm94aXRTeW1ib2wucGZiIjtlLlphcGZEaW5nYmF0cz0iRm94aXREaW5nYmF0cy5wZmIiO2VbIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiXT0iTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUJvbGQiXT0iTGliZXJhdGlvblNhbnMtQm9sZC50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjtlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIn0pKTt0LmdldEZvbnROYW1lVG9GaWxlTWFwPXM7Y29uc3Qgbz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ2FsaWJyaT0iSGVsdmV0aWNhIjtlWyJDYWxpYnJpLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNhbGlicmktSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkNlbnR1cnlHb3RoaWM9IkhlbHZldGljYSI7ZVsiQ2VudHVyeUdvdGhpYy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDZW50dXJ5R290aGljLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDZW50dXJ5R290aGljLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5Db21pY1NhbnNNUz0iQ29taWMgU2FucyBNUyI7ZVsiQ29taWNTYW5zTVMtQm9sZCJdPSJDb21pYyBTYW5zIE1TLUJvbGQiO2VbIkNvbWljU2Fuc01TLUJvbGRJdGFsaWMiXT0iQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljIjtlWyJDb21pY1NhbnNNUy1JdGFsaWMiXT0iQ29taWMgU2FucyBNUy1JdGFsaWMiO2UuSW1wYWN0PSJIZWx2ZXRpY2EiO2VbIkl0Y1N5bWJvbC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJJdGNTeW1ib2wtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1Cb29rIl09IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLUJvb2tJdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1NZWRpdW0iXT0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtTWVkaXVtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkx1Y2lkYUNvbnNvbGU9IkNvdXJpZXIiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJMdWNpZGFDb25zb2xlLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIkx1Y2lkYVNhbnMtRGVtaSJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiTVMtR290aGljIl09Ik1TIEdvdGhpYyI7ZVsiTVMtR290aGljLUJvbGQiXT0iTVMgR290aGljLUJvbGQiO2VbIk1TLUdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIEdvdGhpYy1Cb2xkSXRhbGljIjtlWyJNUy1Hb3RoaWMtSXRhbGljIl09Ik1TIEdvdGhpYy1JdGFsaWMiO2VbIk1TLU1pbmNobyJdPSJNUyBNaW5jaG8iO2VbIk1TLU1pbmNoby1Cb2xkIl09Ik1TIE1pbmNoby1Cb2xkIjtlWyJNUy1NaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBNaW5jaG8tQm9sZEl0YWxpYyI7ZVsiTVMtTWluY2hvLUl0YWxpYyJdPSJNUyBNaW5jaG8tSXRhbGljIjtlWyJNUy1QR290aGljIl09Ik1TIFBHb3RoaWMiO2VbIk1TLVBHb3RoaWMtQm9sZCJdPSJNUyBQR290aGljLUJvbGQiO2VbIk1TLVBHb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBQR290aGljLUJvbGRJdGFsaWMiO2VbIk1TLVBHb3RoaWMtSXRhbGljIl09Ik1TIFBHb3RoaWMtSXRhbGljIjtlWyJNUy1QTWluY2hvIl09Ik1TIFBNaW5jaG8iO2VbIk1TLVBNaW5jaG8tQm9sZCJdPSJNUyBQTWluY2hvLUJvbGQiO2VbIk1TLVBNaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBQTWluY2hvLUJvbGRJdGFsaWMiO2VbIk1TLVBNaW5jaG8tSXRhbGljIl09Ik1TIFBNaW5jaG8tSXRhbGljIjtlLk51cHRpYWxTY3JpcHQ9IlRpbWVzLUl0YWxpYyI7ZS5TZWdvZVVJU3ltYm9sPSJIZWx2ZXRpY2EifSkpO3QuZ2V0Tm9uU3RkRm9udE1hcD1vO2NvbnN0IGM9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJBZG9iZSBKZW5zb24iXT0hMDtlWyJBZG9iZSBUZXh0Il09ITA7ZS5BbGJlcnR1cz0hMDtlLkFsZHVzPSEwO2UuQWxleGFuZHJpYT0hMDtlLkFsZ2VyaWFuPSEwO2VbIkFtZXJpY2FuIFR5cGV3cml0ZXIiXT0hMDtlLkFudGlxdWE9ITA7ZS5BcGV4PSEwO2UuQXJubz0hMDtlLkFzdGVyPSEwO2UuQXVyb3JhPSEwO2UuQmFza2VydmlsbGU9ITA7ZS5CZWxsPSEwO2UuQmVtYm89ITA7ZVsiQmVtYm8gU2Nob29sYm9vayJdPSEwO2UuQmVuZ3VpYXQ9ITA7ZVsiQmVya2VsZXkgT2xkIFN0eWxlIl09ITA7ZVsiQmVybmhhcmQgTW9kZXJuIl09ITA7ZVsiQmVydGhvbGQgQ2l0eSJdPSEwO2UuQm9kb25pPSEwO2VbIkJhdWVyIEJvZG9uaSJdPSEwO2VbIkJvb2sgQW50aXF1YSJdPSEwO2UuQm9va21hbj0hMDtlWyJCb3JkZWF1eCBSb21hbiJdPSEwO2VbIkNhbGlmb3JuaWFuIEZCIl09ITA7ZS5DYWxpc3RvPSEwO2UuQ2FsdmVydD0hMDtlLkNhcGl0YWxzPSEwO2UuQ2FtYnJpYT0hMDtlLkNhcnRpZXI9ITA7ZS5DYXNsb249ITA7ZS5DYXR1bGw9ITA7ZS5DZW50YXVyPSEwO2VbIkNlbnR1cnkgT2xkIFN0eWxlIl09ITA7ZVsiQ2VudHVyeSBTY2hvb2xib29rIl09ITA7ZS5DaGFwYXJyYWw9ITA7ZVsiQ2hhcmlzIFNJTCJdPSEwO2UuQ2hlbHRlbmhhbT0hMDtlWyJDaG9sbGEgU2xhYiJdPSEwO2UuQ2xhcmVuZG9uPSEwO2UuQ2xlYXJmYWNlPSEwO2UuQ29jaGluPSEwO2UuQ29sb25uYT0hMDtlWyJDb21wdXRlciBNb2Rlcm4iXT0hMDtlWyJDb25jcmV0ZSBSb21hbiJdPSEwO2UuQ29uc3RhbnRpYT0hMDtlWyJDb29wZXIgQmxhY2siXT0hMDtlLkNvcm9uYT0hMDtlLkVjb3R5cGU9ITA7ZS5FZ3lwdGllbm5lPSEwO2UuRWxlcGhhbnQ9ITA7ZS5FeGNlbHNpb3I9ITA7ZS5GYWlyZmllbGQ9ITA7ZVsiRkYgU2NhbGEiXT0hMDtlLkZvbGthcmQ9ITA7ZS5Gb290bGlnaHQ9ITA7ZS5GcmVlU2VyaWY9ITA7ZVsiRnJpeiBRdWFkcmF0YSJdPSEwO2UuR2FyYW1vbmQ9ITA7ZS5HZW50aXVtPSEwO2UuR2VvcmdpYT0hMDtlLkdsb3VjZXN0ZXI9ITA7ZVsiR291ZHkgT2xkIFN0eWxlIl09ITA7ZVsiR291ZHkgU2Nob29sYm9vayJdPSEwO2VbIkdvdWR5IFBybyBGb250Il09ITA7ZS5HcmFuam9uPSEwO2VbIkd1YXJkaWFuIEVneXB0aWFuIl09ITA7ZS5IZWF0aGVyPSEwO2UuSGVyY3VsZXM9ITA7ZVsiSGlnaCBUb3dlciBUZXh0Il09ITA7ZS5IaXJvc2hpZ2U9ITA7ZVsiSG9lZmxlciBUZXh0Il09ITA7ZVsiSHVtYW5hIFNlcmlmIl09ITA7ZS5JbXByaW50PSEwO2VbIklvbmljIE5vLiA1Il09ITA7ZS5KYW5zb249ITA7ZS5Kb2FubmE9ITA7ZS5Lb3Jpbm5hPSEwO2UuTGV4aWNvbj0hMDtlLkxpYmVyYXRpb25TZXJpZj0hMDtlWyJMaWJlcmF0aW9uIFNlcmlmIl09ITA7ZVsiTGludXggTGliZXJ0aW5lIl09ITA7ZS5MaXRlcmF0dXJuYXlhPSEwO2UuTHVjaWRhPSEwO2VbIkx1Y2lkYSBCcmlnaHQiXT0hMDtlLk1lbGlvcj0hMDtlLk1lbXBoaXM9ITA7ZS5NaWxsZXI9ITA7ZS5NaW5pb249ITA7ZS5Nb2Rlcm49ITA7ZVsiTW9uYSBMaXNhIl09ITA7ZVsiTXJzIEVhdmVzIl09ITA7ZVsiTVMgU2VyaWYiXT0hMDtlWyJNdXNlbyBTbGFiIl09ITA7ZVsiTmV3IFlvcmsiXT0hMDtlWyJOaW1idXMgUm9tYW4iXT0hMDtlWyJOUFMgUmF3bGluc29uIFJvYWR3YXkiXT0hMDtlLk51cHRpYWxTY3JpcHQ9ITA7ZS5QYWxhdGlubz0hMDtlLlBlcnBldHVhPSEwO2UuUGxhbnRpbj0hMDtlWyJQbGFudGluIFNjaG9vbGJvb2siXT0hMDtlLlBsYXliaWxsPSEwO2VbIlBvb3IgUmljaGFyZCJdPSEwO2VbIlJhd2xpbnNvbiBSb2Fkd2F5Il09ITA7ZS5SZW5hdWx0PSEwO2UuUmVxdWllbT0hMDtlLlJvY2t3ZWxsPSEwO2UuUm9tYW49ITA7ZVsiUm90aXMgU2VyaWYiXT0hMDtlLlNhYm9uPSEwO2UuU2NhbGE9ITA7ZS5TZWFndWxsPSEwO2UuU2lzdGluYT0hMDtlLlNvdXZlbmlyPSEwO2UuU1RJWD0hMDtlWyJTdG9uZSBJbmZvcm1hbCJdPSEwO2VbIlN0b25lIFNlcmlmIl09ITA7ZS5TeWxmYWVuPSEwO2UuVGltZXM9ITA7ZS5UcmFqYW49ITA7ZVsiVHJpbml0w6kiXT0hMDtlWyJUcnVtcCBNZWRpYWV2YWwiXT0hMDtlLlV0b3BpYT0hMDtlWyJWYWxlIFR5cGUiXT0hMDtlWyJCaXRzdHJlYW0gVmVyYSJdPSEwO2VbIlZlcmEgU2VyaWYiXT0hMDtlLlZlcnNhaWxsZXM9ITA7ZS5XYW50ZWQ9ITA7ZS5XZWlzcz0hMDtlWyJXaWRlIExhdGluIl09ITA7ZS5XaW5kc29yPSEwO2UuWElUUz0hMH0pKTt0LmdldFNlcmlmRm9udHM9Yztjb25zdCBsPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5EaW5nYmF0cz0hMDtlLlN5bWJvbD0hMDtlLlphcGZEaW5nYmF0cz0hMH0pKTt0LmdldFN5bWJvbHNGb250cz1sO2NvbnN0IGg9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzJdPTEwO2VbM109MzI7ZVs0XT0zMztlWzVdPTM0O2VbNl09MzU7ZVs3XT0zNjtlWzhdPTM3O2VbOV09Mzg7ZVsxMF09Mzk7ZVsxMV09NDA7ZVsxMl09NDE7ZVsxM109NDI7ZVsxNF09NDM7ZVsxNV09NDQ7ZVsxNl09NDU7ZVsxN109NDY7ZVsxOF09NDc7ZVsxOV09NDg7ZVsyMF09NDk7ZVsyMV09NTA7ZVsyMl09NTE7ZVsyM109NTI7ZVsyNF09NTM7ZVsyNV09NTQ7ZVsyNl09NTU7ZVsyN109NTY7ZVsyOF09NTc7ZVsyOV09NTg7ZVszMF09ODk0O2VbMzFdPTYwO2VbMzJdPTYxO2VbMzNdPTYyO2VbMzRdPTYzO2VbMzVdPTY0O2VbMzZdPTY1O2VbMzddPTY2O2VbMzhdPTY3O2VbMzldPTY4O2VbNDBdPTY5O2VbNDFdPTcwO2VbNDJdPTcxO2VbNDNdPTcyO2VbNDRdPTczO2VbNDVdPTc0O2VbNDZdPTc1O2VbNDddPTc2O2VbNDhdPTc3O2VbNDldPTc4O2VbNTBdPTc5O2VbNTFdPTgwO2VbNTJdPTgxO2VbNTNdPTgyO2VbNTRdPTgzO2VbNTVdPTg0O2VbNTZdPTg1O2VbNTddPTg2O2VbNThdPTg3O2VbNTldPTg4O2VbNjBdPTg5O2VbNjFdPTkwO2VbNjJdPTkxO2VbNjNdPTkyO2VbNjRdPTkzO2VbNjVdPTk0O2VbNjZdPTk1O2VbNjddPTk2O2VbNjhdPTk3O2VbNjldPTk4O2VbNzBdPTk5O2VbNzFdPTEwMDtlWzcyXT0xMDE7ZVs3M109MTAyO2VbNzRdPTEwMztlWzc1XT0xMDQ7ZVs3Nl09MTA1O2VbNzddPTEwNjtlWzc4XT0xMDc7ZVs3OV09MTA4O2VbODBdPTEwOTtlWzgxXT0xMTA7ZVs4Ml09MTExO2VbODNdPTExMjtlWzg0XT0xMTM7ZVs4NV09MTE0O2VbODZdPTExNTtlWzg3XT0xMTY7ZVs4OF09MTE3O2VbODldPTExODtlWzkwXT0xMTk7ZVs5MV09MTIwO2VbOTJdPTEyMTtlWzkzXT0xMjI7ZVs5NF09MTIzO2VbOTVdPTEyNDtlWzk2XT0xMjU7ZVs5N109MTI2O2VbOThdPTE5NjtlWzk5XT0xOTc7ZVsxMDBdPTE5OTtlWzEwMV09MjAxO2VbMTAyXT0yMDk7ZVsxMDNdPTIxNDtlWzEwNF09MjIwO2VbMTA1XT0yMjU7ZVsxMDZdPTIyNDtlWzEwN109MjI2O2VbMTA4XT0yMjg7ZVsxMDldPTIyNztlWzExMF09MjI5O2VbMTExXT0yMzE7ZVsxMTJdPTIzMztlWzExM109MjMyO2VbMTE0XT0yMzQ7ZVsxMTVdPTIzNTtlWzExNl09MjM3O2VbMTE3XT0yMzY7ZVsxMThdPTIzODtlWzExOV09MjM5O2VbMTIwXT0yNDE7ZVsxMjFdPTI0MztlWzEyMl09MjQyO2VbMTIzXT0yNDQ7ZVsxMjRdPTI0NjtlWzEyNV09MjQ1O2VbMTI2XT0yNTA7ZVsxMjddPTI0OTtlWzEyOF09MjUxO2VbMTI5XT0yNTI7ZVsxMzBdPTgyMjQ7ZVsxMzFdPTE3NjtlWzEzMl09MTYyO2VbMTMzXT0xNjM7ZVsxMzRdPTE2NztlWzEzNV09ODIyNjtlWzEzNl09MTgyO2VbMTM3XT0yMjM7ZVsxMzhdPTE3NDtlWzEzOV09MTY5O2VbMTQwXT04NDgyO2VbMTQxXT0xODA7ZVsxNDJdPTE2ODtlWzE0M109ODgwMDtlWzE0NF09MTk4O2VbMTQ1XT0yMTY7ZVsxNDZdPTg3MzQ7ZVsxNDddPTE3NztlWzE0OF09ODgwNDtlWzE0OV09ODgwNTtlWzE1MF09MTY1O2VbMTUxXT0xODE7ZVsxNTJdPTg3MDY7ZVsxNTNdPTg3MjE7ZVsxNTRdPTg3MTk7ZVsxNTZdPTg3NDc7ZVsxNTddPTE3MDtlWzE1OF09MTg2O2VbMTU5XT04NDg2O2VbMTYwXT0yMzA7ZVsxNjFdPTI0ODtlWzE2Ml09MTkxO2VbMTYzXT0xNjE7ZVsxNjRdPTE3MjtlWzE2NV09ODczMDtlWzE2Nl09NDAyO2VbMTY3XT04Nzc2O2VbMTY4XT04NzEwO2VbMTY5XT0xNzE7ZVsxNzBdPTE4NztlWzE3MV09ODIzMDtlWzE3OV09ODIyMDtlWzE4MF09ODIyMTtlWzE4MV09ODIxNjtlWzE4Ml09ODIxNztlWzIwMF09MTkzO2VbMjAzXT0yMDU7ZVsyMDddPTIxMTtlWzIxMF09MjE4O2VbMjIzXT03MTE7ZVsyMjRdPTMyMTtlWzIyNV09MzIyO2VbMjI2XT0zNTI7ZVsyMjddPTM1MztlWzIyOF09MzgxO2VbMjI5XT0zODI7ZVsyMzNdPTIyMTtlWzIzNF09MjUzO2VbMjUyXT0yNjM7ZVsyNTNdPTI2ODtlWzI1NF09MjY5O2VbMjU4XT0yNTg7ZVsyNjBdPTI2MDtlWzI2MV09MjYxO2VbMjY1XT0yODA7ZVsyNjZdPTI4MTtlWzI2N109MjgyO2VbMjY4XT0yODM7ZVsyNjldPTMxMztlWzI3NV09MzIzO2VbMjc2XT0zMjQ7ZVsyNzhdPTMyODtlWzI4M109MzQ0O2VbMjg0XT0zNDU7ZVsyODVdPTM0NjtlWzI4Nl09MzQ3O2VbMjkyXT0zNjc7ZVsyOTVdPTM3NztlWzI5Nl09Mzc4O2VbMjk4XT0zODA7ZVszMDVdPTk2MztlWzMwNl09OTY0O2VbMzA3XT05NjY7ZVszMDhdPTgyMTU7ZVszMDldPTgyNTI7ZVszMTBdPTgzMTk7ZVszMTFdPTgzNTk7ZVszMTJdPTg1OTI7ZVszMTNdPTg1OTM7ZVszMzddPTk1NTI7ZVs0OTNdPTEwMzk7ZVs0OTRdPTEwNDA7ZVs2NzJdPTE0ODg7ZVs2NzNdPTE0ODk7ZVs2NzRdPTE0OTA7ZVs2NzVdPTE0OTE7ZVs2NzZdPTE0OTI7ZVs2NzddPTE0OTM7ZVs2NzhdPTE0OTQ7ZVs2NzldPTE0OTU7ZVs2ODBdPTE0OTY7ZVs2ODFdPTE0OTc7ZVs2ODJdPTE0OTg7ZVs2ODNdPTE0OTk7ZVs2ODRdPTE1MDA7ZVs2ODVdPTE1MDE7ZVs2ODZdPTE1MDI7ZVs2ODddPTE1MDM7ZVs2ODhdPTE1MDQ7ZVs2ODldPTE1MDU7ZVs2OTBdPTE1MDY7ZVs2OTFdPTE1MDc7ZVs2OTJdPTE1MDg7ZVs2OTNdPTE1MDk7ZVs2OTRdPTE1MTA7ZVs2OTVdPTE1MTE7ZVs2OTZdPTE1MTI7ZVs2OTddPTE1MTM7ZVs2OThdPTE1MTQ7ZVs3MDVdPTE1MjQ7ZVs3MDZdPTgzNjI7ZVs3MTBdPTY0Mjg4O2VbNzExXT02NDI5ODtlWzc1OV09MTYxNztlWzc2MV09MTc3NjtlWzc2M109MTc3ODtlWzc3NV09MTY1MjtlWzc3N109MTc2NDtlWzc3OF09MTc4MDtlWzc3OV09MTc4MTtlWzc4MF09MTc4MjtlWzc4Ml09NzcxO2VbNzgzXT02NDcyNjtlWzc4Nl09ODM2MztlWzc4OF09ODUzMjtlWzc5MF09NzY4O2VbNzkxXT03Njk7ZVs3OTJdPTc2ODtlWzc5NV09ODAzO2VbNzk3XT02NDMzNjtlWzc5OF09NjQzMzc7ZVs3OTldPTY0MzQyO2VbODAwXT02NDM0MztlWzgwMV09NjQzNDQ7ZVs4MDJdPTY0MzQ1O2VbODAzXT02NDM2MjtlWzgwNF09NjQzNjM7ZVs4MDVdPTY0MzY0O2VbMjQyNF09NzgyMTtlWzI0MjVdPTc4MjI7ZVsyNDI2XT03ODIzO2VbMjQyN109NzgyNDtlWzI0MjhdPTc4MjU7ZVsyNDI5XT03ODI2O2VbMjQzMF09NzgyNztlWzI0MzNdPTc2ODI7ZVsyNjc4XT04MDQ1O2VbMjY3OV09ODA0NjtlWzI4MzBdPTE1NTI7ZVsyODM4XT02ODY7ZVsyODQwXT03NTE7ZVsyODQyXT03NTM7ZVsyODQzXT03NTQ7ZVsyODQ0XT03NTU7ZVsyODQ2XT03NTc7ZVsyODU2XT03Njc7ZVsyODU3XT04NDg7ZVsyODU4XT04NDk7ZVsyODYyXT04NTM7ZVsyODYzXT04NTQ7ZVsyODY0XT04NTU7ZVsyODY1XT04NjE7ZVsyODY2XT04NjI7ZVsyOTA2XT03NDYwO2VbMjkwOF09NzQ2MjtlWzI5MDldPTc0NjM7ZVsyOTEwXT03NDY0O2VbMjkxMl09NzQ2NjtlWzI5MTNdPTc0Njc7ZVsyOTE0XT03NDY4O2VbMjkxNl09NzQ3MDtlWzI5MTddPTc0NzE7ZVsyOTE4XT03NDcyO2VbMjkyMF09NzQ3NDtlWzI5MjFdPTc0NzU7ZVsyOTIyXT03NDc2O2VbMjkyNF09NzQ3ODtlWzI5MjVdPTc0Nzk7ZVsyOTI2XT03NDgwO2VbMjkyOF09NzQ4MjtlWzI5MjldPTc0ODM7ZVsyOTMwXT03NDg0O2VbMjkzMl09NzQ4NjtlWzI5MzNdPTc0ODc7ZVsyOTM0XT03NDg4O2VbMjkzNl09NzQ5MDtlWzI5MzddPTc0OTE7ZVsyOTM4XT03NDkyO2VbMjk0MF09NzQ5NDtlWzI5NDFdPTc0OTU7ZVsyOTQyXT03NDk2O2VbMjk0NF09NzQ5ODtlWzI5NDZdPTc1MDA7ZVsyOTQ4XT03NTAyO2VbMjk1MF09NzUwNDtlWzI5NTFdPTc1MDU7ZVsyOTUyXT03NTA2O2VbMjk1NF09NzUwODtlWzI5NTVdPTc1MDk7ZVsyOTU2XT03NTEwO2VbMjk1OF09NzUxMjtlWzI5NTldPTc1MTM7ZVsyOTYwXT03NTE0O2VbMjk2Ml09NzUxNjtlWzI5NjNdPTc1MTc7ZVsyOTY0XT03NTE4O2VbMjk2Nl09NzUyMDtlWzI5NjddPTc1MjE7ZVsyOTY4XT03NTIyO2VbMjk3MF09NzUyNDtlWzI5NzFdPTc1MjU7ZVsyOTcyXT03NTI2O2VbMjk3NF09NzUyODtlWzI5NzVdPTc1Mjk7ZVsyOTc2XT03NTMwO2VbMjk3OF09MTUzNztlWzI5NzldPTE1Mzg7ZVsyOTgwXT0xNTM5O2VbMjk4Ml09MTU0OTtlWzI5ODNdPTE1NTE7ZVsyOTg0XT0xNTUyO2VbMjk4Nl09MTU1NDtlWzI5ODddPTE1NTU7ZVsyOTg4XT0xNTU2O2VbMjk5MF09MTYyMztlWzI5OTFdPTE2MjQ7ZVsyOTk1XT0xNzc1O2VbMjk5OV09MTc5MTtlWzMwMDJdPTY0MjkwO2VbMzAwM109NjQyOTE7ZVszMDA0XT02NDI5MjtlWzMwMDZdPTY0Mjk0O2VbMzAwN109NjQyOTU7ZVszMDA4XT02NDI5NjtlWzMwMTFdPTE5MDA7ZVszMDE0XT04MjIzO2VbMzAxNV09ODI0NDtlWzMwMTddPTc1MzI7ZVszMDE4XT03NTMzO2VbMzAxOV09NzUzNDtlWzMwNzVdPTc1OTA7ZVszMDc2XT03NTkxO2VbMzA3OV09NzU5NDtlWzMwODBdPTc1OTU7ZVszMDgzXT03NTk4O2VbMzA4NF09NzU5OTtlWzMwODddPTc2MDI7ZVszMDg4XT03NjAzO2VbMzA5MV09NzYwNjtlWzMwOTJdPTc2MDc7ZVszMDk1XT03NjEwO2VbMzA5Nl09NzYxMTtlWzMwOTldPTc2MTQ7ZVszMTAwXT03NjE1O2VbMzEwM109NzYxODtlWzMxMDRdPTc2MTk7ZVszMTA3XT04MzM3O2VbMzEwOF09ODMzODtlWzMxMTZdPTE4ODQ7ZVszMTE5XT0xODg1O2VbMzEyMF09MTg4NTtlWzMxMjNdPTE4ODY7ZVszMTI0XT0xODg2O2VbMzEyN109MTg4NztlWzMxMjhdPTE4ODc7ZVszMTMxXT0xODg4O2VbMzEzMl09MTg4ODtlWzMxMzVdPTE4ODk7ZVszMTM2XT0xODg5O2VbMzEzOV09MTg5MDtlWzMxNDBdPTE4OTA7ZVszMTQzXT0xODkxO2VbMzE0NF09MTg5MTtlWzMxNDddPTE4OTI7ZVszMTQ4XT0xODkyO2VbMzE1M109NTgwO2VbMzE1NF09NTgxO2VbMzE1N109NTg0O2VbMzE1OF09NTg1O2VbMzE2MV09NTg4O2VbMzE2Ml09NTg5O2VbMzE2NV09ODkxO2VbMzE2Nl09ODkyO2VbMzE2OV09MTI3NDtlWzMxNzBdPTEyNzU7ZVszMTczXT0xMjc4O2VbMzE3NF09MTI3OTtlWzMxODFdPTc2MjI7ZVszMTgyXT03NjIzO2VbMzI4Ml09MTE3OTk7ZVszMzE2XT01Nzg7ZVszMzc5XT00Mjc4NTtlWzMzOTNdPTExNTk7ZVszNDE2XT04Mzc3fSkpO3QuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPWg7Y29uc3QgdT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjI7ZVsyNjRdPTI2MTtlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPXU7Y29uc3QgZD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMV09MzI7ZVs0XT02NTtlWzVdPTE5MjtlWzZdPTE5MztlWzldPTE5NjtlWzE3XT02NjtlWzE4XT02NztlWzIxXT0yNjg7ZVsyNF09Njg7ZVsyOF09Njk7ZVsyOV09MjAwO2VbMzBdPTIwMTtlWzMyXT0yODI7ZVszOF09NzA7ZVszOV09NzE7ZVs0NF09NzI7ZVs0N109NzM7ZVs0OF09MjA0O2VbNDldPTIwNTtlWzU4XT03NDtlWzYwXT03NTtlWzYyXT03NjtlWzY4XT03NztlWzY5XT03ODtlWzc1XT03OTtlWzc2XT0yMTA7ZVs4MF09MjE0O2VbODddPTgwO2VbODldPTgxO2VbOTBdPTgyO2VbOTJdPTM0NDtlWzk0XT04MztlWzk3XT0zNTI7ZVsxMDBdPTg0O2VbMTA0XT04NTtlWzEwOV09MjIwO2VbMTE1XT04NjtlWzExNl09ODc7ZVsxMjFdPTg4O2VbMTIyXT04OTtlWzEyNF09MjIxO2VbMTI3XT05MDtlWzEyOV09MzgxO2VbMjU4XT05NztlWzI1OV09MjI0O2VbMjYwXT0yMjU7ZVsyNjNdPTIyODtlWzI2OF09MjYxO2VbMjcxXT05ODtlWzI3Ml09OTk7ZVsyNzNdPTI2MztlWzI3NV09MjY5O2VbMjgyXT0xMDA7ZVsyODZdPTEwMTtlWzI4N109MjMyO2VbMjg4XT0yMzM7ZVsyOTBdPTI4MztlWzI5NV09MjgxO2VbMjk2XT0xMDI7ZVszMzZdPTEwMztlWzM0Nl09MTA0O2VbMzQ5XT0xMDU7ZVszNTBdPTIzNjtlWzM1MV09MjM3O2VbMzYxXT0xMDY7ZVszNjRdPTEwNztlWzM2N109MTA4O2VbMzcxXT0zMjI7ZVszNzNdPTEwOTtlWzM3NF09MTEwO2VbMzgxXT0xMTE7ZVszODJdPTI0MjtlWzM4M109MjQzO2VbMzg2XT0yNDY7ZVszOTNdPTExMjtlWzM5NV09MTEzO2VbMzk2XT0xMTQ7ZVszOThdPTM0NTtlWzQwMF09MTE1O2VbNDAxXT0zNDc7ZVs0MDNdPTM1MztlWzQxMF09MTE2O2VbNDM3XT0xMTc7ZVs0NDJdPTI1MjtlWzQ0OF09MTE4O2VbNDQ5XT0xMTk7ZVs0NTRdPTEyMDtlWzQ1NV09MTIxO2VbNDU3XT0yNTM7ZVs0NjBdPTEyMjtlWzQ2Ml09MzgyO2VbNDYzXT0zODA7ZVs4NTNdPTQ0O2VbODU1XT01ODtlWzg1Nl09NDY7ZVs4NzZdPTQ3O2VbODc4XT00NTtlWzg4Ml09NDU7ZVs4OTRdPTQwO2VbODk1XT00MTtlWzg5Nl09OTE7ZVs4OTddPTkzO2VbOTIzXT02NDtlWzEwMDRdPTQ4O2VbMTAwNV09NDk7ZVsxMDA2XT01MDtlWzEwMDddPTUxO2VbMTAwOF09NTI7ZVsxMDA5XT01MztlWzEwMTBdPTU0O2VbMTAxMV09NTU7ZVsxMDEyXT01NjtlWzEwMTNdPTU3O2VbMTA4MV09Mzc7ZVsxMDg1XT00MztlWzEwODZdPTQ1fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPWR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Ub1VuaWNvZGVNYXA9dC5JZGVudGl0eVRvVW5pY29kZU1hcD12b2lkIDA7dmFyIHI9YSgyKTt0LlRvVW5pY29kZU1hcD1jbGFzcyBUb1VuaWNvZGVNYXB7Y29uc3RydWN0b3IoZT1bXSl7dGhpcy5fbWFwPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLl9tYXBbdF0uY2hhckNvZGVBdCgwKSl9aGFzKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19Z2V0KGUpe3JldHVybiB0aGlzLl9tYXBbZV19Y2hhckNvZGVPZihlKXtjb25zdCB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IoY29uc3QgYSBpbiB0KWlmKHRbYV09PT1lKXJldHVybiAwfGE7cmV0dXJuLTF9YW1lbmQoZSl7Zm9yKGNvbnN0IHQgaW4gZSl0aGlzLl9tYXBbdF09ZVt0XX19O3QuSWRlbnRpdHlUb1VuaWNvZGVNYXA9Y2xhc3MgSWRlbnRpdHlUb1VuaWNvZGVNYXB7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZpcnN0Q2hhcj1lO3RoaXMubGFzdENoYXI9dH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn1mb3JFYWNoKGUpe2ZvcihsZXQgdD10aGlzLmZpcnN0Q2hhcixhPXRoaXMubGFzdENoYXI7dDw9YTt0KyspZSh0LHQpfWhhcyhlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9Z2V0KGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfWNoYXJDb2RlT2YoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9YW1lbmQoZSl7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNGRkZvbnQ9dm9pZCAwO3ZhciByPWEoMzUpLGk9YSgzOCksbj1hKDIpO3QuQ0ZGRm9udD1jbGFzcyBDRkZGb250e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7Y29uc3QgYT1uZXcgci5DRkZQYXJzZXIoZSx0LGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1hLnBhcnNlKCk7dGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IHM9bmV3IHIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO3RoaXMuc2VhY3M9dGhpcy5jZmYuc2VhY3M7dHJ5e3RoaXMuZGF0YT1zLmNvbXBpbGUoKX1jYXRjaChhKXsoMCxuLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrdC5sb2FkZWROYW1lKTt0aGlzLmRhdGE9ZX10aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50fWdldENoYXJzZXQoKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fWdldEdseXBoTWFwcGluZygpe2NvbnN0IGU9dGhpcy5jZmYsdD10aGlzLnByb3BlcnRpZXMse2NpZFRvR2lkTWFwOmEsY01hcDpyfT10LG49ZS5jaGFyc2V0LmNoYXJzZXQ7bGV0IHMsbztpZih0LmNvbXBvc2l0ZSl7bGV0IHQsaTtpZihhPy5sZW5ndGg+MCl7dD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT0wLHI9YS5sZW5ndGg7ZTxyO2UrKyl7Y29uc3Qgcj1hW2VdO3ZvaWQgMCE9PXImJih0W3JdPWUpfX1zPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZS5pc0NJREZvbnQpZm9yKG89MDtvPG4ubGVuZ3RoO28rKyl7Y29uc3QgZT1uW29dO2k9ci5jaGFyQ29kZU9mKGUpO3ZvaWQgMCE9PXQ/LltpXSYmKGk9dFtpXSk7c1tpXT1vfWVsc2UgZm9yKG89MDtvPGUuY2hhclN0cmluZ3MuY291bnQ7bysrKXtpPXIuY2hhckNvZGVPZihvKTtzW2ldPW99cmV0dXJuIHN9bGV0IGM9ZS5lbmNvZGluZz9lLmVuY29kaW5nLmVuY29kaW5nOm51bGw7dC5pc0ludGVybmFsRm9udCYmKGM9dC5kZWZhdWx0RW5jb2RpbmcpO3M9KDAsaS50eXBlMUZvbnRHbHlwaE1hcHBpbmcpKHQsYyxuKTtyZXR1cm4gc31oYXNHbHlwaElkKGUpe3JldHVybiB0aGlzLmNmZi5oYXNHbHlwaElkKGUpfV9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKXtjb25zdHtjaGFyc2V0OmUsZW5jb2Rpbmc6dH09dGhpcy5jZmY7aWYoIWV8fCF0KXJldHVybjtjb25zdCBhPWUuY2hhcnNldCxyPXQuZW5jb2RpbmcsaT1bXTtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07aWYodD49MCl7Y29uc3Qgcj1hW3RdO3ImJihpW2VdPXIpfX1pLmxlbmd0aD4wJiYodGhpcy5wcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZz1pKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIHI9YSgyKSxpPWEoMzUpLG49YSgzOSkscz1hKDM3KSxvPWEoOCk7ZnVuY3Rpb24gZ2V0VWludDMyKGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXSk+Pj4wfWZ1bmN0aW9uIGdldFVpbnQxNihlLHQpe3JldHVybiBlW3RdPDw4fGVbdCsxXX1mdW5jdGlvbiBnZXRJbnQxNihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2KT4+MTZ9ZnVuY3Rpb24gZ2V0SW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9ZnVuY3Rpb24gZ2V0RmxvYXQyMTQoZSx0KXtyZXR1cm4gZ2V0SW50MTYoZSx0KS8xNjM4NH1mdW5jdGlvbiBnZXRTdWJyb3V0aW5lQmlhcyhlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhPTMyNzY4O3Q8MTI0MD9hPTEwNzp0PDMzOTAwJiYoYT0xMTMxKTtyZXR1cm4gYX1mdW5jdGlvbiBwYXJzZUNtYXAoZSx0LGEpe2NvbnN0IGk9MT09PWdldFVpbnQxNihlLHQrMik/Z2V0VWludDMyKGUsdCs4KTpnZXRVaW50MzIoZSx0KzE2KSxuPWdldFVpbnQxNihlLHQraSk7bGV0IHMsbyxjO2lmKDQ9PT1uKXtnZXRVaW50MTYoZSx0K2krMik7Y29uc3QgYT1nZXRVaW50MTYoZSx0K2krNik+PjE7bz10K2krMTQ7cz1bXTtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdPXtlbmQ6Z2V0VWludDE2KGUsbyl9O28rPTI7Zm9yKGM9MDtjPGE7YysrLG8rPTIpc1tjXS5zdGFydD1nZXRVaW50MTYoZSxvKTtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdLmlkRGVsdGE9Z2V0VWludDE2KGUsbyk7Zm9yKGM9MDtjPGE7YysrLG8rPTIpe2xldCB0PWdldFVpbnQxNihlLG8pO2lmKDAhPT10KXtzW2NdLmlkcz1bXTtmb3IobGV0IGE9MCxyPXNbY10uZW5kLXNbY10uc3RhcnQrMTthPHI7YSsrKXtzW2NdLmlkc1thXT1nZXRVaW50MTYoZSxvK3QpO3QrPTJ9fX1yZXR1cm4gc31pZigxMj09PW4pe2NvbnN0IGE9Z2V0VWludDMyKGUsdCtpKzEyKTtvPXQraSsxNjtzPVtdO2ZvcihjPTA7YzxhO2MrKyl7dD1nZXRVaW50MzIoZSxvKTtzLnB1c2goe3N0YXJ0OnQsZW5kOmdldFVpbnQzMihlLG8rNCksaWREZWx0YTpnZXRVaW50MzIoZSxvKzgpLXR9KTtvKz0xMn1yZXR1cm4gc310aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgdW5zdXBwb3J0ZWQgY21hcDogJHtufWApfWZ1bmN0aW9uIHBhcnNlQ2ZmKGUsdCxhLHIpe2NvbnN0IG49bmV3IGkuQ0ZGUGFyc2VyKG5ldyBvLlN0cmVhbShlLHQsYS10KSx7fSxyKS5wYXJzZSgpO3JldHVybntnbHlwaHM6bi5jaGFyU3RyaW5ncy5vYmplY3RzLHN1YnJzOm4udG9wRGljdC5wcml2YXRlRGljdD8uc3VicnNJbmRleD8ub2JqZWN0cyxnc3VicnM6bi5nbG9iYWxTdWJySW5kZXg/Lm9iamVjdHMsaXNDRkZDSURGb250Om4uaXNDSURGb250LGZkU2VsZWN0Om4uZmRTZWxlY3QsZmRBcnJheTpuLmZkQXJyYXl9fWZ1bmN0aW9uIGxvb2t1cENtYXAoZSx0KXtjb25zdCBhPXQuY29kZVBvaW50QXQoMCk7bGV0IHI9MCxpPTAsbj1lLmxlbmd0aC0xO2Zvcig7aTxuOyl7Y29uc3QgdD1pK24rMT4+MTthPGVbdF0uc3RhcnQ/bj10LTE6aT10fWVbaV0uc3RhcnQ8PWEmJmE8PWVbaV0uZW5kJiYocj1lW2ldLmlkRGVsdGErKGVbaV0uaWRzP2VbaV0uaWRzW2EtZVtpXS5zdGFydF06YSkmNjU1MzUpO3JldHVybntjaGFyQ29kZTphLGdseXBoSWQ6cn19ZnVuY3Rpb24gY29tcGlsZUdseWYoZSx0LGEpe2Z1bmN0aW9uIG1vdmVUbyhlLGEpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2UsYV19KX1mdW5jdGlvbiBsaW5lVG8oZSxhKXt0LnB1c2goe2NtZDoibGluZVRvIixhcmdzOltlLGFdfSl9ZnVuY3Rpb24gcXVhZHJhdGljQ3VydmVUbyhlLGEscixpKXt0LnB1c2goe2NtZDoicXVhZHJhdGljQ3VydmVUbyIsYXJnczpbZSxhLHIsaV19KX1sZXQgcj0wO2NvbnN0IGk9Z2V0SW50MTYoZSxyKTtsZXQgbixzPTAsbz0wO3IrPTEwO2lmKGk8MClkb3tuPWdldFVpbnQxNihlLHIpO2NvbnN0IGk9Z2V0VWludDE2KGUscisyKTtyKz00O2xldCBjLGw7aWYoMSZuKXtpZigyJm4pe2M9Z2V0SW50MTYoZSxyKTtsPWdldEludDE2KGUscisyKX1lbHNle2M9Z2V0VWludDE2KGUscik7bD1nZXRVaW50MTYoZSxyKzIpfXIrPTR9ZWxzZSBpZigyJm4pe2M9Z2V0SW50OChlLHIrKyk7bD1nZXRJbnQ4KGUscisrKX1lbHNle2M9ZVtyKytdO2w9ZVtyKytdfWlmKDImbil7cz1jO289bH1lbHNle3M9MDtvPTB9bGV0IGg9MSx1PTEsZD0wLGY9MDtpZig4Jm4pe2g9dT1nZXRGbG9hdDIxNChlLHIpO3IrPTJ9ZWxzZSBpZig2NCZuKXtoPWdldEZsb2F0MjE0KGUscik7dT1nZXRGbG9hdDIxNChlLHIrMik7cis9NH1lbHNlIGlmKDEyOCZuKXtoPWdldEZsb2F0MjE0KGUscik7ZD1nZXRGbG9hdDIxNChlLHIrMik7Zj1nZXRGbG9hdDIxNChlLHIrNCk7dT1nZXRGbG9hdDIxNChlLHIrNik7cis9OH1jb25zdCBnPWEuZ2x5cGhzW2ldO2lmKGcpe3QucHVzaCh7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNmb3JtIixhcmdzOltoLGQsZix1LHMsb119KTtjb21waWxlR2x5ZihnLHQsYSk7dC5wdXNoKHtjbWQ6InJlc3RvcmUifSl9fXdoaWxlKDMyJm4pO2Vsc2V7Y29uc3QgdD1bXTtsZXQgYSxjO2ZvcihhPTA7YTxpO2ErKyl7dC5wdXNoKGdldFVpbnQxNihlLHIpKTtyKz0yfXIrPTIrZ2V0VWludDE2KGUscik7Y29uc3QgbD10LmF0KC0xKSsxLGg9W107Zm9yKDtoLmxlbmd0aDxsOyl7bj1lW3IrK107bGV0IHQ9MTs4Jm4mJih0Kz1lW3IrK10pO2Zvcig7dC0tID4wOyloLnB1c2goe2ZsYWdzOm59KX1mb3IoYT0wO2E8bDthKyspe3N3aXRjaCgxOCZoW2FdLmZsYWdzKXtjYXNlIDA6cys9Z2V0SW50MTYoZSxyKTtyKz0yO2JyZWFrO2Nhc2UgMjpzLT1lW3IrK107YnJlYWs7Y2FzZSAxODpzKz1lW3IrK119aFthXS54PXN9Zm9yKGE9MDthPGw7YSsrKXtzd2l0Y2goMzYmaFthXS5mbGFncyl7Y2FzZSAwOm8rPWdldEludDE2KGUscik7cis9MjticmVhaztjYXNlIDQ6by09ZVtyKytdO2JyZWFrO2Nhc2UgMzY6bys9ZVtyKytdfWhbYV0ueT1vfWxldCB1PTA7Zm9yKHI9MDtyPGk7cisrKXtjb25zdCBlPXRbcl0saT1oLnNsaWNlKHUsZSsxKTtpZigxJmlbMF0uZmxhZ3MpaS5wdXNoKGlbMF0pO2Vsc2UgaWYoMSZpLmF0KC0xKS5mbGFncylpLnVuc2hpZnQoaS5hdCgtMSkpO2Vsc2V7Y29uc3QgZT17ZmxhZ3M6MSx4OihpWzBdLngraS5hdCgtMSkueCkvMix5OihpWzBdLnkraS5hdCgtMSkueSkvMn07aS51bnNoaWZ0KGUpO2kucHVzaChlKX1tb3ZlVG8oaVswXS54LGlbMF0ueSk7Zm9yKGE9MSxjPWkubGVuZ3RoO2E8YzthKyspaWYoMSZpW2FdLmZsYWdzKWxpbmVUbyhpW2FdLngsaVthXS55KTtlbHNlIGlmKDEmaVthKzFdLmZsYWdzKXtxdWFkcmF0aWNDdXJ2ZVRvKGlbYV0ueCxpW2FdLnksaVthKzFdLngsaVthKzFdLnkpO2ErK31lbHNlIHF1YWRyYXRpY0N1cnZlVG8oaVthXS54LGlbYV0ueSwoaVthXS54K2lbYSsxXS54KS8yLChpW2FdLnkraVthKzFdLnkpLzIpO3U9ZSsxfX19ZnVuY3Rpb24gY29tcGlsZUNoYXJTdHJpbmcoZSx0LGEsaSl7ZnVuY3Rpb24gbW92ZVRvKGUsYSl7dC5wdXNoKHtjbWQ6Im1vdmVUbyIsYXJnczpbZSxhXX0pfWZ1bmN0aW9uIGxpbmVUbyhlLGEpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2UsYV19KX1mdW5jdGlvbiBiZXppZXJDdXJ2ZVRvKGUsYSxyLGksbixzKXt0LnB1c2goe2NtZDoiYmV6aWVyQ3VydmVUbyIsYXJnczpbZSxhLHIsaSxuLHNdfSl9Y29uc3Qgbj1bXTtsZXQgbz0wLGM9MCxsPTA7IWZ1bmN0aW9uIHBhcnNlKGUpe2xldCBoPTA7Zm9yKDtoPGUubGVuZ3RoOyl7bGV0IHUsZCxmLGcscCxtLGIseSx3LFM9ITEseD1lW2grK107c3dpdGNoKHgpe2Nhc2UgMTpjYXNlIDM6Y2FzZSAxODpjYXNlIDIzOmwrPW4ubGVuZ3RoPj4xO1M9ITA7YnJlYWs7Y2FzZSA0OmMrPW4ucG9wKCk7bW92ZVRvKG8sYyk7Uz0hMDticmVhaztjYXNlIDU6Zm9yKDtuLmxlbmd0aD4wOyl7bys9bi5zaGlmdCgpO2MrPW4uc2hpZnQoKTtsaW5lVG8obyxjKX1icmVhaztjYXNlIDY6Zm9yKDtuLmxlbmd0aD4wOyl7bys9bi5zaGlmdCgpO2xpbmVUbyhvLGMpO2lmKDA9PT1uLmxlbmd0aClicmVhaztjKz1uLnNoaWZ0KCk7bGluZVRvKG8sYyl9YnJlYWs7Y2FzZSA3OmZvcig7bi5sZW5ndGg+MDspe2MrPW4uc2hpZnQoKTtsaW5lVG8obyxjKTtpZigwPT09bi5sZW5ndGgpYnJlYWs7bys9bi5zaGlmdCgpO2xpbmVUbyhvLGMpfWJyZWFrO2Nhc2UgODpmb3IoO24ubGVuZ3RoPjA7KXt1PW8rbi5zaGlmdCgpO2Y9YytuLnNoaWZ0KCk7ZD11K24uc2hpZnQoKTtnPWYrbi5zaGlmdCgpO289ZCtuLnNoaWZ0KCk7Yz1nK24uc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDEwOnk9bi5wb3AoKTt3PW51bGw7aWYoYS5pc0NGRkNJREZvbnQpe2NvbnN0IGU9YS5mZFNlbGVjdC5nZXRGREluZGV4KGkpO2lmKGU+PTAmJmU8YS5mZEFycmF5Lmxlbmd0aCl7Y29uc3QgdD1hLmZkQXJyYXlbZV07bGV0IHI7dC5wcml2YXRlRGljdD8uc3VicnNJbmRleCYmKHI9dC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpO2lmKHIpe3krPWdldFN1YnJvdXRpbmVCaWFzKHIpO3c9clt5XX19ZWxzZSgwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWVsc2Ugdz1hLnN1YnJzW3krYS5zdWJyc0JpYXNdO3cmJnBhcnNlKHcpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6eD1lW2grK107c3dpdGNoKHgpe2Nhc2UgMzQ6dT1vK24uc2hpZnQoKTtkPXUrbi5zaGlmdCgpO3A9YytuLnNoaWZ0KCk7bz1kK24uc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsYyxkLHAsbyxwKTt1PW8rbi5zaGlmdCgpO2Q9dStuLnNoaWZ0KCk7bz1kK24uc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUscCxkLGMsbyxjKTticmVhaztjYXNlIDM1OnU9bytuLnNoaWZ0KCk7Zj1jK24uc2hpZnQoKTtkPXUrbi5zaGlmdCgpO2c9ZituLnNoaWZ0KCk7bz1kK24uc2hpZnQoKTtjPWcrbi5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO3U9bytuLnNoaWZ0KCk7Zj1jK24uc2hpZnQoKTtkPXUrbi5zaGlmdCgpO2c9ZituLnNoaWZ0KCk7bz1kK24uc2hpZnQoKTtjPWcrbi5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO24ucG9wKCk7YnJlYWs7Y2FzZSAzNjp1PW8rbi5zaGlmdCgpO3A9YytuLnNoaWZ0KCk7ZD11K24uc2hpZnQoKTttPXArbi5zaGlmdCgpO289ZCtuLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LHAsZCxtLG8sbSk7dT1vK24uc2hpZnQoKTtkPXUrbi5zaGlmdCgpO2I9bStuLnNoaWZ0KCk7bz1kK24uc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsbSxkLGIsbyxjKTticmVhaztjYXNlIDM3OmNvbnN0IGU9byx0PWM7dT1vK24uc2hpZnQoKTtmPWMrbi5zaGlmdCgpO2Q9dStuLnNoaWZ0KCk7Zz1mK24uc2hpZnQoKTtvPWQrbi5zaGlmdCgpO2M9ZytuLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7dT1vK24uc2hpZnQoKTtmPWMrbi5zaGlmdCgpO2Q9dStuLnNoaWZ0KCk7Zz1mK24uc2hpZnQoKTtvPWQ7Yz1nO01hdGguYWJzKG8tZSk+TWF0aC5hYnMoYy10KT9vKz1uLnNoaWZ0KCk6Yys9bi5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6IDEyICR7eH1gKX1icmVhaztjYXNlIDE0OmlmKG4ubGVuZ3RoPj00KXtjb25zdCBlPW4ucG9wKCkscj1uLnBvcCgpO2M9bi5wb3AoKTtvPW4ucG9wKCk7dC5wdXNoKHtjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2xhdGUiLGFyZ3M6W28sY119KTtsZXQgaT1sb29rdXBDbWFwKGEuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2x5cGhOYW1lTWFwW3MuU3RhbmRhcmRFbmNvZGluZ1tlXV0pKTtjb21waWxlQ2hhclN0cmluZyhhLmdseXBoc1tpLmdseXBoSWRdLHQsYSxpLmdseXBoSWQpO3QucHVzaCh7Y21kOiJyZXN0b3JlIn0pO2k9bG9va3VwQ21hcChhLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShhLmdseXBoTmFtZU1hcFtzLlN0YW5kYXJkRW5jb2Rpbmdbcl1dKSk7Y29tcGlsZUNoYXJTdHJpbmcoYS5nbHlwaHNbaS5nbHlwaElkXSx0LGEsaS5nbHlwaElkKX1yZXR1cm47Y2FzZSAxOTpjYXNlIDIwOmwrPW4ubGVuZ3RoPj4xO2grPWwrNz4+MztTPSEwO2JyZWFrO2Nhc2UgMjE6Yys9bi5wb3AoKTtvKz1uLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSAyMjpvKz1uLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO24ubGVuZ3RoPjI7KXt1PW8rbi5zaGlmdCgpO2Y9YytuLnNoaWZ0KCk7ZD11K24uc2hpZnQoKTtnPWYrbi5zaGlmdCgpO289ZCtuLnNoaWZ0KCk7Yz1nK24uc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1vKz1uLnNoaWZ0KCk7Yys9bi5zaGlmdCgpO2xpbmVUbyhvLGMpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtuLmxlbmd0aD42Oyl7bys9bi5zaGlmdCgpO2MrPW4uc2hpZnQoKTtsaW5lVG8obyxjKX11PW8rbi5zaGlmdCgpO2Y9YytuLnNoaWZ0KCk7ZD11K24uc2hpZnQoKTtnPWYrbi5zaGlmdCgpO289ZCtuLnNoaWZ0KCk7Yz1nK24uc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKTticmVhaztjYXNlIDI2Om4ubGVuZ3RoJTImJihvKz1uLnNoaWZ0KCkpO2Zvcig7bi5sZW5ndGg+MDspe3U9bztmPWMrbi5zaGlmdCgpO2Q9dStuLnNoaWZ0KCk7Zz1mK24uc2hpZnQoKTtvPWQ7Yz1nK24uc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDI3Om4ubGVuZ3RoJTImJihjKz1uLnNoaWZ0KCkpO2Zvcig7bi5sZW5ndGg+MDspe3U9bytuLnNoaWZ0KCk7Zj1jO2Q9dStuLnNoaWZ0KCk7Zz1mK24uc2hpZnQoKTtvPWQrbi5zaGlmdCgpO2M9ZztiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDI4Om4ucHVzaCgoZVtoXTw8MjR8ZVtoKzFdPDwxNik+PjE2KTtoKz0yO2JyZWFrO2Nhc2UgMjk6eT1uLnBvcCgpK2EuZ3N1YnJzQmlhczt3PWEuZ3N1YnJzW3ldO3cmJnBhcnNlKHcpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtuLmxlbmd0aD4wOyl7dT1vO2Y9YytuLnNoaWZ0KCk7ZD11K24uc2hpZnQoKTtnPWYrbi5zaGlmdCgpO289ZCtuLnNoaWZ0KCk7Yz1nKygxPT09bi5sZW5ndGg/bi5zaGlmdCgpOjApO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2lmKDA9PT1uLmxlbmd0aClicmVhazt1PW8rbi5zaGlmdCgpO2Y9YztkPXUrbi5zaGlmdCgpO2c9ZituLnNoaWZ0KCk7Yz1nK24uc2hpZnQoKTtvPWQrKDE9PT1uLmxlbmd0aD9uLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyl9YnJlYWs7Y2FzZSAzMTpmb3IoO24ubGVuZ3RoPjA7KXt1PW8rbi5zaGlmdCgpO2Y9YztkPXUrbi5zaGlmdCgpO2c9ZituLnNoaWZ0KCk7Yz1nK24uc2hpZnQoKTtvPWQrKDE9PT1uLmxlbmd0aD9uLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7aWYoMD09PW4ubGVuZ3RoKWJyZWFrO3U9bztmPWMrbi5zaGlmdCgpO2Q9dStuLnNoaWZ0KCk7Zz1mK24uc2hpZnQoKTtvPWQrbi5zaGlmdCgpO2M9ZysoMT09PW4ubGVuZ3RoP24uc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztkZWZhdWx0OmlmKHg8MzIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7eH1gKTtpZih4PDI0NyluLnB1c2goeC0xMzkpO2Vsc2UgaWYoeDwyNTEpbi5wdXNoKDI1NiooeC0yNDcpK2VbaCsrXSsxMDgpO2Vsc2UgaWYoeDwyNTUpbi5wdXNoKDI1NiotKHgtMjUxKS1lW2grK10tMTA4KTtlbHNle24ucHVzaCgoZVtoXTw8MjR8ZVtoKzFdPDwxNnxlW2grMl08PDh8ZVtoKzNdKS82NTUzNik7aCs9NH19UyYmKG4ubGVuZ3RoPTApfX0oZSl9Y29uc3QgYz1bXTtjbGFzcyBDb21waWxlZEZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PUNvbXBpbGVkRm9udCYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbXBpbGVkRm9udC4iKTt0aGlzLmZvbnRNYXRyaXg9ZTt0aGlzLmNvbXBpbGVkR2x5cGhzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkPU9iamVjdC5jcmVhdGUobnVsbCl9Z2V0UGF0aEpzKGUpe2NvbnN0e2NoYXJDb2RlOnQsZ2x5cGhJZDphfT1sb29rdXBDbWFwKHRoaXMuY21hcCxlKTtsZXQgcj10aGlzLmNvbXBpbGVkR2x5cGhzW2FdO2lmKCFyKXRyeXtyPXRoaXMuY29tcGlsZUdseXBoKHRoaXMuZ2x5cGhzW2FdLGEpO3RoaXMuY29tcGlsZWRHbHlwaHNbYV09cn1jYXRjaChlKXt0aGlzLmNvbXBpbGVkR2x5cGhzW2FdPWM7dm9pZCAwPT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdJiYodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPWEpO3Rocm93IGV9dm9pZCAwPT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdJiYodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPWEpO3JldHVybiByfWNvbXBpbGVHbHlwaChlLHQpe2lmKCFlfHwwPT09ZS5sZW5ndGh8fDE0PT09ZVswXSlyZXR1cm4gYztsZXQgYT10aGlzLmZvbnRNYXRyaXg7aWYodGhpcy5pc0NGRkNJREZvbnQpe2NvbnN0IGU9dGhpcy5mZFNlbGVjdC5nZXRGREluZGV4KHQpO2lmKGU+PTAmJmU8dGhpcy5mZEFycmF5Lmxlbmd0aCl7YT10aGlzLmZkQXJyYXlbZV0uZ2V0QnlOYW1lKCJGb250TWF0cml4Iil8fHIuRk9OVF9JREVOVElUWV9NQVRSSVh9ZWxzZSgwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWNvbnN0IGk9W3tjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6YS5zbGljZSgpfSx7Y21kOiJzY2FsZSIsYXJnczpbInNpemUiLCItc2l6ZSJdfV07dGhpcy5jb21waWxlR2x5cGhJbXBsKGUsaSx0KTtpLnB1c2goe2NtZDoicmVzdG9yZSJ9KTtyZXR1cm4gaX1jb21waWxlR2x5cGhJbXBsKCl7KDAsci51bnJlYWNoYWJsZSkoIkNoaWxkcmVuIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB0aGlzLiIpfWhhc0J1aWx0UGF0aChlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6YX09bG9va3VwQ21hcCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbYV0mJnZvaWQgMCE9PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFt0XX19Y2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoYXx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pO3RoaXMuZ2x5cGhzPWU7dGhpcy5jbWFwPXR9Y29tcGlsZUdseXBoSW1wbChlLHQpe2NvbXBpbGVHbHlmKGUsdCx0aGlzKX19Y2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSxyKXtzdXBlcihhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKTt0aGlzLmdseXBocz1lLmdseXBoczt0aGlzLmdzdWJycz1lLmdzdWJyc3x8W107dGhpcy5zdWJycz1lLnN1YnJzfHxbXTt0aGlzLmNtYXA9dDt0aGlzLmdseXBoTmFtZU1hcD1yfHwoMCxuLmdldEdseXBoc1VuaWNvZGUpKCk7dGhpcy5nc3VicnNCaWFzPWdldFN1YnJvdXRpbmVCaWFzKHRoaXMuZ3N1YnJzKTt0aGlzLnN1YnJzQmlhcz1nZXRTdWJyb3V0aW5lQmlhcyh0aGlzLnN1YnJzKTt0aGlzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udDt0aGlzLmZkU2VsZWN0PWUuZmRTZWxlY3Q7dGhpcy5mZEFycmF5PWUuZmRBcnJheX1jb21waWxlR2x5cGhJbXBsKGUsdCxhKXtjb21waWxlQ2hhclN0cmluZyhlLHQsdGhpcyxhKX19dC5Gb250UmVuZGVyZXJGYWN0b3J5PWNsYXNzIEZvbnRSZW5kZXJlckZhY3Rvcnl7c3RhdGljIGNyZWF0ZShlLHQpe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtsZXQgaSxuLHMsbyxjLGw7Y29uc3QgaD1nZXRVaW50MTYoYSw0KTtmb3IobGV0IGU9MCx1PTEyO2U8aDtlKyssdSs9MTYpe2NvbnN0IGU9KDAsci5ieXRlc1RvU3RyaW5nKShhLnN1YmFycmF5KHUsdSs0KSksaD1nZXRVaW50MzIoYSx1KzgpLGQ9Z2V0VWludDMyKGEsdSsxMik7c3dpdGNoKGUpe2Nhc2UiY21hcCI6aT1wYXJzZUNtYXAoYSxoKTticmVhaztjYXNlImdseWYiOm49YS5zdWJhcnJheShoLGgrZCk7YnJlYWs7Y2FzZSJsb2NhIjpzPWEuc3ViYXJyYXkoaCxoK2QpO2JyZWFrO2Nhc2UiaGVhZCI6bD1nZXRVaW50MTYoYSxoKzE4KTtjPWdldFVpbnQxNihhLGgrNTApO2JyZWFrO2Nhc2UiQ0ZGICI6bz1wYXJzZUNmZihhLGgsaCtkLHQpfX1pZihuKXtjb25zdCB0PWw/WzEvbCwwLDAsMS9sLDAsMF06ZS5mb250TWF0cml4O3JldHVybiBuZXcgVHJ1ZVR5cGVDb21waWxlZChmdW5jdGlvbiBwYXJzZUdseWZUYWJsZShlLHQsYSl7bGV0IHIsaTtpZihhKXtyPTQ7aT1nZXRVaW50MzJ9ZWxzZXtyPTI7aT0oZSx0KT0+MipnZXRVaW50MTYoZSx0KX1jb25zdCBuPVtdO2xldCBzPWkodCwwKTtmb3IobGV0IGE9cjthPHQubGVuZ3RoO2ErPXIpe2NvbnN0IHI9aSh0LGEpO24ucHVzaChlLnN1YmFycmF5KHMscikpO3M9cn1yZXR1cm4gbn0obixzLGMpLGksdCl9cmV0dXJuIG5ldyBUeXBlMkNvbXBpbGVkKG8saSxlLmZvbnRNYXRyaXgsZS5nbHlwaE5hbWVNYXApfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5nZXRNZXRyaWNzPXQuZ2V0Rm9udEJhc2ljTWV0cmljcz12b2lkIDA7dmFyIHI9YSgzKTtjb25zdCBpPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPTYwMDtlWyJDb3VyaWVyLUJvbGQiXT02MDA7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPTYwMDtlWyJDb3VyaWVyLU9ibGlxdWUiXT02MDA7ZS5IZWx2ZXRpY2E9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0yNzg7ZS5xdW90ZWRibD0zNTU7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD02Njc7ZS5xdW90ZXJpZ2h0PTIyMjtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NTU2O2UuYXQ9MTAxNTtlLkE9NjY3O2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTAwO2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0yNzg7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTI3ODtlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTIyMjtlLmE9NTU2O2UuYj01NTY7ZS5jPTUwMDtlLmQ9NTU2O2UuZT01NTY7ZS5mPTI3ODtlLmc9NTU2O2UuaD01NTY7ZS5pPTIyMjtlLmo9MjIyO2Uuaz01MDA7ZS5sPTIyMjtlLm09ODMzO2Uubj01NTY7ZS5vPTU1NjtlLnA9NTU2O2UucT01NTY7ZS5yPTMzMztlLnM9NTAwO2UudD0yNzg7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej01MDA7ZS5icmFjZWxlZnQ9MzM0O2UuYmFyPTI2MDtlLmJyYWNlcmlnaHQ9MzM0O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTE5MTtlLnF1b3RlZGJsbGVmdD0zMzM7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTUzNztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yMjI7ZS5xdW90ZWRibGJhc2U9MzMzO2UucXVvdGVkYmxyaWdodD0zMzM7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9MjIyO2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9NTAwO2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTAwO2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yMjI7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTAwO2Uuc2NlZGlsbGE9NTAwO2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT01MDA7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NjQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01MDA7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjYwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTU1NjtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9MjIyO2UudGNhcm9uPTMxNztlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yMjI7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTU1NjtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTUwMDtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTU1NjtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTI5OTtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTU1NjtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTU1NjtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT01NTY7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTU1NjtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTU2O2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz01NTY7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTU1NjtlLmV0aD01NTY7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLUJvbGQiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQ3NDtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTcyMjtlLnF1b3RlcmlnaHQ9Mjc4O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj02MTE7ZS5hdD05NzU7ZS5BPTcyMjtlLkI9NzIyO2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTU1NjtlLks9NzIyO2UuTD02MTE7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODQ7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yNzg7ZS5hPTU1NjtlLmI9NjExO2UuYz01NTY7ZS5kPTYxMTtlLmU9NTU2O2UuZj0zMzM7ZS5nPTYxMTtlLmg9NjExO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTU2O2UubD0yNzg7ZS5tPTg4OTtlLm49NjExO2Uubz02MTE7ZS5wPTYxMTtlLnE9NjExO2Uucj0zODk7ZS5zPTU1NjtlLnQ9MzMzO2UudT02MTE7ZS52PTU1NjtlLnc9Nzc4O2UueD01NTY7ZS55PTU1NjtlLno9NTAwO2UuYnJhY2VsZWZ0PTM4OTtlLmJhcj0yODA7ZS5icmFjZXJpZ2h0PTM4OTtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0yMzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTYxMTtlLmZsPTYxMTtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01NTY7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9Mjc4O2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NjExO2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTU2O2Uuc2NvbW1hYWNjZW50PTU1NjtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTYxMTtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTU1NjtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTU1NjtlLnNjZWRpbGxhPTU1NjtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NjExO2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NTU2O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTc0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NjExO2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NjExO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01NTY7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTU2O2UubmFjdXRlPTYxMTtlLnVtYWNyb249NjExO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI4MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj02MTE7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zODk7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT02MTE7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01NTY7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTYxMTtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT02MTE7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD02MTE7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD02MTE7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj00MDA7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD02MTE7ZS5udGlsZGU9NjExO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NjExO2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT02MTE7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTYxMTtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTYxMTtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj02MTE7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NjExO2UudWRpZXJlc2lzPTYxMTtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD02MTE7ZS5ldGg9NjExO2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD02MTE7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDc0O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NzIyO2UucXVvdGVyaWdodD0yNzg7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTYxMTtlLmF0PTk3NTtlLkE9NzIyO2UuQj03MjI7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTU2O2UuSz03MjI7ZS5MPTYxMTtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4NDtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTI3ODtlLmE9NTU2O2UuYj02MTE7ZS5jPTU1NjtlLmQ9NjExO2UuZT01NTY7ZS5mPTMzMztlLmc9NjExO2UuaD02MTE7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01NTY7ZS5sPTI3ODtlLm09ODg5O2Uubj02MTE7ZS5vPTYxMTtlLnA9NjExO2UucT02MTE7ZS5yPTM4OTtlLnM9NTU2O2UudD0zMzM7ZS51PTYxMTtlLnY9NTU2O2Uudz03Nzg7ZS54PTU1NjtlLnk9NTU2O2Uuej01MDA7ZS5icmFjZWxlZnQ9Mzg5O2UuYmFyPTI4MDtlLmJyYWNlcmlnaHQ9Mzg5O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTIzODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NjExO2UuZmw9NjExO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTU1NjtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yNzg7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD02MTE7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01NTY7ZS5zY29tbWFhY2NlbnQ9NTU2O2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NjExO2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTU2O2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTU2O2Uuc2NlZGlsbGE9NTU2O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD02MTE7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT01NTY7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NzQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz02MTE7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT02MTE7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTU1NjtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01NTY7ZS5uYWN1dGU9NjExO2UudW1hY3Jvbj02MTE7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjgwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTYxMTtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM4OTtlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTYxMTtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTU1NjtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NjExO2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTYxMTtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTYxMTtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTYxMTtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTQwMDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTYxMTtlLm50aWxkZT02MTE7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT02MTE7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTYxMTtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NjExO2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NjExO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTYxMTtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz02MTE7ZS51ZGllcmVzaXM9NjExO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTYxMTtlLmV0aD02MTE7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTYxMTtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTI3ODtlLnF1b3RlZGJsPTM1NTtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTY2NztlLnF1b3RlcmlnaHQ9MjIyO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj01NTY7ZS5hdD0xMDE1O2UuQT02Njc7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01MDA7ZS5LPTY2NztlLkw9NTU2O2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTI3ODtlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9Mjc4O2UuYXNjaWljaXJjdW09NDY5O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9MjIyO2UuYT01NTY7ZS5iPTU1NjtlLmM9NTAwO2UuZD01NTY7ZS5lPTU1NjtlLmY9Mjc4O2UuZz01NTY7ZS5oPTU1NjtlLmk9MjIyO2Uuaj0yMjI7ZS5rPTUwMDtlLmw9MjIyO2UubT04MzM7ZS5uPTU1NjtlLm89NTU2O2UucD01NTY7ZS5xPTU1NjtlLnI9MzMzO2Uucz01MDA7ZS50PTI3ODtlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTUwMDtlLmJyYWNlbGVmdD0zMzQ7ZS5iYXI9MjYwO2UuYnJhY2VyaWdodD0zMzQ7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MTkxO2UucXVvdGVkYmxsZWZ0PTMzMztlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01MDA7ZS5mbD01MDA7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTM3O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTIyMjtlLnF1b3RlZGJsYmFzZT0zMzM7ZS5xdW90ZWRibHJpZ2h0PTMzMztlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD01NTY7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yMjI7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD02Njc7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD01MDA7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01MDA7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTIyMjtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01MDA7ZS5zY2VkaWxsYT01MDA7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NjY3O2UucmNhcm9uPTMzMztlLmNjZWRpbGxhPTUwMDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj02NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT02Njc7ZS5BYnJldmU9NjY3O2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTU1NjtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTUwMDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yNjA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTMzMztlLm9tYWNyb249NTU2O2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yMjI7ZS50Y2Fyb249MzE3O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02Njc7ZS5BZGllcmVzaXM9NjY3O2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTIyMjtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTU2O2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTAwO2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTU2O2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249Mjk5O2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT01NTY7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NTU2O2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTU2O2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTU1NjtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTU2O2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9MzMzO2UuTnRpbGRlPTcyMjtlLm90aWxkZT01NTY7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTU1NjtlLkF0aWxkZT02Njc7ZS5Bb2dvbmVrPTY2NztlLkFyaW5nPTY2NztlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTU1NjtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTU2O2UuZXRoPTU1NjtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlLlN5bWJvbD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnVuaXZlcnNhbD03MTM7ZS5udW1iZXJzaWduPTUwMDtlLmV4aXN0ZW50aWFsPTU0OTtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnN1Y2h0aGF0PTQzOTtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrbWF0aD01MDA7ZS5wbHVzPTU0OTtlLmNvbW1hPTI1MDtlLm1pbnVzPTU0OTtlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU0OTtlLmVxdWFsPTU0OTtlLmdyZWF0ZXI9NTQ5O2UucXVlc3Rpb249NDQ0O2UuY29uZ3J1ZW50PTU0OTtlLkFscGhhPTcyMjtlLkJldGE9NjY3O2UuQ2hpPTcyMjtlLkRlbHRhPTYxMjtlLkVwc2lsb249NjExO2UuUGhpPTc2MztlLkdhbW1hPTYwMztlLkV0YT03MjI7ZS5Jb3RhPTMzMztlLnRoZXRhMT02MzE7ZS5LYXBwYT03MjI7ZS5MYW1iZGE9Njg2O2UuTXU9ODg5O2UuTnU9NzIyO2UuT21pY3Jvbj03MjI7ZS5QaT03Njg7ZS5UaGV0YT03NDE7ZS5SaG89NTU2O2UuU2lnbWE9NTkyO2UuVGF1PTYxMTtlLlVwc2lsb249NjkwO2Uuc2lnbWExPTQzOTtlLk9tZWdhPTc2ODtlLlhpPTY0NTtlLlBzaT03OTU7ZS5aZXRhPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLnRoZXJlZm9yZT04NjM7ZS5icmFja2V0cmlnaHQ9MzMzO2UucGVycGVuZGljdWxhcj02NTg7ZS51bmRlcnNjb3JlPTUwMDtlLnJhZGljYWxleD01MDA7ZS5hbHBoYT02MzE7ZS5iZXRhPTU0OTtlLmNoaT01NDk7ZS5kZWx0YT00OTQ7ZS5lcHNpbG9uPTQzOTtlLnBoaT01MjE7ZS5nYW1tYT00MTE7ZS5ldGE9NjAzO2UuaW90YT0zMjk7ZS5waGkxPTYwMztlLmthcHBhPTU0OTtlLmxhbWJkYT01NDk7ZS5tdT01NzY7ZS5udT01MjE7ZS5vbWljcm9uPTU0OTtlLnBpPTU0OTtlLnRoZXRhPTUyMTtlLnJobz01NDk7ZS5zaWdtYT02MDM7ZS50YXU9NDM5O2UudXBzaWxvbj01NzY7ZS5vbWVnYTE9NzEzO2Uub21lZ2E9Njg2O2UueGk9NDkzO2UucHNpPTY4NjtlLnpldGE9NDk0O2UuYnJhY2VsZWZ0PTQ4MDtlLmJhcj0yMDA7ZS5icmFjZXJpZ2h0PTQ4MDtlLnNpbWlsYXI9NTQ5O2UuRXVybz03NTA7ZS5VcHNpbG9uMT02MjA7ZS5taW51dGU9MjQ3O2UubGVzc2VxdWFsPTU0OTtlLmZyYWN0aW9uPTE2NztlLmluZmluaXR5PTcxMztlLmZsb3Jpbj01MDA7ZS5jbHViPTc1MztlLmRpYW1vbmQ9NzUzO2UuaGVhcnQ9NzUzO2Uuc3BhZGU9NzUzO2UuYXJyb3dib3RoPTEwNDI7ZS5hcnJvd2xlZnQ9OTg3O2UuYXJyb3d1cD02MDM7ZS5hcnJvd3JpZ2h0PTk4NztlLmFycm93ZG93bj02MDM7ZS5kZWdyZWU9NDAwO2UucGx1c21pbnVzPTU0OTtlLnNlY29uZD00MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UubXVsdGlwbHk9NTQ5O2UucHJvcG9ydGlvbmFsPTcxMztlLnBhcnRpYWxkaWZmPTQ5NDtlLmJ1bGxldD00NjA7ZS5kaXZpZGU9NTQ5O2Uubm90ZXF1YWw9NTQ5O2UuZXF1aXZhbGVuY2U9NTQ5O2UuYXBwcm94ZXF1YWw9NTQ5O2UuZWxsaXBzaXM9MWUzO2UuYXJyb3d2ZXJ0ZXg9NjAzO2UuYXJyb3dob3JpemV4PTFlMztlLmNhcnJpYWdlcmV0dXJuPTY1ODtlLmFsZXBoPTgyMztlLklmcmFrdHVyPTY4NjtlLlJmcmFrdHVyPTc5NTtlLndlaWVyc3RyYXNzPTk4NztlLmNpcmNsZW11bHRpcGx5PTc2ODtlLmNpcmNsZXBsdXM9NzY4O2UuZW1wdHlzZXQ9ODIzO2UuaW50ZXJzZWN0aW9uPTc2ODtlLnVuaW9uPTc2ODtlLnByb3BlcnN1cGVyc2V0PTcxMztlLnJlZmxleHN1cGVyc2V0PTcxMztlLm5vdHN1YnNldD03MTM7ZS5wcm9wZXJzdWJzZXQ9NzEzO2UucmVmbGV4c3Vic2V0PTcxMztlLmVsZW1lbnQ9NzEzO2Uubm90ZWxlbWVudD03MTM7ZS5hbmdsZT03Njg7ZS5ncmFkaWVudD03MTM7ZS5yZWdpc3RlcnNlcmlmPTc5MDtlLmNvcHlyaWdodHNlcmlmPTc5MDtlLnRyYWRlbWFya3NlcmlmPTg5MDtlLnByb2R1Y3Q9ODIzO2UucmFkaWNhbD01NDk7ZS5kb3RtYXRoPTI1MDtlLmxvZ2ljYWxub3Q9NzEzO2UubG9naWNhbGFuZD02MDM7ZS5sb2dpY2Fsb3I9NjAzO2UuYXJyb3dkYmxib3RoPTEwNDI7ZS5hcnJvd2RibGxlZnQ9OTg3O2UuYXJyb3dkYmx1cD02MDM7ZS5hcnJvd2RibHJpZ2h0PTk4NztlLmFycm93ZGJsZG93bj02MDM7ZS5sb3plbmdlPTQ5NDtlLmFuZ2xlbGVmdD0zMjk7ZS5yZWdpc3RlcnNhbnM9NzkwO2UuY29weXJpZ2h0c2Fucz03OTA7ZS50cmFkZW1hcmtzYW5zPTc4NjtlLnN1bW1hdGlvbj03MTM7ZS5wYXJlbmxlZnR0cD0zODQ7ZS5wYXJlbmxlZnRleD0zODQ7ZS5wYXJlbmxlZnRidD0zODQ7ZS5icmFja2V0bGVmdHRwPTM4NDtlLmJyYWNrZXRsZWZ0ZXg9Mzg0O2UuYnJhY2tldGxlZnRidD0zODQ7ZS5icmFjZWxlZnR0cD00OTQ7ZS5icmFjZWxlZnRtaWQ9NDk0O2UuYnJhY2VsZWZ0YnQ9NDk0O2UuYnJhY2VleD00OTQ7ZS5hbmdsZXJpZ2h0PTMyOTtlLmludGVncmFsPTI3NDtlLmludGVncmFsdHA9Njg2O2UuaW50ZWdyYWxleD02ODY7ZS5pbnRlZ3JhbGJ0PTY4NjtlLnBhcmVucmlnaHR0cD0zODQ7ZS5wYXJlbnJpZ2h0ZXg9Mzg0O2UucGFyZW5yaWdodGJ0PTM4NDtlLmJyYWNrZXRyaWdodHRwPTM4NDtlLmJyYWNrZXRyaWdodGV4PTM4NDtlLmJyYWNrZXRyaWdodGJ0PTM4NDtlLmJyYWNlcmlnaHR0cD00OTQ7ZS5icmFjZXJpZ2h0bWlkPTQ5NDtlLmJyYWNlcmlnaHRidD00OTQ7ZS5hcHBsZT03OTB9KSk7ZVsiVGltZXMtUm9tYW4iXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQwODtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NjQ7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTY0O2UuZXF1YWw9NTY0O2UuZ3JlYXRlcj01NjQ7ZS5xdWVzdGlvbj00NDQ7ZS5hdD05MjE7ZS5BPTcyMjtlLkI9NjY3O2UuQz02Njc7ZS5EPTcyMjtlLkU9NjExO2UuRj01NTY7ZS5HPTcyMjtlLkg9NzIyO2UuST0zMzM7ZS5KPTM4OTtlLks9NzIyO2UuTD02MTE7ZS5NPTg4OTtlLk49NzIyO2UuTz03MjI7ZS5QPTU1NjtlLlE9NzIyO2UuUj02Njc7ZS5TPTU1NjtlLlQ9NjExO2UuVT03MjI7ZS5WPTcyMjtlLlc9OTQ0O2UuWD03MjI7ZS5ZPTcyMjtlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTQ0NDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTAwO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTAwO2UubD0yNzg7ZS5tPTc3ODtlLm49NTAwO2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zMzM7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01MDA7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NDQ0O2UuYnJhY2VsZWZ0PTQ4MDtlLmJhcj0yMDA7ZS5icmFjZXJpZ2h0PTQ4MDtlLmFzY2lpdGlsZGU9NTQxO2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0xODA7ZS5xdW90ZWRibGxlZnQ9NDQ0O2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD00NTM7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTQ0NDtlLnF1b3RlZGJscmlnaHQ9NDQ0O2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTQ0NDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9ODg5O2Uub3JkZmVtaW5pbmU9Mjc2O2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03MjI7ZS5PRT04ODk7ZS5vcmRtYXNjdWxpbmU9MzEwO2UuYWU9NjY3O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zMzM7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTQ0NDtlLnVodW5nYXJ1bWxhdXQ9NTAwO2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz03MjI7ZS5kaXZpZGU9NTY0O2UuWWFjdXRlPTcyMjtlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT00NDQ7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTQ0NDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTUwMDtlLkVkaWVyZXNpcz02MTE7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc2MDtlLkVtYWNyb249NjExO2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTQ0NDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTQ0NDtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTQ0NDtlLkVkb3RhY2NlbnQ9NjExO2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj02Njc7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTAwO2UuYWNpcmN1bWZsZXg9NDQ0O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj01NTY7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02Njc7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTU4ODtlLlVtYWNyb249NzIyO2UudXJpbmc9NTAwO2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01NjQ7ZS51YWN1dGU9NTAwO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjExO2UuYWRpZXJlc2lzPTQ0NDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTUwMDtlLnVtYWNyb249NTAwO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zMzM7ZS5wbHVzbWludXM9NTY0O2UuYnJva2VuYmFyPTIwMDtlLnJlZ2lzdGVyZWQ9NzYwO2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9MzMzO2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02MTE7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zMjY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTQ0NDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTQ0NDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01MDA7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTYxMTtlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zNDQ7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz05ODA7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zMzM7ZS5JbWFjcm9uPTMzMztlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTAwO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjExO2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTUwMDtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02Njc7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9NDQ0O2UuRWNhcm9uPTYxMTtlLklvZ29uZWs9MzMzO2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU2NDtlLkljaXJjdW1mbGV4PTMzMztlLm5jYXJvbj01MDA7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01NjQ7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTUwMDtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTQ0NDtlLm5jb21tYWFjY2VudD01MDA7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUJvbGQiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTU1NTtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9MWUzO2UuYW1wZXJzYW5kPTgzMztlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NzA7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTcwO2UuZXF1YWw9NTcwO2UuZ3JlYXRlcj01NzA7ZS5xdWVzdGlvbj01MDA7ZS5hdD05MzA7ZS5BPTcyMjtlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9Nzc4O2UuST0zODk7ZS5KPTUwMDtlLks9Nzc4O2UuTD02Njc7ZS5NPTk0NDtlLk49NzIyO2UuTz03Nzg7ZS5QPTYxMTtlLlE9Nzc4O2UuUj03MjI7ZS5TPTU1NjtlLlQ9NjY3O2UuVT03MjI7ZS5WPTcyMjtlLlc9MWUzO2UuWD03MjI7ZS5ZPTcyMjtlLlo9NjY3O2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODE7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTU2O2UuYz00NDQ7ZS5kPTU1NjtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTU2O2UuaT0yNzg7ZS5qPTMzMztlLms9NTU2O2UubD0yNzg7ZS5tPTgzMztlLm49NTU2O2Uubz01MDA7ZS5wPTU1NjtlLnE9NTU2O2Uucj00NDQ7ZS5zPTM4OTtlLnQ9MzMzO2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NDQ0O2UuYnJhY2VsZWZ0PTM5NDtlLmJhcj0yMjA7ZS5icmFjZXJpZ2h0PTM5NDtlLmFzY2lpdGlsZGU9NTIwO2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yNzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01NDA7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzAwO2UuTHNsYXNoPTY2NztlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzMwO2UuYWU9NzIyO2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTU1NjtlLklkaWVyZXNpcz0zODk7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz03MjI7ZS5kaXZpZGU9NTcwO2UuWWFjdXRlPTcyMjtlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc0NztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD02Njc7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249NDQ0O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02Njc7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTY3MjtlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01NzA7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTY2NztlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zODk7ZS5wbHVzbWludXM9NTcwO2UuYnJva2VuYmFyPTIyMDtlLnJlZ2lzdGVyZWQ9NzQ3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mzg5O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9NDQ0O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjY3O2UuWmNhcm9uPTY2NztlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj00MTY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTQ0NDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zOTQ7ZS5LY29tbWFhY2NlbnQ9Nzc4O2UuTGFjdXRlPTY2NztlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zODk7ZS5JbWFjcm9uPTM4OTtlLkxjYXJvbj02Njc7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD00NDQ7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjY3O2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NDQ0O2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mzg5O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU3MDtlLkljaXJjdW1mbGV4PTM4OTtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01NzA7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTQ0NDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTM4OTtlLnF1b3RlZGJsPTU1NTtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NzA7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTcwO2UuZXF1YWw9NTcwO2UuZ3JlYXRlcj01NzA7ZS5xdWVzdGlvbj01MDA7ZS5hdD04MzI7ZS5BPTY2NztlLkI9NjY3O2UuQz02Njc7ZS5EPTcyMjtlLkU9NjY3O2UuRj02Njc7ZS5HPTcyMjtlLkg9Nzc4O2UuST0zODk7ZS5KPTUwMDtlLks9NjY3O2UuTD02MTE7ZS5NPTg4OTtlLk49NzIyO2UuTz03MjI7ZS5QPTYxMTtlLlE9NzIyO2UuUj02Njc7ZS5TPTU1NjtlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9ODg5O2UuWD02Njc7ZS5ZPTYxMTtlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01NzA7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTU2O2UuaT0yNzg7ZS5qPTI3ODtlLms9NTAwO2UubD0yNzg7ZS5tPTc3ODtlLm49NTU2O2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zODk7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01NTY7ZS52PTQ0NDtlLnc9NjY3O2UueD01MDA7ZS55PTQ0NDtlLno9Mzg5O2UuYnJhY2VsZWZ0PTM0ODtlLmJhcj0yMjA7ZS5icmFjZXJpZ2h0PTM0ODtlLmFzY2lpdGlsZGU9NTcwO2UuZXhjbGFtZG93bj0zODk7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yNzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01MDA7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9OTQ0O2Uub3JkZmVtaW5pbmU9MjY2O2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03MjI7ZS5PRT05NDQ7ZS5vcmRtYXNjdWxpbmU9MzAwO2UuYWU9NzIyO2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zODk7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz02MTE7ZS5kaXZpZGU9NTcwO2UuWWFjdXRlPTYxMTtlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NDQ0O2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc0NztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj02Njc7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02Njc7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTYwODtlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01NzA7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz00NDQ7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zODk7ZS5wbHVzbWludXM9NTcwO2UuYnJva2VuYmFyPTIyMDtlLnJlZ2lzdGVyZWQ9NzQ3O2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9Mzg5O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zNjY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTM4OTtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01NzY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zODI7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zODk7ZS5JbWFjcm9uPTM4OTtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02Njc7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9Mzg5O2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mzg5O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTYwNjtlLkljaXJjdW1mbGV4PTM4OTtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD02MDY7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTM4OTtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUl0YWxpYyJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDIwO2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTY3NTtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz02NzU7ZS5lcXVhbD02NzU7ZS5ncmVhdGVyPTY3NTtlLnF1ZXN0aW9uPTUwMDtlLmF0PTkyMDtlLkE9NjExO2UuQj02MTE7ZS5DPTY2NztlLkQ9NzIyO2UuRT02MTE7ZS5GPTYxMTtlLkc9NzIyO2UuSD03MjI7ZS5JPTMzMztlLko9NDQ0O2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj02Njc7ZS5PPTcyMjtlLlA9NjExO2UuUT03MjI7ZS5SPTYxMTtlLlM9NTAwO2UuVD01NTY7ZS5VPTcyMjtlLlY9NjExO2UuVz04MzM7ZS5YPTYxMTtlLlk9NTU2O2UuWj01NTY7ZS5icmFja2V0bGVmdD0zODk7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTM4OTtlLmFzY2lpY2lyY3VtPTQyMjtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTI3ODtlLmc9NTAwO2UuaD01MDA7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz00NDQ7ZS5sPTI3ODtlLm09NzIyO2Uubj01MDA7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTM4OTtlLnM9Mzg5O2UudD0yNzg7ZS51PTUwMDtlLnY9NDQ0O2Uudz02Njc7ZS54PTQ0NDtlLnk9NDQ0O2Uuej0zODk7ZS5icmFjZWxlZnQ9NDAwO2UuYmFyPTI3NTtlLmJyYWNlcmlnaHQ9NDAwO2UuYXNjaWl0aWxkZT01NDE7ZS5leGNsYW1kb3duPTM4OTtlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTIxNDtlLnF1b3RlZGJsbGVmdD01NTY7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTUyMztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTU2O2UucXVvdGVkYmxyaWdodD01NTY7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz04ODk7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD04ODk7ZS5BRT04ODk7ZS5vcmRmZW1pbmluZT0yNzY7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTcyMjtlLk9FPTk0NDtlLm9yZG1hc2N1bGluZT0zMTA7ZS5hZT02Njc7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTY2NztlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTMzMztlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01MDA7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTU1NjtlLmRpdmlkZT02NzU7ZS5ZYWN1dGU9NTU2O2UuQWNpcmN1bWZsZXg9NjExO2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT00NDQ7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTAwO2UuRWRpZXJlc2lzPTYxMTtlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzYwO2UuRW1hY3Jvbj02MTE7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTY2NztlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTU1NjtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02MTE7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTYxMTtlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01MDA7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTYxMTtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTU1NjtlLlRob3JuPTYxMTtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTYxMTtlLlNhY3V0ZT01MDA7ZS5kY2Fyb249NTQ0O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01MDA7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NjExO2UuQWJyZXZlPTYxMTtlLm11bHRpcGx5PTY3NTtlLnVhY3V0ZT01MDA7ZS5UY2Fyb249NTU2O2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTQ0NDtlLk5hY3V0ZT02Njc7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02MTE7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTAwO2UudW1hY3Jvbj01MDA7ZS5OY2Fyb249NjY3O2UuSWFjdXRlPTMzMztlLnBsdXNtaW51cz02NzU7ZS5icm9rZW5iYXI9Mjc1O2UucmVnaXN0ZXJlZD03NjA7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zMzM7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTYxMTtlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT01NTY7ZS5aY2Fyb249NTU2O2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTMwMDtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjExO2UuQWRpZXJlc2lzPTYxMTtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9Mzg5O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTUwMDtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjExO2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTAwO2UubGNhcm9uPTMwMDtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTk4MDtlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTMzMztlLkltYWNyb249MzMzO2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01MDA7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02MTE7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01MDA7ZS5TY29tbWFhY2NlbnQ9NTAwO2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTAwO2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT02Njc7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTYxMTtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjExO2UuQW9nb25laz02MTE7ZS5BcmluZz02MTE7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD0zODk7ZS5FY2Fyb249NjExO2UuSW9nb25laz0zMzM7ZS5rY29tbWFhY2NlbnQ9NDQ0O2UubWludXM9Njc1O2UuSWNpcmN1bWZsZXg9MzMzO2UubmNhcm9uPTUwMDtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTY3NTtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTAwO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249Mzg5O2UubmNvbW1hYWNjZW50PTUwMDtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZS5aYXBmRGluZ2JhdHM9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmExPTk3NDtlLmEyPTk2MTtlLmEyMDI9OTc0O2UuYTM9OTgwO2UuYTQ9NzE5O2UuYTU9Nzg5O2UuYTExOT03OTA7ZS5hMTE4PTc5MTtlLmExMTc9NjkwO2UuYTExPTk2MDtlLmExMj05Mzk7ZS5hMTM9NTQ5O2UuYTE0PTg1NTtlLmExNT05MTE7ZS5hMTY9OTMzO2UuYTEwNT05MTE7ZS5hMTc9OTQ1O2UuYTE4PTk3NDtlLmExOT03NTU7ZS5hMjA9ODQ2O2UuYTIxPTc2MjtlLmEyMj03NjE7ZS5hMjM9NTcxO2UuYTI0PTY3NztlLmEyNT03NjM7ZS5hMjY9NzYwO2UuYTI3PTc1OTtlLmEyOD03NTQ7ZS5hNj00OTQ7ZS5hNz01NTI7ZS5hOD01Mzc7ZS5hOT01Nzc7ZS5hMTA9NjkyO2UuYTI5PTc4NjtlLmEzMD03ODg7ZS5hMzE9Nzg4O2UuYTMyPTc5MDtlLmEzMz03OTM7ZS5hMzQ9Nzk0O2UuYTM1PTgxNjtlLmEzNj04MjM7ZS5hMzc9Nzg5O2UuYTM4PTg0MTtlLmEzOT04MjM7ZS5hNDA9ODMzO2UuYTQxPTgxNjtlLmE0Mj04MzE7ZS5hNDM9OTIzO2UuYTQ0PTc0NDtlLmE0NT03MjM7ZS5hNDY9NzQ5O2UuYTQ3PTc5MDtlLmE0OD03OTI7ZS5hNDk9Njk1O2UuYTUwPTc3NjtlLmE1MT03Njg7ZS5hNTI9NzkyO2UuYTUzPTc1OTtlLmE1ND03MDc7ZS5hNTU9NzA4O2UuYTU2PTY4MjtlLmE1Nz03MDE7ZS5hNTg9ODI2O2UuYTU5PTgxNTtlLmE2MD03ODk7ZS5hNjE9Nzg5O2UuYTYyPTcwNztlLmE2Mz02ODc7ZS5hNjQ9Njk2O2UuYTY1PTY4OTtlLmE2Nj03ODY7ZS5hNjc9Nzg3O2UuYTY4PTcxMztlLmE2OT03OTE7ZS5hNzA9Nzg1O2UuYTcxPTc5MTtlLmE3Mj04NzM7ZS5hNzM9NzYxO2UuYTc0PTc2MjtlLmEyMDM9NzYyO2UuYTc1PTc1OTtlLmEyMDQ9NzU5O2UuYTc2PTg5MjtlLmE3Nz04OTI7ZS5hNzg9Nzg4O2UuYTc5PTc4NDtlLmE4MT00Mzg7ZS5hODI9MTM4O2UuYTgzPTI3NztlLmE4ND00MTU7ZS5hOTc9MzkyO2UuYTk4PTM5MjtlLmE5OT02Njg7ZS5hMTAwPTY2ODtlLmE4OT0zOTA7ZS5hOTA9MzkwO2UuYTkzPTMxNztlLmE5ND0zMTc7ZS5hOTE9Mjc2O2UuYTkyPTI3NjtlLmEyMDU9NTA5O2UuYTg1PTUwOTtlLmEyMDY9NDEwO2UuYTg2PTQxMDtlLmE4Nz0yMzQ7ZS5hODg9MjM0O2UuYTk1PTMzNDtlLmE5Nj0zMzQ7ZS5hMTAxPTczMjtlLmExMDI9NTQ0O2UuYTEwMz01NDQ7ZS5hMTA0PTkxMDtlLmExMDY9NjY3O2UuYTEwNz03NjA7ZS5hMTA4PTc2MDtlLmExMTI9Nzc2O2UuYTExMT01OTU7ZS5hMTEwPTY5NDtlLmExMDk9NjI2O2UuYTEyMD03ODg7ZS5hMTIxPTc4ODtlLmExMjI9Nzg4O2UuYTEyMz03ODg7ZS5hMTI0PTc4ODtlLmExMjU9Nzg4O2UuYTEyNj03ODg7ZS5hMTI3PTc4ODtlLmExMjg9Nzg4O2UuYTEyOT03ODg7ZS5hMTMwPTc4ODtlLmExMzE9Nzg4O2UuYTEzMj03ODg7ZS5hMTMzPTc4ODtlLmExMzQ9Nzg4O2UuYTEzNT03ODg7ZS5hMTM2PTc4ODtlLmExMzc9Nzg4O2UuYTEzOD03ODg7ZS5hMTM5PTc4ODtlLmExNDA9Nzg4O2UuYTE0MT03ODg7ZS5hMTQyPTc4ODtlLmExNDM9Nzg4O2UuYTE0ND03ODg7ZS5hMTQ1PTc4ODtlLmExNDY9Nzg4O2UuYTE0Nz03ODg7ZS5hMTQ4PTc4ODtlLmExNDk9Nzg4O2UuYTE1MD03ODg7ZS5hMTUxPTc4ODtlLmExNTI9Nzg4O2UuYTE1Mz03ODg7ZS5hMTU0PTc4ODtlLmExNTU9Nzg4O2UuYTE1Nj03ODg7ZS5hMTU3PTc4ODtlLmExNTg9Nzg4O2UuYTE1OT03ODg7ZS5hMTYwPTg5NDtlLmExNjE9ODM4O2UuYTE2Mz0xMDE2O2UuYTE2ND00NTg7ZS5hMTk2PTc0ODtlLmExNjU9OTI0O2UuYTE5Mj03NDg7ZS5hMTY2PTkxODtlLmExNjc9OTI3O2UuYTE2OD05Mjg7ZS5hMTY5PTkyODtlLmExNzA9ODM0O2UuYTE3MT04NzM7ZS5hMTcyPTgyODtlLmExNzM9OTI0O2UuYTE2Mj05MjQ7ZS5hMTc0PTkxNztlLmExNzU9OTMwO2UuYTE3Nj05MzE7ZS5hMTc3PTQ2MztlLmExNzg9ODgzO2UuYTE3OT04MzY7ZS5hMTkzPTgzNjtlLmExODA9ODY3O2UuYTE5OT04Njc7ZS5hMTgxPTY5NjtlLmEyMDA9Njk2O2UuYTE4Mj04NzQ7ZS5hMjAxPTg3NDtlLmExODM9NzYwO2UuYTE4ND05NDY7ZS5hMTk3PTc3MTtlLmExODU9ODY1O2UuYTE5ND03NzE7ZS5hMTk4PTg4ODtlLmExODY9OTY3O2UuYTE5NT04ODg7ZS5hMTg3PTgzMTtlLmExODg9ODczO2UuYTE4OT05Mjc7ZS5hMTkwPTk3MDtlLmExOTE9OTE4fSkpfSkpO3QuZ2V0TWV0cmljcz1pO2NvbnN0IG49KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDotNDI2fTtlWyJDb3VyaWVyLUJvbGQiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQzOX07ZVsiQ291cmllci1PYmxpcXVlIl09e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDo0MjZ9O2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn07ZS5IZWx2ZXRpY2E9e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9O2VbIkhlbHZldGljYS1PYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTMyfTtlWyJUaW1lcy1Sb21hbiJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjYyLHhIZWlnaHQ6NDUwfTtlWyJUaW1lcy1Cb2xkIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NzYseEhlaWdodDo0NjF9O2VbIlRpbWVzLUl0YWxpYyJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjUzLHhIZWlnaHQ6NDQxfTtlWyJUaW1lcy1Cb2xkSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjkseEhlaWdodDo0NjJ9O2UuU3ltYm9sPXthc2NlbnQ6TWF0aC5OYU4sZGVzY2VudDpNYXRoLk5hTixjYXBIZWlnaHQ6TWF0aC5OYU4seEhlaWdodDpNYXRoLk5hTn07ZS5aYXBmRGluZ2JhdHM9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfX0pKTt0LmdldEZvbnRCYXNpY01ldHJpY3M9bn0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5HbHlmVGFibGU9dm9pZCAwO3QuR2x5ZlRhYmxlPWNsYXNzIEdseWZUYWJsZXtjb25zdHJ1Y3Rvcih7Z2x5ZlRhYmxlOmUsaXNHbHlwaExvY2F0aW9uc0xvbmc6dCxsb2NhVGFibGU6YSxudW1HbHlwaHM6cn0pe3RoaXMuZ2x5cGhzPVtdO2NvbnN0IGk9bmV3IERhdGFWaWV3KGEuYnVmZmVyLGEuYnl0ZU9mZnNldCxhLmJ5dGVMZW5ndGgpLG49bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLHM9dD80OjI7bGV0IG89dD9pLmdldFVpbnQzMigwKToyKmkuZ2V0VWludDE2KDApLGM9MDtmb3IobGV0IGU9MDtlPHI7ZSsrKXtjKz1zO2NvbnN0IGU9dD9pLmdldFVpbnQzMihjKToyKmkuZ2V0VWludDE2KGMpO2lmKGU9PT1vKXt0aGlzLmdseXBocy5wdXNoKG5ldyBHbHlwaCh7fSkpO2NvbnRpbnVlfWNvbnN0IGE9R2x5cGgucGFyc2UobyxuKTt0aGlzLmdseXBocy5wdXNoKGEpO289ZX19Z2V0U2l6ZSgpe3JldHVybiB0aGlzLmdseXBocy5yZWR1Y2UoKChlLHQpPT5lKyh0LmdldFNpemUoKSszJi00KSksMCl9d3JpdGUoKXtjb25zdCBlPXRoaXMuZ2V0U2l6ZSgpLHQ9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcihlKSksYT1lPjEzMTA3MCxyPWE/NDoyLGk9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigodGhpcy5nbHlwaHMubGVuZ3RoKzEpKnIpKTthP2kuc2V0VWludDMyKDAsMCk6aS5zZXRVaW50MTYoMCwwKTtsZXQgbj0wLHM9MDtmb3IoY29uc3QgZSBvZiB0aGlzLmdseXBocyl7bis9ZS53cml0ZShuLHQpO249biszJi00O3MrPXI7YT9pLnNldFVpbnQzMihzLG4pOmkuc2V0VWludDE2KHMsbj4+MSl9cmV0dXJue2lzTG9jYXRpb25Mb25nOmEsbG9jYTpuZXcgVWludDhBcnJheShpLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fXNjYWxlKGUpe2ZvcihsZXQgdD0wLGE9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8YTt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fTtjbGFzcyBHbHlwaHtjb25zdHJ1Y3Rvcih7aGVhZGVyOmU9bnVsbCxzaW1wbGU6dD1udWxsLGNvbXBvc2l0ZXM6YT1udWxsfSl7dGhpcy5oZWFkZXI9ZTt0aGlzLnNpbXBsZT10O3RoaXMuY29tcG9zaXRlcz1hfXN0YXRpYyBwYXJzZShlLHQpe2NvbnN0W2Escl09R2x5cGhIZWFkZXIucGFyc2UoZSx0KTtlKz1hO2lmKHIubnVtYmVyT2ZDb250b3VyczwwKXtjb25zdCBhPVtdO2Zvcig7Oyl7Y29uc3RbcixpXT1Db21wb3NpdGVHbHlwaC5wYXJzZShlLHQpO2UrPXI7YS5wdXNoKGkpO2lmKCEoMzImaS5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBHbHlwaCh7aGVhZGVyOnIsY29tcG9zaXRlczphfSl9Y29uc3QgaT1TaW1wbGVHbHlwaC5wYXJzZShlLHQsci5udW1iZXJPZkNvbnRvdXJzKTtyZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6cixzaW1wbGU6aX0pfWdldFNpemUoKXtpZighdGhpcy5oZWFkZXIpcmV0dXJuIDA7Y29uc3QgZT10aGlzLnNpbXBsZT90aGlzLnNpbXBsZS5nZXRTaXplKCk6dGhpcy5jb21wb3NpdGVzLnJlZHVjZSgoKGUsdCk9PmUrdC5nZXRTaXplKCkpLDApO3JldHVybiB0aGlzLmhlYWRlci5nZXRTaXplKCkrZX13cml0ZShlLHQpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCBhPWU7ZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KTtpZih0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2UgZm9yKGNvbnN0IGEgb2YgdGhpcy5jb21wb3NpdGVzKWUrPWEud3JpdGUoZSx0KTtyZXR1cm4gZS1hfXNjYWxlKGUpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm47Y29uc3QgdD0odGhpcy5oZWFkZXIueE1pbit0aGlzLmhlYWRlci54TWF4KS8yO3RoaXMuaGVhZGVyLnNjYWxlKHQsZSk7aWYodGhpcy5zaW1wbGUpdGhpcy5zaW1wbGUuc2NhbGUodCxlKTtlbHNlIGZvcihjb25zdCBhIG9mIHRoaXMuY29tcG9zaXRlcylhLnNjYWxlKHQsZSl9fWNsYXNzIEdseXBoSGVhZGVye2NvbnN0cnVjdG9yKHtudW1iZXJPZkNvbnRvdXJzOmUseE1pbjp0LHlNaW46YSx4TWF4OnIseU1heDppfSl7dGhpcy5udW1iZXJPZkNvbnRvdXJzPWU7dGhpcy54TWluPXQ7dGhpcy55TWluPWE7dGhpcy54TWF4PXI7dGhpcy55TWF4PWl9c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuWzEwLG5ldyBHbHlwaEhlYWRlcih7bnVtYmVyT2ZDb250b3Vyczp0LmdldEludDE2KGUpLHhNaW46dC5nZXRJbnQxNihlKzIpLHlNaW46dC5nZXRJbnQxNihlKzQpLHhNYXg6dC5nZXRJbnQxNihlKzYpLHlNYXg6dC5nZXRJbnQxNihlKzgpfSldfWdldFNpemUoKXtyZXR1cm4gMTB9d3JpdGUoZSx0KXt0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKTt0LnNldEludDE2KGUrMix0aGlzLnhNaW4pO3Quc2V0SW50MTYoZSs0LHRoaXMueU1pbik7dC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KTt0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpO3JldHVybiAxMH1zY2FsZShlLHQpe3RoaXMueE1pbj1NYXRoLnJvdW5kKGUrKHRoaXMueE1pbi1lKSp0KTt0aGlzLnhNYXg9TWF0aC5yb3VuZChlKyh0aGlzLnhNYXgtZSkqdCl9fWNsYXNzIENvbnRvdXJ7Y29uc3RydWN0b3Ioe2ZsYWdzOmUseENvb3JkaW5hdGVzOnQseUNvb3JkaW5hdGVzOmF9KXt0aGlzLnhDb29yZGluYXRlcz10O3RoaXMueUNvb3JkaW5hdGVzPWE7dGhpcy5mbGFncz1lfX1jbGFzcyBTaW1wbGVHbHlwaHtjb25zdHJ1Y3Rvcih7Y29udG91cnM6ZSxpbnN0cnVjdGlvbnM6dH0pe3RoaXMuY29udG91cnM9ZTt0aGlzLmluc3RydWN0aW9ucz10fXN0YXRpYyBwYXJzZShlLHQsYSl7Y29uc3Qgcj1bXTtmb3IobGV0IGk9MDtpPGE7aSsrKXtjb25zdCBhPXQuZ2V0VWludDE2KGUpO2UrPTI7ci5wdXNoKGEpfWNvbnN0IGk9clthLTFdKzEsbj10LmdldFVpbnQxNihlKTtlKz0yO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK24pO2UrPW47Y29uc3Qgbz1bXTtmb3IobGV0IGE9MDthPGk7ZSsrLGErKyl7bGV0IHI9dC5nZXRVaW50OChlKTtvLnB1c2gocik7aWYoOCZyKXtjb25zdCBpPXQuZ2V0VWludDgoKytlKTtyXj04O2ZvcihsZXQgZT0wO2U8aTtlKyspby5wdXNoKHIpO2ErPWl9fWNvbnN0IGM9W107bGV0IGw9W10saD1bXSx1PVtdO2NvbnN0IGQ9W107bGV0IGY9MCxnPTA7Zm9yKGxldCBhPTA7YTxpO2ErKyl7Y29uc3QgaT1vW2FdO2lmKDImaSl7Y29uc3QgYT10LmdldFVpbnQ4KGUrKyk7Zys9MTYmaT9hOi1hO2wucHVzaChnKX1lbHNlIGlmKDE2JmkpbC5wdXNoKGcpO2Vsc2V7Zys9dC5nZXRJbnQxNihlKTtlKz0yO2wucHVzaChnKX1pZihyW2ZdPT09YSl7ZisrO2MucHVzaChsKTtsPVtdfX1nPTA7Zj0wO2ZvcihsZXQgYT0wO2E8aTthKyspe2NvbnN0IGk9b1thXTtpZig0Jmkpe2NvbnN0IGE9dC5nZXRVaW50OChlKyspO2crPTMyJmk/YTotYTtoLnB1c2goZyl9ZWxzZSBpZigzMiZpKWgucHVzaChnKTtlbHNle2crPXQuZ2V0SW50MTYoZSk7ZSs9MjtoLnB1c2goZyl9dS5wdXNoKDEmaXw2NCZpKTtpZihyW2ZdPT09YSl7bD1jW2ZdO2YrKztkLnB1c2gobmV3IENvbnRvdXIoe2ZsYWdzOnUseENvb3JkaW5hdGVzOmwseUNvb3JkaW5hdGVzOmh9KSk7aD1bXTt1PVtdfX1yZXR1cm4gbmV3IFNpbXBsZUdseXBoKHtjb250b3VyczpkLGluc3RydWN0aW9uczpzfSl9Z2V0U2l6ZSgpe2xldCBlPTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgsdD0wLGE9MDtmb3IoY29uc3QgciBvZiB0aGlzLmNvbnRvdXJzKXtlKz1yLmZsYWdzLmxlbmd0aDtmb3IobGV0IGk9MCxuPXIueENvb3JkaW5hdGVzLmxlbmd0aDtpPG47aSsrKXtjb25zdCBuPXIueENvb3JkaW5hdGVzW2ldLHM9ci55Q29vcmRpbmF0ZXNbaV07bGV0IG89TWF0aC5hYnMobi10KTtvPjI1NT9lKz0yOm8+MCYmKGUrPTEpO3Q9bjtvPU1hdGguYWJzKHMtYSk7bz4yNTU/ZSs9MjpvPjAmJihlKz0xKTthPXN9fXJldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgYT1lLHI9W10saT1bXSxuPVtdO2xldCBzPTAsbz0wO2Zvcihjb25zdCBhIG9mIHRoaXMuY29udG91cnMpe2ZvcihsZXQgZT0wLHQ9YS54Q29vcmRpbmF0ZXMubGVuZ3RoO2U8dDtlKyspe2xldCB0PWEuZmxhZ3NbZV07Y29uc3QgYz1hLnhDb29yZGluYXRlc1tlXTtsZXQgbD1jLXM7aWYoMD09PWwpe3R8PTE2O3IucHVzaCgwKX1lbHNle2NvbnN0IGU9TWF0aC5hYnMobCk7aWYoZTw9MjU1KXt0fD1sPj0wPzE4OjI7ci5wdXNoKGUpfWVsc2Ugci5wdXNoKGwpfXM9Yztjb25zdCBoPWEueUNvb3JkaW5hdGVzW2VdO2w9aC1vO2lmKDA9PT1sKXt0fD0zMjtpLnB1c2goMCl9ZWxzZXtjb25zdCBlPU1hdGguYWJzKGwpO2lmKGU8PTI1NSl7dHw9bD49MD8zNjo0O2kucHVzaChlKX1lbHNlIGkucHVzaChsKX1vPWg7bi5wdXNoKHQpfXQuc2V0VWludDE2KGUsci5sZW5ndGgtMSk7ZSs9Mn10LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjtpZih0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpe25ldyBVaW50OEFycmF5KHQuYnVmZmVyLDAsdC5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLGUpO2UrPXRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aH1mb3IoY29uc3QgYSBvZiBuKXQuc2V0VWludDgoZSsrLGEpO2ZvcihsZXQgYT0wLGk9ci5sZW5ndGg7YTxpO2ErKyl7Y29uc3QgaT1yW2FdLHM9blthXTtpZigyJnMpdC5zZXRVaW50OChlKyssaSk7ZWxzZSBpZighKDE2JnMpKXt0LnNldEludDE2KGUsaSk7ZSs9Mn19Zm9yKGxldCBhPTAscj1pLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWlbYV0scz1uW2FdO2lmKDQmcyl0LnNldFVpbnQ4KGUrKyxyKTtlbHNlIGlmKCEoMzImcykpe3Quc2V0SW50MTYoZSxyKTtlKz0yfX1yZXR1cm4gZS1hfXNjYWxlKGUsdCl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jb250b3VycylpZigwIT09YS54Q29vcmRpbmF0ZXMubGVuZ3RoKWZvcihsZXQgcj0wLGk9YS54Q29vcmRpbmF0ZXMubGVuZ3RoO3I8aTtyKyspYS54Q29vcmRpbmF0ZXNbcl09TWF0aC5yb3VuZChlKyhhLnhDb29yZGluYXRlc1tyXS1lKSp0KX19Y2xhc3MgQ29tcG9zaXRlR2x5cGh7Y29uc3RydWN0b3Ioe2ZsYWdzOmUsZ2x5cGhJbmRleDp0LGFyZ3VtZW50MTphLGFyZ3VtZW50MjpyLHRyYW5zZjppLGluc3RydWN0aW9uczpufSl7dGhpcy5mbGFncz1lO3RoaXMuZ2x5cGhJbmRleD10O3RoaXMuYXJndW1lbnQxPWE7dGhpcy5hcmd1bWVudDI9cjt0aGlzLnRyYW5zZj1pO3RoaXMuaW5zdHJ1Y3Rpb25zPW59c3RhdGljIHBhcnNlKGUsdCl7Y29uc3QgYT1lLHI9W107bGV0IGk9dC5nZXRVaW50MTYoZSk7Y29uc3Qgbj10LmdldFVpbnQxNihlKzIpO2UrPTQ7bGV0IHMsbztpZigxJmkpe2lmKDImaSl7cz10LmdldEludDE2KGUpO289dC5nZXRJbnQxNihlKzIpfWVsc2V7cz10LmdldFVpbnQxNihlKTtvPXQuZ2V0VWludDE2KGUrMil9ZSs9NDtpXj0xfWVsc2V7aWYoMiZpKXtzPXQuZ2V0SW50OChlKTtvPXQuZ2V0SW50OChlKzEpfWVsc2V7cz10LmdldFVpbnQ4KGUpO289dC5nZXRVaW50OChlKzEpfWUrPTJ9aWYoOCZpKXtyLnB1c2godC5nZXRVaW50MTYoZSkpO2UrPTJ9ZWxzZSBpZig2NCZpKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSk7ZSs9NH1lbHNlIGlmKDEyOCZpKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSx0LmdldFVpbnQxNihlKzQpLHQuZ2V0VWludDE2KGUrNikpO2UrPTh9bGV0IGM9bnVsbDtpZigyNTYmaSl7Y29uc3QgYT10LmdldFVpbnQxNihlKTtlKz0yO2M9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK2EpO2UrPWF9cmV0dXJuW2UtYSxuZXcgQ29tcG9zaXRlR2x5cGgoe2ZsYWdzOmksZ2x5cGhJbmRleDpuLGFyZ3VtZW50MTpzLGFyZ3VtZW50MjpvLHRyYW5zZjpyLGluc3RydWN0aW9uczpjfSldfWdldFNpemUoKXtsZXQgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoOzI1NiZ0aGlzLmZsYWdzJiYoZSs9Mit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7MiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KGUrPTIpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KGUrPTIpO3JldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgYT1lOzImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fCh0aGlzLmZsYWdzfD0xKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fCh0aGlzLmZsYWdzfD0xKTt0LnNldFVpbnQxNihlLHRoaXMuZmxhZ3MpO3Quc2V0VWludDE2KGUrMix0aGlzLmdseXBoSW5kZXgpO2UrPTQ7aWYoMSZ0aGlzLmZsYWdzKXtpZigyJnRoaXMuZmxhZ3Mpe3Quc2V0SW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRJbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpfWVsc2V7dC5zZXRVaW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRVaW50MTYoZSsyLHRoaXMuYXJndW1lbnQyKX1lKz00fWVsc2V7dC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKTt0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50Mik7ZSs9Mn1pZigyNTYmdGhpcy5mbGFncyl7dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7aWYodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKXtuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKTtlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGh9fXJldHVybiBlLWF9c2NhbGUoZSx0KXt9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9dm9pZCAwO3ZhciByPWEoMyksaT1hKDIpO2Z1bmN0aW9uIHdyaXRlSW50MTYoZSx0LGEpe2VbdF09YT4+OCYyNTU7ZVt0KzFdPTI1NSZhfWZ1bmN0aW9uIHdyaXRlSW50MzIoZSx0LGEpe2VbdF09YT4+MjQmMjU1O2VbdCsxXT1hPj4xNiYyNTU7ZVt0KzJdPWE+PjgmMjU1O2VbdCszXT0yNTUmYX1mdW5jdGlvbiB3cml0ZURhdGEoZSx0LGEpe2lmKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KGEsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEpZm9yKGxldCByPTAsaT1hLmxlbmd0aDtyPGk7cisrKWVbdCsrXT0yNTUmYS5jaGFyQ29kZUF0KHIpO2Vsc2UgZm9yKGNvbnN0IHIgb2YgYSllW3QrK109MjU1JnJ9Y2xhc3MgT3BlblR5cGVGaWxlQnVpbGRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnNmbnQ9ZTt0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXN0YXRpYyBnZXRTZWFyY2hQYXJhbXMoZSx0KXtsZXQgYT0xLHI9MDtmb3IoOyhhXmUpPmE7KXthPDw9MTtyKyt9Y29uc3QgaT1hKnQ7cmV0dXJue3JhbmdlOmksZW50cnk6cixyYW5nZVNoaWZ0OnQqZS1pfX10b0FycmF5KCl7bGV0IGU9dGhpcy5zZm50O2NvbnN0IHQ9dGhpcy50YWJsZXMsYT1PYmplY3Qua2V5cyh0KTthLnNvcnQoKTtjb25zdCBuPWEubGVuZ3RoO2xldCBzLG8sYyxsLGgsdT0xMisxNipuO2NvbnN0IGQ9W3VdO2ZvcihzPTA7czxuO3MrKyl7bD10W2Fbc11dO3UrPShsLmxlbmd0aCszJi00KT4+PjA7ZC5wdXNoKHUpfWNvbnN0IGY9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKHM9MDtzPG47cysrKXtsPXRbYVtzXV07d3JpdGVEYXRhKGYsZFtzXSxsKX0idHJ1ZSI9PT1lJiYoZT0oMCxpLnN0cmluZzMyKSg2NTUzNikpO2ZbMF09MjU1JmUuY2hhckNvZGVBdCgwKTtmWzFdPTI1NSZlLmNoYXJDb2RlQXQoMSk7ZlsyXT0yNTUmZS5jaGFyQ29kZUF0KDIpO2ZbM109MjU1JmUuY2hhckNvZGVBdCgzKTt3cml0ZUludDE2KGYsNCxuKTtjb25zdCBnPU9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG4sMTYpO3dyaXRlSW50MTYoZiw2LGcucmFuZ2UpO3dyaXRlSW50MTYoZiw4LGcuZW50cnkpO3dyaXRlSW50MTYoZiwxMCxnLnJhbmdlU2hpZnQpO3U9MTI7Zm9yKHM9MDtzPG47cysrKXtoPWFbc107Zlt1XT0yNTUmaC5jaGFyQ29kZUF0KDApO2ZbdSsxXT0yNTUmaC5jaGFyQ29kZUF0KDEpO2ZbdSsyXT0yNTUmaC5jaGFyQ29kZUF0KDIpO2ZbdSszXT0yNTUmaC5jaGFyQ29kZUF0KDMpO2xldCBlPTA7Zm9yKG89ZFtzXSxjPWRbcysxXTtvPGM7bys9NCl7ZT1lKygwLHIucmVhZFVpbnQzMikoZixvKT4+PjB9d3JpdGVJbnQzMihmLHUrNCxlKTt3cml0ZUludDMyKGYsdSs4LGRbc10pO3dyaXRlSW50MzIoZix1KzEyLHRbaF0ubGVuZ3RoKTt1Kz0xNn1yZXR1cm4gZn1hZGRUYWJsZShlLHQpe2lmKGUgaW4gdGhpcy50YWJsZXMpdGhyb3cgbmV3IEVycm9yKCJUYWJsZSAiK2UrIiBhbHJlYWR5IGV4aXN0cyIpO3RoaXMudGFibGVzW2VdPXR9fXQuT3BlblR5cGVGaWxlQnVpbGRlcj1PcGVuVHlwZUZpbGVCdWlsZGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVHlwZTFGb250PXZvaWQgMDt2YXIgcj1hKDM1KSxpPWEoMiksbj1hKDM4KSxzPWEoMyksbz1hKDgpLGM9YSg0OSk7ZnVuY3Rpb24gZmluZEJsb2NrKGUsdCxhKXtjb25zdCByPWUubGVuZ3RoLGk9dC5sZW5ndGgsbj1yLWk7bGV0IG89YSxjPSExO2Zvcig7bzxuOyl7bGV0IGE9MDtmb3IoO2E8aSYmZVtvK2FdPT09dFthXTspYSsrO2lmKGE+PWkpe28rPWE7Zm9yKDtvPHImJigwLHMuaXNXaGl0ZVNwYWNlKShlW29dKTspbysrO2M9ITA7YnJlYWt9bysrfXJldHVybntmb3VuZDpjLGxlbmd0aDpvfX10LlR5cGUxRm9udD1jbGFzcyBUeXBlMUZvbnR7Y29uc3RydWN0b3IoZSx0LGEpe2xldCByPWEubGVuZ3RoMSxzPWEubGVuZ3RoMixsPXQucGVla0J5dGVzKDYpO2NvbnN0IGg9MTI4PT09bFswXSYmMT09PWxbMV07aWYoaCl7dC5za2lwKDYpO3I9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IHU9ZnVuY3Rpb24gZ2V0SGVhZGVyQmxvY2soZSx0KXtjb25zdCBhPVsxMDEsMTAxLDEyMCwxMDEsOTldLHI9ZS5wb3M7bGV0IG4scyxjLGw7dHJ5e249ZS5nZXRCeXRlcyh0KTtzPW4ubGVuZ3RofWNhdGNoKGUpe31pZihzPT09dCl7Yz1maW5kQmxvY2sobixhLHQtMiphLmxlbmd0aCk7aWYoYy5mb3VuZCYmYy5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKG4pLGxlbmd0aDp0fX0oMCxpLndhcm4pKCdJbnZhbGlkICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO2UucG9zPXI7Zm9yKDs7KXtjPWZpbmRCbG9jayhlLnBlZWtCeXRlcygyMDQ4KSxhLDApO2lmKDA9PT1jLmxlbmd0aClicmVhaztlLnBvcys9Yy5sZW5ndGg7aWYoYy5mb3VuZCl7bD1lLnBvcy1yO2JyZWFrfX1lLnBvcz1yO2lmKGwpcmV0dXJue3N0cmVhbTpuZXcgby5TdHJlYW0oZS5nZXRCeXRlcyhsKSksbGVuZ3RoOmx9OygwLGkud2FybikoJ1VuYWJsZSB0byByZWNvdmVyICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHVzaW5nIGFzIGlzLicpO3JldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGUuZ2V0Qnl0ZXModCkpLGxlbmd0aDp0fX0odCxyKTtuZXcgYy5UeXBlMVBhcnNlcih1LnN0cmVhbSwhMSxuLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIoYSk7aWYoaCl7bD10LmdldEJ5dGVzKDYpO3M9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IGQ9ZnVuY3Rpb24gZ2V0RWV4ZWNCbG9jayhlLHQpe2NvbnN0IGE9ZS5nZXRCeXRlcygpO2lmKDA9PT1hLmxlbmd0aCl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiZ2V0RWV4ZWNCbG9jayAtIG5vIGZvbnQgcHJvZ3JhbSBmb3VuZC4iKTtyZXR1cm57c3RyZWFtOm5ldyBvLlN0cmVhbShhKSxsZW5ndGg6YS5sZW5ndGh9fSh0KSxmPW5ldyBjLlR5cGUxUGFyc2VyKGQuc3RyZWFtLCEwLG4uU0VBQ19BTkFMWVNJU19FTkFCTEVEKS5leHRyYWN0Rm9udFByb2dyYW0oYSk7Zm9yKGNvbnN0IGUgaW4gZi5wcm9wZXJ0aWVzKWFbZV09Zi5wcm9wZXJ0aWVzW2VdO2NvbnN0IGc9Zi5jaGFyc3RyaW5ncyxwPXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhnKSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhmLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPWc7dGhpcy5kYXRhPXRoaXMud3JhcChlLHAsdGhpcy5jaGFyc3RyaW5ncyxtLGEpO3RoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhmLmNoYXJzdHJpbmdzKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9Z2V0Q2hhcnNldCgpe2NvbnN0IGU9WyIubm90ZGVmIl07Zm9yKGNvbnN0e2dseXBoTmFtZTp0fW9mIHRoaXMuY2hhcnN0cmluZ3MpZS5wdXNoKHQpO3JldHVybiBlfWdldEdseXBoTWFwcGluZyhlKXtjb25zdCB0PXRoaXMuY2hhcnN0cmluZ3M7aWYoZS5jb21wb3NpdGUpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspe2FbZS5jTWFwLmNoYXJDb2RlT2YocildPXIrMX1yZXR1cm4gYX1jb25zdCBhPVsiLm5vdGRlZiJdO2xldCByLGk7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylhLnB1c2godFtpXS5nbHlwaE5hbWUpO2NvbnN0IHM9ZS5idWlsdEluRW5jb2Rpbmc7aWYocyl7cj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCBlIGluIHMpe2k9YS5pbmRleE9mKHNbZV0pO2k+PTAmJihyW2VdPWkpfX1yZXR1cm4oMCxuLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxyLGEpfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLm51bUdseXBocylyZXR1cm4hMTtpZigwPT09ZSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5jaGFyc3RyaW5nc1tlLTFdLmNoYXJzdHJpbmcubGVuZ3RoPjB9Z2V0U2VhY3MoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthXTtyLnNlYWMmJih0W2ErMV09ci5zZWFjKX1yZXR1cm4gdH1nZXRUeXBlMkNoYXJzdHJpbmdzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl0LnB1c2goYS5jaGFyc3RyaW5nKTtyZXR1cm4gdH1nZXRUeXBlMlN1YnJzKGUpe2xldCB0PTA7Y29uc3QgYT1lLmxlbmd0aDt0PWE8MTEzMz8xMDc6YTwzMzc2OT8xMTMxOjMyNzY4O2NvbnN0IHI9W107bGV0IGk7Zm9yKGk9MDtpPHQ7aSsrKXIucHVzaChbMTFdKTtmb3IoaT0wO2k8YTtpKyspci5wdXNoKGVbaV0pO3JldHVybiByfXdyYXAoZSx0LGEsaSxuKXtjb25zdCBzPW5ldyByLkNGRjtzLmhlYWRlcj1uZXcgci5DRkZIZWFkZXIoMSwwLDQsNCk7cy5uYW1lcz1bZV07Y29uc3Qgbz1uZXcgci5DRkZUb3BEaWN0O28uc2V0QnlOYW1lKCJ2ZXJzaW9uIiwzOTEpO28uc2V0QnlOYW1lKCJOb3RpY2UiLDM5Mik7by5zZXRCeU5hbWUoIkZ1bGxOYW1lIiwzOTMpO28uc2V0QnlOYW1lKCJGYW1pbHlOYW1lIiwzOTQpO28uc2V0QnlOYW1lKCJXZWlnaHQiLDM5NSk7by5zZXRCeU5hbWUoIkVuY29kaW5nIixudWxsKTtvLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsbi5mb250TWF0cml4KTtvLnNldEJ5TmFtZSgiRm9udEJCb3giLG4uYmJveCk7by5zZXRCeU5hbWUoImNoYXJzZXQiLG51bGwpO28uc2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIsbnVsbCk7by5zZXRCeU5hbWUoIlByaXZhdGUiLG51bGwpO3MudG9wRGljdD1vO2NvbnN0IGM9bmV3IHIuQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIik7Yy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKTtjLmFkZChlKTtjLmFkZChlKTtjLmFkZCgiTWVkaXVtIik7cy5zdHJpbmdzPWM7cy5nbG9iYWxTdWJySW5kZXg9bmV3IHIuQ0ZGSW5kZXg7Y29uc3QgbD10Lmxlbmd0aCxoPVsiLm5vdGRlZiJdO2xldCB1LGQ7Zm9yKHU9MDt1PGw7dSsrKXtjb25zdCBlPWFbdV0uZ2x5cGhOYW1lOy0xPT09ci5DRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihlKSYmYy5hZGQoZSk7aC5wdXNoKGUpfXMuY2hhcnNldD1uZXcgci5DRkZDaGFyc2V0KCExLDAsaCk7Y29uc3QgZj1uZXcgci5DRkZJbmRleDtmLmFkZChbMTM5LDE0XSk7Zm9yKHU9MDt1PGw7dSsrKWYuYWRkKHRbdV0pO3MuY2hhclN0cmluZ3M9Zjtjb25zdCBnPW5ldyByLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7Y29uc3QgcD1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2Zvcih1PTAsZD1wLmxlbmd0aDt1PGQ7dSsrKXtjb25zdCBlPXBbdV07aWYoIShlIGluIG4ucHJpdmF0ZURhdGEpKWNvbnRpbnVlO2NvbnN0IHQ9bi5wcml2YXRlRGF0YVtlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+MDtlLS0pdFtlXS09dFtlLTFdO2cuc2V0QnlOYW1lKGUsdCl9cy50b3BEaWN0LnByaXZhdGVEaWN0PWc7Y29uc3QgbT1uZXcgci5DRkZJbmRleDtmb3IodT0wLGQ9aS5sZW5ndGg7dTxkO3UrKyltLmFkZChpW3VdKTtnLnN1YnJzSW5kZXg9bTtyZXR1cm4gbmV3IHIuQ0ZGQ29tcGlsZXIocykuY29tcGlsZSgpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIHI9YSgzNyksaT1hKDMpLG49YSg4KSxzPWEoMik7Y29uc3Qgbz1bNF0sYz1bNV0sbD1bNl0saD1bN10sdT1bOF0sZD1bMTIsMzVdLGY9WzE0XSxnPVsyMV0scD1bMjJdLG09WzMwXSxiPVszMV07Y2xhc3MgVHlwZTFDaGFyU3RyaW5ne2NvbnN0cnVjdG9yKCl7dGhpcy53aWR0aD0wO3RoaXMubHNiPTA7dGhpcy5mbGV4aW5nPSExO3RoaXMub3V0cHV0PVtdO3RoaXMuc3RhY2s9W119Y29udmVydChlLHQsYSl7Y29uc3Qgcj1lLmxlbmd0aDtsZXQgaSxuLHksdz0hMTtmb3IobGV0IFM9MDtTPHI7UysrKXtsZXQgcj1lW1NdO2lmKHI8MzIpezEyPT09ciYmKHI9KHI8PDgpK2VbKytTXSk7c3dpdGNoKHIpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA5OmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSAzMDc0OmNhc2UgMzEwNTp0aGlzLnN0YWNrPVtdO2JyZWFrO2Nhc2UgNDppZih0aGlzLmZsZXhpbmcpe2lmKHRoaXMuc3RhY2subGVuZ3RoPDEpe3c9ITA7YnJlYWt9Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGUpO2JyZWFrfXc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLG8pO2JyZWFrO2Nhc2UgNTp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixjKTticmVhaztjYXNlIDY6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsbCk7YnJlYWs7Y2FzZSA3Onc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgODp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix1KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe3c9ITA7YnJlYWt9eT10aGlzLnN0YWNrLnBvcCgpO2lmKCF0W3ldKXt3PSEwO2JyZWFrfXc9dGhpcy5jb252ZXJ0KHRbeV0sdCxhKTticmVhaztjYXNlIDExOnJldHVybiB3O2Nhc2UgMTM6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7dz0hMDticmVha31pPXRoaXMuc3RhY2sucG9wKCk7bj10aGlzLnN0YWNrLnBvcCgpO3RoaXMubHNiPW47dGhpcy53aWR0aD1pO3RoaXMuc3RhY2sucHVzaChpLG4pO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgyLHApO2JyZWFrO2Nhc2UgMTQ6dGhpcy5vdXRwdXQucHVzaChmWzBdKTticmVhaztjYXNlIDIxOmlmKHRoaXMuZmxleGluZylicmVhazt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixnKTticmVhaztjYXNlIDIyOmlmKHRoaXMuZmxleGluZyl7dGhpcy5zdGFjay5wdXNoKDApO2JyZWFrfXc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLHApO2JyZWFrO2Nhc2UgMzA6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsbSk7YnJlYWs7Y2FzZSAzMTp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxiKTticmVhaztjYXNlIDMwNzg6aWYoYSl7Y29uc3QgZT10aGlzLnN0YWNrLmF0KC01KTt0aGlzLnNlYWM9dGhpcy5zdGFjay5zcGxpY2UoLTQsNCk7dGhpcy5zZWFjWzBdKz10aGlzLmxzYi1lO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgwLGYpfWVsc2Ugdz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsZik7YnJlYWs7Y2FzZSAzMDc5OmlmKHRoaXMuc3RhY2subGVuZ3RoPDQpe3c9ITA7YnJlYWt9dGhpcy5zdGFjay5wb3AoKTtpPXRoaXMuc3RhY2sucG9wKCk7Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO249dGhpcy5zdGFjay5wb3AoKTt0aGlzLmxzYj1uO3RoaXMud2lkdGg9aTt0aGlzLnN0YWNrLnB1c2goaSxuLGUpO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGcpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXt3PSEwO2JyZWFrfWNvbnN0IFM9dGhpcy5zdGFjay5wb3AoKSx4PXRoaXMuc3RhY2sucG9wKCk7dGhpcy5zdGFjay5wdXNoKHgvUyk7YnJlYWs7Y2FzZSAzMDg4OmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe3c9ITA7YnJlYWt9eT10aGlzLnN0YWNrLnBvcCgpO2NvbnN0IEM9dGhpcy5zdGFjay5wb3AoKTtpZigwPT09eSYmMz09PUMpe2NvbnN0IGU9dGhpcy5zdGFjay5zcGxpY2UoLTE3LDE3KTt0aGlzLnN0YWNrLnB1c2goZVsyXStlWzBdLGVbM10rZVsxXSxlWzRdLGVbNV0sZVs2XSxlWzddLGVbOF0sZVs5XSxlWzEwXSxlWzExXSxlWzEyXSxlWzEzXSxlWzE0XSk7dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEzLGQsITApO3RoaXMuZmxleGluZz0hMTt0aGlzLnN0YWNrLnB1c2goZVsxNV0sZVsxNl0pfWVsc2UgMT09PXkmJjA9PT1DJiYodGhpcy5mbGV4aW5nPSEwKTticmVhaztjYXNlIDMwODk6YnJlYWs7ZGVmYXVsdDooMCxzLndhcm4pKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgIicrcisnIicpfWlmKHcpYnJlYWt9ZWxzZXtyPD0yNDY/ci09MTM5OnI9cjw9MjUwPzI1Niooci0yNDcpK2VbKytTXSsxMDg6cjw9MjU0Py0yNTYqKHItMjUxKS1lWysrU10tMTA4OigyNTUmZVsrK1NdKTw8MjR8KDI1NSZlWysrU10pPDwxNnwoMjU1JmVbKytTXSk8PDh8KDI1NSZlWysrU10pPDwwO3RoaXMuc3RhY2sucHVzaChyKX19cmV0dXJuIHd9ZXhlY3V0ZUNvbW1hbmQoZSx0LGEpe2NvbnN0IHI9dGhpcy5zdGFjay5sZW5ndGg7aWYoZT5yKXJldHVybiEwO2NvbnN0IGk9ci1lO2ZvcihsZXQgZT1pO2U8cjtlKyspe2xldCB0PXRoaXMuc3RhY2tbZV07aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl0aGlzLm91dHB1dC5wdXNoKDI4LHQ+PjgmMjU1LDI1NSZ0KTtlbHNle3Q9NjU1MzYqdHwwO3RoaXMub3V0cHV0LnB1c2goMjU1LHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQpfX10aGlzLm91dHB1dC5wdXNoKC4uLnQpO2E/dGhpcy5zdGFjay5zcGxpY2UoaSxlKTp0aGlzLnN0YWNrLmxlbmd0aD0wO3JldHVybiExfX1mdW5jdGlvbiBpc0hleERpZ2l0KGUpe3JldHVybiBlPj00OCYmZTw9NTd8fGU+PTY1JiZlPD03MHx8ZT49OTcmJmU8PTEwMn1mdW5jdGlvbiBkZWNyeXB0KGUsdCxhKXtpZihhPj1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bGV0IHIsaSxuPTB8dDtmb3Iocj0wO3I8YTtyKyspbj01Mjg0NSooZVtyXStuKSsyMjcxOSY2NTUzNTtjb25zdCBzPWUubGVuZ3RoLWEsbz1uZXcgVWludDhBcnJheShzKTtmb3Iocj1hLGk9MDtpPHM7cisrLGkrKyl7Y29uc3QgdD1lW3JdO29baV09dF5uPj44O249NTI4NDUqKHQrbikrMjI3MTkmNjU1MzV9cmV0dXJuIG99ZnVuY3Rpb24gaXNTcGVjaWFsKGUpe3JldHVybiA0Nz09PWV8fDkxPT09ZXx8OTM9PT1lfHwxMjM9PT1lfHwxMjU9PT1lfHw0MD09PWV8fDQxPT09ZX10LlR5cGUxUGFyc2VyPWNsYXNzIFR5cGUxUGFyc2Vye2NvbnN0cnVjdG9yKGUsdCxhKXtpZih0KXtjb25zdCB0PWUuZ2V0Qnl0ZXMoKSxhPSEoKGlzSGV4RGlnaXQodFswXSl8fCgwLGkuaXNXaGl0ZVNwYWNlKSh0WzBdKSkmJmlzSGV4RGlnaXQodFsxXSkmJmlzSGV4RGlnaXQodFsyXSkmJmlzSGV4RGlnaXQodFszXSkmJmlzSGV4RGlnaXQodFs0XSkmJmlzSGV4RGlnaXQodFs1XSkmJmlzSGV4RGlnaXQodFs2XSkmJmlzSGV4RGlnaXQodFs3XSkpO2U9bmV3IG4uU3RyZWFtKGE/ZGVjcnlwdCh0LDU1NjY1LDQpOmZ1bmN0aW9uIGRlY3J5cHRBc2NpaShlLHQsYSl7bGV0IHI9MHx0O2NvbnN0IGk9ZS5sZW5ndGgsbj1uZXcgVWludDhBcnJheShpPj4+MSk7bGV0IHMsbztmb3Iocz0wLG89MDtzPGk7cysrKXtjb25zdCB0PWVbc107aWYoIWlzSGV4RGlnaXQodCkpY29udGludWU7cysrO2xldCBhO2Zvcig7czxpJiYhaXNIZXhEaWdpdChhPWVbc10pOylzKys7aWYoczxpKXtjb25zdCBlPXBhcnNlSW50KFN0cmluZy5mcm9tQ2hhckNvZGUodCxhKSwxNik7bltvKytdPWVecj4+ODtyPTUyODQ1KihlK3IpKzIyNzE5JjY1NTM1fX1yZXR1cm4gbi5zbGljZShhLG8pfSh0LDU1NjY1LDQpKX10aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFhO3RoaXMuc3RyZWFtPWU7dGhpcy5uZXh0Q2hhcigpfXJlYWROdW1iZXJBcnJheSgpe3RoaXMuZ2V0VG9rZW4oKTtjb25zdCBlPVtdO2Zvcig7Oyl7Y29uc3QgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfXJlYWROdW1iZXIoKXtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gcGFyc2VGbG9hdChlfHwwKX1yZWFkSW50KCl7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIDB8cGFyc2VJbnQoZXx8MCwxMCl9cmVhZEJvb2xlYW4oKXtyZXR1cm4idHJ1ZSI9PT10aGlzLmdldFRva2VuKCk/MTowfW5leHRDaGFyKCl7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfXByZXZDaGFyKCl7dGhpcy5zdHJlYW0uc2tpcCgtMik7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfWdldFRva2VuKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYoLTE9PT10KXJldHVybiBudWxsO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoISgwLGkuaXNXaGl0ZVNwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1pZihpc1NwZWNpYWwodCkpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0KX1sZXQgYT0iIjtkb3thKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO3Q9dGhpcy5uZXh0Q2hhcigpfXdoaWxlKHQ+PTAmJiEoMCxpLmlzV2hpdGVTcGFjZSkodCkmJiFpc1NwZWNpYWwodCkpO3JldHVybiBhfXJlYWRDaGFyU3RyaW5ncyhlLHQpe3JldHVybi0xPT09dD9lOmRlY3J5cHQoZSw0MzMwLHQpfWV4dHJhY3RGb250UHJvZ3JhbShlKXtjb25zdCB0PXRoaXMuc3RyZWFtLGE9W10scj1bXSxpPU9iamVjdC5jcmVhdGUobnVsbCk7aS5sZW5JVj00O2NvbnN0IG49e3N1YnJzOltdLGNoYXJzdHJpbmdzOltdLHByb3BlcnRpZXM6e3ByaXZhdGVEYXRhOml9fTtsZXQgcyxvLGMsbDtmb3IoO251bGwhPT0ocz10aGlzLmdldFRva2VuKCkpOylpZigiLyI9PT1zKXtzPXRoaXMuZ2V0VG9rZW4oKTtzd2l0Y2gocyl7Y2FzZSJDaGFyU3RyaW5ncyI6dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO2Zvcig7Oyl7cz10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXN8fCJlbmQiPT09cylicmVhaztpZigiLyIhPT1zKWNvbnRpbnVlO2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO289dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2M9bz4wP3QuZ2V0Qnl0ZXMobyk6bmV3IFVpbnQ4QXJyYXkoMCk7bD1uLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7Y29uc3QgYT10aGlzLnJlYWRDaGFyU3RyaW5ncyhjLGwpO3RoaXMubmV4dENoYXIoKTtzPXRoaXMuZ2V0VG9rZW4oKTsibm9hY2Nlc3MiPT09cz90aGlzLmdldFRva2VuKCk6Ii8iPT09cyYmdGhpcy5wcmV2Q2hhcigpO3IucHVzaCh7Z2x5cGg6ZSxlbmNvZGVkOmF9KX1icmVhaztjYXNlIlN1YnJzIjp0aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Zm9yKDsiZHVwIj09PXRoaXMuZ2V0VG9rZW4oKTspe2NvbnN0IGU9dGhpcy5yZWFkSW50KCk7bz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Yz1vPjA/dC5nZXRCeXRlcyhvKTpuZXcgVWludDhBcnJheSgwKTtsPW4ucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtjb25zdCByPXRoaXMucmVhZENoYXJTdHJpbmdzKGMsbCk7dGhpcy5uZXh0Q2hhcigpO3M9dGhpcy5nZXRUb2tlbigpOyJub2FjY2VzcyI9PT1zJiZ0aGlzLmdldFRva2VuKCk7YVtlXT1yfWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOmNvbnN0IGU9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmxlbmd0aD4wJiZlLmxlbmd0aCwwO2JyZWFrO2Nhc2UiU3RlbVNuYXBIIjpjYXNlIlN0ZW1TbmFwViI6bi5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3NdPXRoaXMucmVhZE51bWJlckFycmF5KCk7YnJlYWs7Y2FzZSJTdGRIVyI6Y2FzZSJTdGRWVyI6bi5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3NdPXRoaXMucmVhZE51bWJlckFycmF5KClbMF07YnJlYWs7Y2FzZSJCbHVlU2hpZnQiOmNhc2UibGVuSVYiOmNhc2UiQmx1ZUZ1enoiOmNhc2UiQmx1ZVNjYWxlIjpjYXNlIkxhbmd1YWdlR3JvdXAiOm4ucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkV4cGFuc2lvbkZhY3RvciI6bi5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3NdPXRoaXMucmVhZE51bWJlcigpfHwuMDY7YnJlYWs7Y2FzZSJGb3JjZUJvbGQiOm4ucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWRCb29sZWFuKCl9fWZvcihjb25zdHtlbmNvZGVkOnQsZ2x5cGg6aX1vZiByKXtjb25zdCByPW5ldyBUeXBlMUNoYXJTdHJpbmcscz1yLmNvbnZlcnQodCxhLHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCk7bGV0IG89ci5vdXRwdXQ7cyYmKG89WzE0XSk7Y29uc3QgYz17Z2x5cGhOYW1lOmksY2hhcnN0cmluZzpvLHdpZHRoOnIud2lkdGgsbHNiOnIubHNiLHNlYWM6ci5zZWFjfTsiLm5vdGRlZiI9PT1pP24uY2hhcnN0cmluZ3MudW5zaGlmdChjKTpuLmNoYXJzdHJpbmdzLnB1c2goYyk7aWYoZS5idWlsdEluRW5jb2Rpbmcpe2NvbnN0IHQ9ZS5idWlsdEluRW5jb2RpbmcuaW5kZXhPZihpKTt0Pi0xJiZ2b2lkIDA9PT1lLndpZHRoc1t0XSYmdD49ZS5maXJzdENoYXImJnQ8PWUubGFzdENoYXImJihlLndpZHRoc1t0XT1yLndpZHRoKX19cmV0dXJuIG59ZXh0cmFjdEZvbnRIZWFkZXIoZSl7bGV0IHQ7Zm9yKDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dCl7dD10aGlzLmdldFRva2VuKCk7c3dpdGNoKHQpe2Nhc2UiRm9udE1hdHJpeCI6Y29uc3QgYT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UuZm9udE1hdHJpeD1hO2JyZWFrO2Nhc2UiRW5jb2RpbmciOmNvbnN0IGk9dGhpcy5nZXRUb2tlbigpO2xldCBuO2lmKC9eXGQrJC8udGVzdChpKSl7bj1bXTtjb25zdCBlPTB8cGFyc2VJbnQoaSwxMCk7dGhpcy5nZXRUb2tlbigpO2ZvcihsZXQgYT0wO2E8ZTthKyspe3Q9dGhpcy5nZXRUb2tlbigpO2Zvcig7ImR1cCIhPT10JiYiZGVmIiE9PXQ7KXt0PXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09dClyZXR1cm59aWYoImRlZiI9PT10KWJyZWFrO2NvbnN0IGU9dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2NvbnN0IGE9dGhpcy5nZXRUb2tlbigpO25bZV09YTt0aGlzLmdldFRva2VuKCl9fWVsc2Ugbj0oMCxyLmdldEVuY29kaW5nKShpKTtlLmJ1aWx0SW5FbmNvZGluZz1uO2JyZWFrO2Nhc2UiRm9udEJCb3giOmNvbnN0IHM9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmFzY2VudD1NYXRoLm1heChzWzNdLHNbMV0pO2UuZGVzY2VudD1NYXRoLm1pbihzWzFdLHNbM10pO2UuYXNjZW50U2NhbGVkPSEwfX19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhdHRlcm49dm9pZCAwO3QuZ2V0VGlsaW5nUGF0dGVybklSPWZ1bmN0aW9uIGdldFRpbGluZ1BhdHRlcm5JUihlLHQsYSl7Y29uc3QgaT10LmdldEFycmF5KCJNYXRyaXgiKSxuPXIuVXRpbC5ub3JtYWxpemVSZWN0KHQuZ2V0QXJyYXkoIkJCb3giKSkscz10LmdldCgiWFN0ZXAiKSxvPXQuZ2V0KCJZU3RlcCIpLGM9dC5nZXQoIlBhaW50VHlwZSIpLGw9dC5nZXQoIlRpbGluZ1R5cGUiKTtpZihuWzJdLW5bMF09PTB8fG5bM10tblsxXT09MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL0JCb3ggYXJyYXk6IFske259XS5gKTtyZXR1cm5bIlRpbGluZ1BhdHRlcm4iLGEsZSxpLG4scyxvLGMsbF19O3ZhciByPWEoMiksaT1hKDUpLG49YSgxMikscz1hKDMpO2NvbnN0IG89MixjPTMsbD00LGg9NSx1PTYsZD03O3QuUGF0dGVybj1jbGFzcyBQYXR0ZXJue2NvbnN0cnVjdG9yKCl7KDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIFBhdHRlcm4uIil9c3RhdGljIHBhcnNlU2hhZGluZyhlLHQsYSxuLGYpe2NvbnN0IGc9ZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9lLmRpY3Q6ZSxwPWcuZ2V0KCJTaGFkaW5nVHlwZSIpO3RyeXtzd2l0Y2gocCl7Y2FzZSBvOmNhc2UgYzpyZXR1cm4gbmV3IFJhZGlhbEF4aWFsU2hhZGluZyhnLHQsYSxuLGYpO2Nhc2UgbDpjYXNlIGg6Y2FzZSB1OmNhc2UgZDpyZXR1cm4gbmV3IE1lc2hTaGFkaW5nKGUsdCxhLG4sZik7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgU2hhZGluZ1R5cGU6ICIrcCl9fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShlKTtyZXR1cm4gbmV3IER1bW15U2hhZGluZ319fTtjbGFzcyBCYXNlU2hhZGluZ3tzdGF0aWMgU01BTExfTlVNQkVSPTFlLTY7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZVNoYWRpbmcmJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1nZXRJUigpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldElSYCBjYWxsZWQuIil9fWNsYXNzIFJhZGlhbEF4aWFsU2hhZGluZyBleHRlbmRzIEJhc2VTaGFkaW5ne2NvbnN0cnVjdG9yKGUsdCxhLGkscyl7c3VwZXIoKTt0aGlzLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKTt0aGlzLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IG89bi5Db2xvclNwYWNlLnBhcnNlKHtjczplLmdldFJhdygiQ1MiKXx8ZS5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOnQscmVzb3VyY2VzOmEscGRmRnVuY3Rpb25GYWN0b3J5OmksbG9jYWxDb2xvclNwYWNlQ2FjaGU6c30pLGw9ZS5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkobCkmJjQ9PT1sLmxlbmd0aD90aGlzLmJib3g9ci5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6dGhpcy5iYm94PW51bGw7bGV0IGg9MCx1PTE7aWYoZS5oYXMoIkRvbWFpbiIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2g9dFswXTt1PXRbMV19bGV0IGQ9ITEsZj0hMTtpZihlLmhhcygiRXh0ZW5kIikpe2NvbnN0IHQ9ZS5nZXRBcnJheSgiRXh0ZW5kIik7ZD10WzBdO2Y9dFsxXX1pZighKHRoaXMuc2hhZGluZ1R5cGUhPT1jfHxkJiZmKSl7Y29uc3RbZSx0LGEsaSxuLHNdPXRoaXMuY29vcmRzQXJyLG89TWF0aC5oeXBvdChlLWksdC1uKTthPD1zK28mJnM8PWErbyYmKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgcmFkaWFsIGdyYWRpZW50LiIpfXRoaXMuZXh0ZW5kU3RhcnQ9ZDt0aGlzLmV4dGVuZEVuZD1mO2NvbnN0IGc9ZS5nZXRSYXcoIkZ1bmN0aW9uIikscD1pLmNyZWF0ZUZyb21BcnJheShnKSxtPSh1LWgpLzg0MCxiPXRoaXMuY29sb3JTdG9wcz1bXTtpZihoPj11fHxtPD0wKXsoMCxyLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIik7cmV0dXJufWNvbnN0IHk9bmV3IEZsb2F0MzJBcnJheShvLm51bUNvbXBzKSx3PW5ldyBGbG9hdDMyQXJyYXkoMSk7bGV0IFMseD0wO3dbMF09aDtwKHcsMCx5LDApO2xldCBDPW8uZ2V0UmdiKHksMCk7Y29uc3Qgaz1yLlV0aWwubWFrZUhleENvbG9yKENbMF0sQ1sxXSxDWzJdKTtiLnB1c2goWzAsa10pO2xldCB2PTE7d1swXT1oK207cCh3LDAseSwwKTtsZXQgRj1vLmdldFJnYih5LDApLE89RlswXS1DWzBdKzEsVD1GWzFdLUNbMV0rMSxNPUZbMl0tQ1syXSsxLEU9RlswXS1DWzBdLTEsRD1GWzFdLUNbMV0tMSxOPUZbMl0tQ1syXS0xO2ZvcihsZXQgZT0yO2U8ODQwO2UrKyl7d1swXT1oK2UqbTtwKHcsMCx5LDApO1M9by5nZXRSZ2IoeSwwKTtjb25zdCB0PWUteDtPPU1hdGgubWluKE8sKFNbMF0tQ1swXSsxKS90KTtUPU1hdGgubWluKFQsKFNbMV0tQ1sxXSsxKS90KTtNPU1hdGgubWluKE0sKFNbMl0tQ1syXSsxKS90KTtFPU1hdGgubWF4KEUsKFNbMF0tQ1swXS0xKS90KTtEPU1hdGgubWF4KEQsKFNbMV0tQ1sxXS0xKS90KTtOPU1hdGgubWF4KE4sKFNbMl0tQ1syXS0xKS90KTtpZighKEU8PU8mJkQ8PVQmJk48PU0pKXtjb25zdCBlPXIuVXRpbC5tYWtlSGV4Q29sb3IoRlswXSxGWzFdLEZbMl0pO2IucHVzaChbdi84NDAsZV0pO089U1swXS1GWzBdKzE7VD1TWzFdLUZbMV0rMTtNPVNbMl0tRlsyXSsxO0U9U1swXS1GWzBdLTE7RD1TWzFdLUZbMV0tMTtOPVNbMl0tRlsyXS0xO3g9djtDPUZ9dj1lO0Y9U31jb25zdCBSPXIuVXRpbC5tYWtlSGV4Q29sb3IoRlswXSxGWzFdLEZbMl0pO2IucHVzaChbMSxSXSk7bGV0IEw9InRyYW5zcGFyZW50IjtpZihlLmhhcygiQmFja2dyb3VuZCIpKXtTPW8uZ2V0UmdiKGUuZ2V0KCJCYWNrZ3JvdW5kIiksMCk7TD1yLlV0aWwubWFrZUhleENvbG9yKFNbMF0sU1sxXSxTWzJdKX1pZighZCl7Yi51bnNoaWZ0KFswLExdKTtiWzFdWzBdKz1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVJ9aWYoIWYpe2IuYXQoLTEpWzBdLT1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7Yi5wdXNoKFsxLExdKX10aGlzLmNvbG9yU3RvcHM9Yn1nZXRJUigpe2NvbnN0IGU9dGhpcy5jb29yZHNBcnIsdD10aGlzLnNoYWRpbmdUeXBlO2xldCBhLGksbixzLGw7aWYodD09PW8pe2k9W2VbMF0sZVsxXV07bj1bZVsyXSxlWzNdXTtzPW51bGw7bD1udWxsO2E9ImF4aWFsIn1lbHNlIGlmKHQ9PT1jKXtpPVtlWzBdLGVbMV1dO249W2VbM10sZVs0XV07cz1lWzJdO2w9ZVs1XTthPSJyYWRpYWwifWVsc2UoMCxyLnVucmVhY2hhYmxlKShgZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICR7dH1gKTtyZXR1cm5bIlJhZGlhbEF4aWFsIixhLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsaSxuLHMsbF19fWNsYXNzIE1lc2hTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0cmVhbT1lO3RoaXMuY29udGV4dD10O3RoaXMuYnVmZmVyPTA7dGhpcy5idWZmZXJMZW5ndGg9MDtjb25zdCBhPXQubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KGEpO2NvbnN0IHI9dC5jb2xvclNwYWNlLm51bUNvbXBzO3RoaXMudG1wQ3NDb21wc0J1Zj10LmNvbG9yRm4/bmV3IEZsb2F0MzJBcnJheShyKTp0aGlzLnRtcENvbXBzQnVmfWdldCBoYXNEYXRhKCl7aWYodGhpcy5zdHJlYW0uZW5kKXJldHVybiB0aGlzLnN0cmVhbS5wb3M8dGhpcy5zdHJlYW0uZW5kO2lmKHRoaXMuYnVmZmVyTGVuZ3RoPjApcmV0dXJuITA7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7aWYoZTwwKXJldHVybiExO3RoaXMuYnVmZmVyPWU7dGhpcy5idWZmZXJMZW5ndGg9ODtyZXR1cm4hMH1yZWFkQml0cyhlKXtsZXQgdD10aGlzLmJ1ZmZlcixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDMyPT09ZSl7aWYoMD09PWEpcmV0dXJuKHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpKT4+PjA7dD10PDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7dGhpcy5idWZmZXI9ZSYoMTw8YSktMTtyZXR1cm4odDw8OC1hfCgyNTUmZSk+PmEpPj4+MH1pZig4PT09ZSYmMD09PWEpcmV0dXJuIHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtmb3IoO2E8ZTspe3Q9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7YSs9OH1hLT1lO3RoaXMuYnVmZmVyTGVuZ3RoPWE7dGhpcy5idWZmZXI9dCYoMTw8YSktMTtyZXR1cm4gdD4+YX1hbGlnbigpe3RoaXMuYnVmZmVyPTA7dGhpcy5idWZmZXJMZW5ndGg9MH1yZWFkRmxhZygpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9cmVhZENvb3JkaW5hdGUoKXtjb25zdCBlPXRoaXMuY29udGV4dC5iaXRzUGVyQ29vcmRpbmF0ZSx0PXRoaXMucmVhZEJpdHMoZSksYT10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5jb250ZXh0LmRlY29kZSxpPWU8MzI/MS8oKDE8PGUpLTEpOjIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7cmV0dXJuW3QqaSooclsxXS1yWzBdKStyWzBdLGEqaSooclszXS1yWzJdKStyWzJdXX1yZWFkQ29tcG9uZW50cygpe2NvbnN0IGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQsYT10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLHI9dGhpcy5jb250ZXh0LmRlY29kZSxpPXRoaXMudG1wQ29tcHNCdWY7Zm9yKGxldCBuPTAscz00O248ZTtuKysscys9Mil7Y29uc3QgZT10aGlzLnJlYWRCaXRzKHQpO2lbbl09ZSphKihyW3MrMV0tcltzXSkrcltzXX1jb25zdCBuPXRoaXMudG1wQ3NDb21wc0J1Zjt0aGlzLmNvbnRleHQuY29sb3JGbiYmdGhpcy5jb250ZXh0LmNvbG9yRm4oaSwwLG4sMCk7cmV0dXJuIHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihuLDApfX1jb25zdCBmPWZ1bmN0aW9uIGdldEJDbG9zdXJlKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZVt0XXx8PWZ1bmN0aW9uIGJ1aWxkQihlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wO2E8PWU7YSsrKXtjb25zdCByPWEvZSxpPTEtcjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbaSppKmksMypyKmkqaSwzKnIqcippLHIqcipyXSkpfXJldHVybiB0fSh0KX19KCk7Y2xhc3MgTWVzaFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tzdGF0aWMgTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MztzdGF0aWMgTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MjA7c3RhdGljIFRSSUFOR0xFX0RFTlNJVFk9MjA7Y29uc3RydWN0b3IoZSx0LGEscyxvKXtzdXBlcigpO2lmKCEoZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTtjb25zdCBjPWUuZGljdDt0aGlzLnNoYWRpbmdUeXBlPWMuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IGY9Yy5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoZikmJjQ9PT1mLmxlbmd0aD90aGlzLmJib3g9ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZik6dGhpcy5iYm94PW51bGw7Y29uc3QgZz1uLkNvbG9yU3BhY2UucGFyc2Uoe2NzOmMuZ2V0UmF3KCJDUyIpfHxjLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6cyxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSk7dGhpcy5iYWNrZ3JvdW5kPWMuaGFzKCJCYWNrZ3JvdW5kIik/Zy5nZXRSZ2IoYy5nZXQoIkJhY2tncm91bmQiKSwwKTpudWxsO2NvbnN0IHA9Yy5nZXRSYXcoIkZ1bmN0aW9uIiksbT1wP3MuY3JlYXRlRnJvbUFycmF5KHApOm51bGw7dGhpcy5jb29yZHM9W107dGhpcy5jb2xvcnM9W107dGhpcy5maWd1cmVzPVtdO2NvbnN0IGI9e2JpdHNQZXJDb29yZGluYXRlOmMuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Yy5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpjLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Yy5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjptLGNvbG9yU3BhY2U6ZyxudW1Db21wczptPzE6Zy5udW1Db21wc30seT1uZXcgTWVzaFN0cmVhbVJlYWRlcihlLGIpO2xldCB3PSExO3N3aXRjaCh0aGlzLnNoYWRpbmdUeXBlKXtjYXNlIGw6dGhpcy5fZGVjb2RlVHlwZTRTaGFkaW5nKHkpO2JyZWFrO2Nhc2UgaDpjb25zdCBlPTB8Yy5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYoZTwyKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7dGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHksZSk7YnJlYWs7Y2FzZSB1OnRoaXMuX2RlY29kZVR5cGU2U2hhZGluZyh5KTt3PSEwO2JyZWFrO2Nhc2UgZDp0aGlzLl9kZWNvZGVUeXBlN1NoYWRpbmcoeSk7dz0hMDticmVhaztkZWZhdWx0OigwLHIudW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYodyl7dGhpcy5fdXBkYXRlQm91bmRzKCk7Zm9yKGxldCBlPTAsdD10aGlzLmZpZ3VyZXMubGVuZ3RoO2U8dDtlKyspdGhpcy5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goZSl9dGhpcy5fdXBkYXRlQm91bmRzKCk7dGhpcy5fcGFja0RhdGEoKX1fZGVjb2RlVHlwZTRTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxpPVtdLG49W107bGV0IHM9MDtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IG89ZS5yZWFkRmxhZygpLGM9ZS5yZWFkQ29vcmRpbmF0ZSgpLGw9ZS5yZWFkQ29tcG9uZW50cygpO2lmKDA9PT1zKXtpZighKDA8PW8mJm88PTIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gobyl7Y2FzZSAwOnM9MzticmVhaztjYXNlIDE6bi5wdXNoKG4uYXQoLTIpLG4uYXQoLTEpKTtzPTE7YnJlYWs7Y2FzZSAyOm4ucHVzaChuLmF0KC0zKSxuLmF0KC0xKSk7cz0xfWkucHVzaChvKX1uLnB1c2godC5sZW5ndGgpO3QucHVzaChjKTthLnB1c2gobCk7cy0tO2UuYWxpZ24oKX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToidHJpYW5nbGVzIixjb29yZHM6bmV3IEludDMyQXJyYXkobiksY29sb3JzOm5ldyBJbnQzMkFycmF5KG4pfSl9X2RlY29kZVR5cGU1U2hhZGluZyhlLHQpe2NvbnN0IGE9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxpPVtdO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3QgdD1lLnJlYWRDb29yZGluYXRlKCksbj1lLnJlYWRDb21wb25lbnRzKCk7aS5wdXNoKGEubGVuZ3RoKTthLnB1c2godCk7ci5wdXNoKG4pfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJsYXR0aWNlIixjb29yZHM6bmV3IEludDMyQXJyYXkoaSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpLHZlcnRpY2VzUGVyUm93OnR9KX1fZGVjb2RlVHlwZTZTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxpPW5ldyBJbnQzMkFycmF5KDE2KSxuPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCk7aWYoISgwPD1zJiZzPD0zKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Y29uc3Qgbz10Lmxlbmd0aDtmb3IobGV0IGE9MCxyPTAhPT1zPzg6MTI7YTxyO2ErKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtjb25zdCBjPWEubGVuZ3RoO2ZvcihsZXQgdD0wLHI9MCE9PXM/Mjo0O3Q8cjt0KyspYS5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7bGV0IGwsaCx1LGQ7c3dpdGNoKHMpe2Nhc2UgMDppWzEyXT1vKzM7aVsxM109bys0O2lbMTRdPW8rNTtpWzE1XT1vKzY7aVs4XT1vKzI7aVsxMV09bys3O2lbNF09bysxO2lbN109bys4O2lbMF09bztpWzFdPW8rMTE7aVsyXT1vKzEwO2lbM109bys5O25bMl09YysxO25bM109YysyO25bMF09YztuWzFdPWMrMzticmVhaztjYXNlIDE6bD1pWzEyXTtoPWlbMTNdO3U9aVsxNF07ZD1pWzE1XTtpWzEyXT1kO2lbMTNdPW8rMDtpWzE0XT1vKzE7aVsxNV09bysyO2lbOF09dTtpWzExXT1vKzM7aVs0XT1oO2lbN109bys0O2lbMF09bDtpWzFdPW8rNztpWzJdPW8rNjtpWzNdPW8rNTtsPW5bMl07aD1uWzNdO25bMl09aDtuWzNdPWM7blswXT1sO25bMV09YysxO2JyZWFrO2Nhc2UgMjpsPWlbMTVdO2g9aVsxMV07aVsxMl09aVszXTtpWzEzXT1vKzA7aVsxNF09bysxO2lbMTVdPW8rMjtpWzhdPWlbN107aVsxMV09byszO2lbNF09aDtpWzddPW8rNDtpWzBdPWw7aVsxXT1vKzc7aVsyXT1vKzY7aVszXT1vKzU7bD1uWzNdO25bMl09blsxXTtuWzNdPWM7blswXT1sO25bMV09YysxO2JyZWFrO2Nhc2UgMzppWzEyXT1pWzBdO2lbMTNdPW8rMDtpWzE0XT1vKzE7aVsxNV09bysyO2lbOF09aVsxXTtpWzExXT1vKzM7aVs0XT1pWzJdO2lbN109bys0O2lbMF09aVszXTtpWzFdPW8rNztpWzJdPW8rNjtpWzNdPW8rNTtuWzJdPW5bMF07blszXT1jO25bMF09blsxXTtuWzFdPWMrMX1pWzVdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbaVswXV1bMF0tdFtpWzE1XV1bMF0rNioodFtpWzRdXVswXSt0W2lbMV1dWzBdKS0yKih0W2lbMTJdXVswXSt0W2lbM11dWzBdKSszKih0W2lbMTNdXVswXSt0W2lbN11dWzBdKSkvOSwoLTQqdFtpWzBdXVsxXS10W2lbMTVdXVsxXSs2Kih0W2lbNF1dWzFdK3RbaVsxXV1bMV0pLTIqKHRbaVsxMl1dWzFdK3RbaVszXV1bMV0pKzMqKHRbaVsxM11dWzFdK3RbaVs3XV1bMV0pKS85XSk7aVs2XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W2lbM11dWzBdLXRbaVsxMl1dWzBdKzYqKHRbaVsyXV1bMF0rdFtpWzddXVswXSktMioodFtpWzBdXVswXSt0W2lbMTVdXVswXSkrMyoodFtpWzRdXVswXSt0W2lbMTRdXVswXSkpLzksKC00KnRbaVszXV1bMV0tdFtpWzEyXV1bMV0rNioodFtpWzJdXVsxXSt0W2lbN11dWzFdKS0yKih0W2lbMF1dWzFdK3RbaVsxNV1dWzFdKSszKih0W2lbNF1dWzFdK3RbaVsxNF1dWzFdKSkvOV0pO2lbOV09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtpWzEyXV1bMF0tdFtpWzNdXVswXSs2Kih0W2lbOF1dWzBdK3RbaVsxM11dWzBdKS0yKih0W2lbMF1dWzBdK3RbaVsxNV1dWzBdKSszKih0W2lbMTFdXVswXSt0W2lbMV1dWzBdKSkvOSwoLTQqdFtpWzEyXV1bMV0tdFtpWzNdXVsxXSs2Kih0W2lbOF1dWzFdK3RbaVsxM11dWzFdKS0yKih0W2lbMF1dWzFdK3RbaVsxNV1dWzFdKSszKih0W2lbMTFdXVsxXSt0W2lbMV1dWzFdKSkvOV0pO2lbMTBdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbaVsxNV1dWzBdLXRbaVswXV1bMF0rNioodFtpWzExXV1bMF0rdFtpWzE0XV1bMF0pLTIqKHRbaVsxMl1dWzBdK3RbaVszXV1bMF0pKzMqKHRbaVsyXV1bMF0rdFtpWzhdXVswXSkpLzksKC00KnRbaVsxNV1dWzFdLXRbaVswXV1bMV0rNioodFtpWzExXV1bMV0rdFtpWzE0XV1bMV0pLTIqKHRbaVsxMl1dWzFdK3RbaVszXV1bMV0pKzMqKHRbaVsyXV1bMV0rdFtpWzhdXVsxXSkpLzldKTt0aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobil9KX19X2RlY29kZVR5cGU3U2hhZGluZyhlKXtjb25zdCB0PXRoaXMuY29vcmRzLGE9dGhpcy5jb2xvcnMsaT1uZXcgSW50MzJBcnJheSgxNiksbj1uZXcgSW50MzJBcnJheSg0KTtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IHM9ZS5yZWFkRmxhZygpO2lmKCEoMDw9cyYmczw9MykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTcgZmxhZyIpO2NvbnN0IG89dC5sZW5ndGg7Zm9yKGxldCBhPTAscj0wIT09cz8xMjoxNjthPHI7YSsrKXQucHVzaChlLnJlYWRDb29yZGluYXRlKCkpO2NvbnN0IGM9YS5sZW5ndGg7Zm9yKGxldCB0PTAscj0wIT09cz8yOjQ7dDxyO3QrKylhLnB1c2goZS5yZWFkQ29tcG9uZW50cygpKTtsZXQgbCxoLHUsZDtzd2l0Y2gocyl7Y2FzZSAwOmlbMTJdPW8rMztpWzEzXT1vKzQ7aVsxNF09bys1O2lbMTVdPW8rNjtpWzhdPW8rMjtpWzldPW8rMTM7aVsxMF09bysxNDtpWzExXT1vKzc7aVs0XT1vKzE7aVs1XT1vKzEyO2lbNl09bysxNTtpWzddPW8rODtpWzBdPW87aVsxXT1vKzExO2lbMl09bysxMDtpWzNdPW8rOTtuWzJdPWMrMTtuWzNdPWMrMjtuWzBdPWM7blsxXT1jKzM7YnJlYWs7Y2FzZSAxOmw9aVsxMl07aD1pWzEzXTt1PWlbMTRdO2Q9aVsxNV07aVsxMl09ZDtpWzEzXT1vKzA7aVsxNF09bysxO2lbMTVdPW8rMjtpWzhdPXU7aVs5XT1vKzk7aVsxMF09bysxMDtpWzExXT1vKzM7aVs0XT1oO2lbNV09bys4O2lbNl09bysxMTtpWzddPW8rNDtpWzBdPWw7aVsxXT1vKzc7aVsyXT1vKzY7aVszXT1vKzU7bD1uWzJdO2g9blszXTtuWzJdPWg7blszXT1jO25bMF09bDtuWzFdPWMrMTticmVhaztjYXNlIDI6bD1pWzE1XTtoPWlbMTFdO2lbMTJdPWlbM107aVsxM109byswO2lbMTRdPW8rMTtpWzE1XT1vKzI7aVs4XT1pWzddO2lbOV09bys5O2lbMTBdPW8rMTA7aVsxMV09byszO2lbNF09aDtpWzVdPW8rODtpWzZdPW8rMTE7aVs3XT1vKzQ7aVswXT1sO2lbMV09bys3O2lbMl09bys2O2lbM109bys1O2w9blszXTtuWzJdPW5bMV07blszXT1jO25bMF09bDtuWzFdPWMrMTticmVhaztjYXNlIDM6aVsxMl09aVswXTtpWzEzXT1vKzA7aVsxNF09bysxO2lbMTVdPW8rMjtpWzhdPWlbMV07aVs5XT1vKzk7aVsxMF09bysxMDtpWzExXT1vKzM7aVs0XT1pWzJdO2lbNV09bys4O2lbNl09bysxMTtpWzddPW8rNDtpWzBdPWlbM107aVsxXT1vKzc7aVsyXT1vKzY7aVszXT1vKzU7blsyXT1uWzBdO25bM109YztuWzBdPW5bMV07blsxXT1jKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoaSksY29sb3JzOm5ldyBJbnQzMkFycmF5KG4pfSl9fV9idWlsZEZpZ3VyZUZyb21QYXRjaChlKXtjb25zdCB0PXRoaXMuZmlndXJlc1tlXTsoMCxyLmFzc2VydCkoInBhdGNoIj09PXQudHlwZSwiVW5leHBlY3RlZCBwYXRjaCBtZXNoIGZpZ3VyZSIpO2NvbnN0IGE9dGhpcy5jb29yZHMsaT10aGlzLmNvbG9ycyxuPXQuY29vcmRzLHM9dC5jb2xvcnMsbz1NYXRoLm1pbihhW25bMF1dWzBdLGFbblszXV1bMF0sYVtuWzEyXV1bMF0sYVtuWzE1XV1bMF0pLGM9TWF0aC5taW4oYVtuWzBdXVsxXSxhW25bM11dWzFdLGFbblsxMl1dWzFdLGFbblsxNV1dWzFdKSxsPU1hdGgubWF4KGFbblswXV1bMF0sYVtuWzNdXVswXSxhW25bMTJdXVswXSxhW25bMTVdXVswXSksaD1NYXRoLm1heChhW25bMF1dWzFdLGFbblszXV1bMV0sYVtuWzEyXV1bMV0sYVtuWzE1XV1bMV0pO2xldCB1PU1hdGguY2VpbCgobC1vKSpNZXNoU2hhZGluZy5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO3U9TWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsdSkpO2xldCBkPU1hdGguY2VpbCgoaC1jKSpNZXNoU2hhZGluZy5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsZCkpO2NvbnN0IGc9dSsxLHA9bmV3IEludDMyQXJyYXkoKGQrMSkqZyksbT1uZXcgSW50MzJBcnJheSgoZCsxKSpnKTtsZXQgYj0wO2NvbnN0IHk9bmV3IFVpbnQ4QXJyYXkoMyksdz1uZXcgVWludDhBcnJheSgzKSxTPWlbc1swXV0seD1pW3NbMV1dLEM9aVtzWzJdXSxrPWlbc1szXV0sdj1mKGQpLEY9Zih1KTtmb3IobGV0IGU9MDtlPD1kO2UrKyl7eVswXT0oU1swXSooZC1lKStDWzBdKmUpL2R8MDt5WzFdPShTWzFdKihkLWUpK0NbMV0qZSkvZHwwO3lbMl09KFNbMl0qKGQtZSkrQ1syXSplKS9kfDA7d1swXT0oeFswXSooZC1lKStrWzBdKmUpL2R8MDt3WzFdPSh4WzFdKihkLWUpK2tbMV0qZSkvZHwwO3dbMl09KHhbMl0qKGQtZSkra1syXSplKS9kfDA7Zm9yKGxldCB0PTA7dDw9dTt0KyssYisrKXtpZighKDAhPT1lJiZlIT09ZHx8MCE9PXQmJnQhPT11KSljb250aW51ZTtsZXQgcj0wLHM9MCxvPTA7Zm9yKGxldCBpPTA7aTw9MztpKyspZm9yKGxldCBjPTA7Yzw9MztjKyssbysrKXtjb25zdCBsPXZbZV1baV0qRlt0XVtjXTtyKz1hW25bb11dWzBdKmw7cys9YVtuW29dXVsxXSpsfXBbYl09YS5sZW5ndGg7YS5wdXNoKFtyLHNdKTttW2JdPWkubGVuZ3RoO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoMyk7Y1swXT0oeVswXSoodS10KSt3WzBdKnQpL3V8MDtjWzFdPSh5WzFdKih1LXQpK3dbMV0qdCkvdXwwO2NbMl09KHlbMl0qKHUtdCkrd1syXSp0KS91fDA7aS5wdXNoKGMpfX1wWzBdPW5bMF07bVswXT1zWzBdO3BbdV09blszXTttW3VdPXNbMV07cFtnKmRdPW5bMTJdO21bZypkXT1zWzJdO3BbZypkK3VdPW5bMTVdO21bZypkK3VdPXNbM107dGhpcy5maWd1cmVzW2VdPXt0eXBlOiJsYXR0aWNlIixjb29yZHM6cCxjb2xvcnM6bSx2ZXJ0aWNlc1BlclJvdzpnfX1fdXBkYXRlQm91bmRzKCl7bGV0IGU9dGhpcy5jb29yZHNbMF1bMF0sdD10aGlzLmNvb3Jkc1swXVsxXSxhPWUscj10O2ZvcihsZXQgaT0xLG49dGhpcy5jb29yZHMubGVuZ3RoO2k8bjtpKyspe2NvbnN0IG49dGhpcy5jb29yZHNbaV1bMF0scz10aGlzLmNvb3Jkc1tpXVsxXTtlPWU+bj9uOmU7dD10PnM/czp0O2E9YTxuP246YTtyPXI8cz9zOnJ9dGhpcy5ib3VuZHM9W2UsdCxhLHJdfV9wYWNrRGF0YSgpe2xldCBlLHQsYSxyO2NvbnN0IGk9dGhpcy5jb29yZHMsbj1uZXcgRmxvYXQzMkFycmF5KDIqaS5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9aS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1pW2VdO25bYSsrXT10WzBdO25bYSsrXT10WzFdfXRoaXMuY29vcmRzPW47Y29uc3Qgcz10aGlzLmNvbG9ycyxvPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1zW2VdO29bYSsrXT10WzBdO29bYSsrXT10WzFdO29bYSsrXT10WzJdfXRoaXMuY29sb3JzPW87Y29uc3QgYz10aGlzLmZpZ3VyZXM7Zm9yKGU9MCx0PWMubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9Y1tlXSxpPXQuY29vcmRzLG49dC5jb2xvcnM7Zm9yKGE9MCxyPWkubGVuZ3RoO2E8cjthKyspe2lbYV0qPTI7blthXSo9M319fWdldElSKCl7cmV0dXJuWyJNZXNoIix0aGlzLnNoYWRpbmdUeXBlLHRoaXMuY29vcmRzLHRoaXMuY29sb3JzLHRoaXMuZmlndXJlcyx0aGlzLmJvdW5kcyx0aGlzLmJib3gsdGhpcy5iYWNrZ3JvdW5kXX19Y2xhc3MgRHVtbXlTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7Z2V0SVIoKXtyZXR1cm5bIkR1bW15Il19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmdldFhmYUZvbnREaWN0PWZ1bmN0aW9uIGdldFhmYUZvbnREaWN0KGUpe2NvbnN0IHQ9ZnVuY3Rpb24gZ2V0WGZhRm9udFdpZHRocyhlKXtjb25zdCB0PWdldFhmYUZvbnROYW1lKGUpO2lmKCF0KXJldHVybiBudWxsO2NvbnN0e2Jhc2VXaWR0aHM6YSxiYXNlTWFwcGluZzpyLGZhY3RvcnM6aX09dDtsZXQgbjtuPWk/YS5tYXAoKChlLHQpPT5lKmlbdF0pKTphO2xldCBzLG89LTI7Y29uc3QgYz1bXTtmb3IoY29uc3RbZSx0XW9mIHIubWFwKCgoZSx0KT0+W2UsdF0pKS5zb3J0KCgoW2VdLFt0XSk9PmUtdCkpKWlmKC0xIT09ZSlpZihlPT09bysxKXtzLnB1c2goblt0XSk7bys9MX1lbHNle289ZTtzPVtuW3RdXTtjLnB1c2goZSxzKX1yZXR1cm4gY30oZSksYT1uZXcgaS5EaWN0KG51bGwpO2Euc2V0KCJCYXNlRm9udCIsaS5OYW1lLmdldChlKSk7YS5zZXQoIlR5cGUiLGkuTmFtZS5nZXQoIkZvbnQiKSk7YS5zZXQoIlN1YnR5cGUiLGkuTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKTthLnNldCgiRW5jb2RpbmciLGkuTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7YS5zZXQoIkNJRFRvR0lETWFwIixpLk5hbWUuZ2V0KCJJZGVudGl0eSIpKTthLnNldCgiVyIsdCk7YS5zZXQoIkZpcnN0Q2hhciIsdFswXSk7YS5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7Y29uc3Qgcj1uZXcgaS5EaWN0KG51bGwpO2Euc2V0KCJGb250RGVzY3JpcHRvciIscik7Y29uc3Qgbj1uZXcgaS5EaWN0KG51bGwpO24uc2V0KCJPcmRlcmluZyIsIklkZW50aXR5Iik7bi5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKTtuLnNldCgiU3VwcGxlbWVudCIsMCk7YS5zZXQoIkNJRFN5c3RlbUluZm8iLG4pO3JldHVybiBhfTt0LmdldFhmYUZvbnROYW1lPWdldFhmYUZvbnROYW1lO3ZhciByPWEoNTIpLGk9YSg0KSxuPWEoNTMpLHM9YSg1NCksbz1hKDU1KSxjPWEoNTYpLGw9YSgzKSxoPWEoMzgpO2NvbnN0IHU9KDAsbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJNeXJpYWRQcm8tUmVndWxhciJdPWVbIlBkZkpTLUZhbGxiYWNrLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpvLk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9SZWd1bGFyTWV0cmljc307ZVsiTXlyaWFkUHJvLUJvbGQiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6by5NeXJpYWRQcm9Cb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm8uTXlyaWFkUHJvQm9sZE1ldHJpY3N9O2VbIk15cmlhZFByby1JdCJdPWVbIk15cmlhZFByby1JdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOm8uTXlyaWFkUHJvSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpvLk15cmlhZFByb0l0YWxpY01ldHJpY3N9O2VbIk15cmlhZFByby1Cb2xkSXQiXT1lWyJNeXJpYWRQcm8tQm9sZEl0YWxpYyJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpvLk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljc307ZS5BcmlhbE1UPWUuQXJpYWw9ZVsiQXJpYWwtUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZ307ZVsiQXJpYWwtQm9sZE1UIl09ZVsiQXJpYWwtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZ307ZVsiQXJpYWwtSXRhbGljTVQiXT1lWyJBcmlhbC1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmd9O2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPWVbIkFyaWFsLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmd9O2VbIkNhbGlicmktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOnIuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpUmVndWxhck1ldHJpY3N9O2VbIkNhbGlicmktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZE1ldHJpY3N9O2VbIkNhbGlicmktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpyLkNhbGlicmlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOnIuQ2FsaWJyaUl0YWxpY01ldHJpY3N9O2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmMuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpUmVndWxhck1ldHJpY3N9O2VbIlNlZ29ldWktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZE1ldHJpY3N9O2VbIlNlZ29ldWktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1SZWd1bGFyIl09ZS5IZWx2ZXRpY2E9e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6bi5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOm4uSGVsdmV0aWNhUmVndWxhck1ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6bi5IZWx2ZXRpY2FCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm4uSGVsdmV0aWNhQm9sZE1ldHJpY3N9O2VbIkhlbHZldGljYS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOm4uSGVsdmV0aWNhSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpuLkhlbHZldGljYUl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6bi5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOm4uSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3N9fSkpO2Z1bmN0aW9uIGdldFhmYUZvbnROYW1lKGUpe2NvbnN0IHQ9KDAsaC5ub3JtYWxpemVGb250TmFtZSkoZSk7cmV0dXJuIHUoKVt0XX19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXQuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzPXQuQ2FsaWJyaUl0YWxpY01ldHJpY3M9dC5DYWxpYnJpSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkRmFjdG9ycz12b2lkIDA7dC5DYWxpYnJpQm9sZEZhY3RvcnM9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU0NjU3LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MzI5MywuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkxMjEsLjg2OTQzLC43OTc5NSwuODgxOTgsLjc3OTU4LC43MDg2NCwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwMTcsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTQ2NTcsLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC44ODc2MiwuODc4NSwuNzUyNDEsLjg3ODUsLjkwNTE4LC45NTAxNSwuNzc2MTgsLjg3ODUsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MTQ4OCwuODc4NSwuODgwMSwuODc4NSwuODc4NSwuOTEzNDMsLjcxNzMsMS4wNDEwNiwuODc4NSwuODUwNzUsLjk1Nzk0LC44MjYxNiwuODUxNjIsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjEyNDAxLC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjczMjkzLC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MTIxLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg1Mjg0LC44NzUwOCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg3MTUsLjc1MjQxLC45MDUxOCwuOTA1MTgsLjkwNTE4LC45MDUxOCwuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg3ODUsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjkwNzQ3LC44OTA0OSwuODc4NSwuODc4NSwuODc4NSwuODc4NSwuODUxNjIsLjg3ODUsLjg1MTYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjg3Mjg5LC44MzAxNiwuODg1MDYsLjkzMTI1LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwxLDEsLjg3MzU2LC44Nzg1LC45MTA3NSwuODk2MDgsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjIyOSwuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzk0NjgsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MTIxLC44Nzg1LDEsMSwuOTEyMSwuODc4NSwuODc4MDIsLjg4NjU2LC44Nzg1LC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44NzQwMiwuODkyOTEsLjc3OTU4LC45MTM0MywxLDEsLjc3OTU4LC45MTM0MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC44ODc2MiwuNzc1MzksLjg3MTUsLjg3NTA4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzA2NzQsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuMDYzMDMsLjgzOTA4LC44MDM1MiwuNTcxODQsLjY5NjUsLjU2Mjg5LC44MjAwMSwuNTYwMjksLjgxMjM1LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42ODE1NiwuODAzNjcsLjczMTMzLC43ODI1NywuODczNTYsLjg2OTQzLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkxMjEsLjc2NDgsLjg2OTQzLC44NzM1NiwuNzk3OTUsLjc4Mjc1LC44MTA1NSwuNzc4OTIsLjk3NjIsLjgyNTc3LC45OTgxOSwuODQ4OTYsLjk1OTU4LC43Nzg5MiwuOTYxMDgsMS4wMTQwNywuODkwNDksMS4wMjk4OCwuOTQyMTEsLjk2MTA4LC44OTM2LC44NDAyMSwuODc4NDIsLjk2Mzk5LC43OTEwOSwuODkwNDksMS4wMDgxMywxLjAyOTg4LC44NjA3NywuODc0NDUsLjkyMDk5LC44NDcyMywuODY1MTMsLjg4MDEsLjc1NjM4LC44NTcxNCwuNzgyMTYsLjc5NTg2LC44Nzk2NSwuOTQyMTEsLjk3NzQ3LC43ODI4NywuOTc5MjYsLjg0OTcxLDEuMDI5ODgsLjk0MjExLC44ODAxLC45NDIxMSwuODQ5NzEsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDI2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1MTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTQ4LDEsMSwxLDEsMSwxLC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzExNDMsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45MzgzNSwuODM0MDYsLjkxMTMzLC44NDEwNywuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTAwNiwxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9O3QuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NjIzOSwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzE4MDUsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MDg3MiwuODU5MzgsLjc5Nzk1LC44NzA2OCwuNzc5NTgsLjY5NzY2LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjA2OCwuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41MjksLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC45NDkwOCwuODY0MTEsLjc0MDEyLC44NjQxMSwuODgzMjMsLjk1MDE1LC44NjQxMSwuODYzMzEsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MDM5LC44NjMzMSwuODYzMzEsLjg2NDExLC44NjQxMSwuOTA0NjQsLjcwODUyLDEuMDQxMDYsLjg2MzMxLC44NDM3MiwuOTU3OTQsLjgyNjE2LC44NDU0OCwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTkxMjksLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzE4MDUsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkwODcyLC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1Mjg0LC44NzA2OCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjg1ODg3LC43NDAxMiwuODgzMjMsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC45MDc0NywuODkwNDksLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NDU0OCwuODY0MTEsLjg0NTQ4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjg3Mjg5LC43OTUzOCwuODg1MDYsLjkyNzI2LC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwxLDEsLjg3MzU2LC44NjMzMSwuOTEwNzUsLjg3NzcsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjQ2NywuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzczMTIsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MDg3MiwuODYzMzEsMSwxLC45MDg3MiwuODYzMzEsLjg2OTA2LC44ODExNiwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg3NDAyLC44NjU0OSwuNzc5NTgsLjkwNDY0LDEsMSwuNzc5NTgsLjkwNDY0LC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC45NDkwOCwuNzc1MzksLjg1ODg3LC44NzA2OCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwMDg4LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjQ4Mzg3LC44MzkwOCwuODAzNTIsLjU3MTE4LC42OTY1LC41NjM0NywuNzkxNzksLjU1ODUzLC44MDM0NiwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjcxNzQsLjg2MDM2LC43MzEzMywuNzgyNTcsLjg3MzU2LC44NjQ0MSwuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MDg3MiwuNzQ4ODksLjg1OTM4LC44Nzg5MSwuNzk3OTUsLjc5NTcsLjgxMDU1LC43Nzg5MiwuOTc0NDcsLjgyNTc3LC45NzQ2NiwuODcxNzksLjk1OTU4LC43Nzg5MiwuOTQyNTIsLjk1NjEyLC44NzUzLDEuMDI5ODgsLjkyNzMzLC45NDI1MiwuODc0MTEsLjg0MDIxLC44NzI4LC45NTYxMiwuNzQwODEsLjg3NTMsMS4wMjE4OSwxLjAyOTg4LC44NDgxNCwuODc0NDUsLjkxODIyLC44NDcyMywuODU2NjgsLjg2MzMxLC44MTM0NCwuODc1ODEsLjc2NDIyLC44MjA0NiwuOTYwNTcsLjkyNzMzLC45OTM3NSwuNzgwMjIsLjk1NDUyLC44NjAxNSwxLjAyOTg4LC45MjczMywuODYzMzEsLjkyNzMzLC44NjAxNSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNjMxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODMyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODUxNzQsMSwxLDEsMSwxLDEsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODk4MDcsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTA5NCwxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkyOTcyLC44MzQwNiwuOTExMzMsLjgzMzI2LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA2MTYsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDcsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTU0MywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzIzNDYsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5MjQ5LC44NDExOCwuNzc0NTIsLjg1Mzc0LC43NTE4NiwuNjc3ODksLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MzA5LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM4MzEzLDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjkyNDUsLjkyNDUsLjgzMjAzLC45MjQ1LC44NTg2NSwxLjA5ODQyLC45MjQ1LC45MjQ1LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTQ5NTksLjkyNDUsLjkyMjc0LC45MjQ1LC45MjQ1LDEuMDI5MzMsLjc3ODMyLDEuMjA1NjIsLjkyNDUsLjg5MTYsLjk4OTg2LC44NjYyMSwuODk0NTMsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4xNjM1OSwuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MjM0NiwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkyNDksLjg0MTE4LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODUyODQsLjg0NTU3LC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44NDg0MywuODMyMDMsLjg1ODY1LC44NTg2NSwuODU4NjUsLjg1ODY1LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjkyNDUsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTA3NDcsLjg2NjUxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44OTQ1MywuOTI0NSwuODk0NTMsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuODUxOTMsLjg4NzUsLjg2NDc3LC45OTAzNCwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjgxMTA1LC45MjQ1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsMSwxLC44NjI3NSwuOTI0NSwuOTA4NzIsLjkzNTkxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3ODk2LDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkzNzUsLjk4MTU2LC45MzQwNywuNzcyNjEsMS4xMTQyOSwuODkyNDksLjkyNDUsMSwxLC44OTI0OSwuOTI0NSwuOTI1MzQsLjg2Njk4LC45MjQ1LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODQxMTgsLjkyMjc0LC44NjY3LC44NjI5MSwuNzUxODYsMS4wMjkzMywxLDEsLjc1MTg2LDEuMDI5MzMsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwxLDEsLjc5Nzc2LC45NzY1NSwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuOTI0NSwuNzYzMTgsLjg0ODQzLC44NDU1NywuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjcwMDksLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2NzUsLjkwODYxLC42MTkyLC43MzYzLC42NDgyNCwuODI0MTEsLjU2MzIxLC44NTY5NiwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzI4NiwuODQxMzQsLjczMjA2LC43NjY1OSwuODYyNzUsLjg0MzY5LC45MDY4NSwuNzc4OTIsLjg1ODcxLDEuMDI2MzgsLjg5MjQ5LC43NTgyOCwuODQxMTgsLjg1OTg0LC43NzQ1MiwuNzY0NjYsLjc5Nzc2LC43MzA2LC45MDc4MiwuNzc4MTgsLjkwMywuODcyOTEsLjkwNjg1LC43MzA2LC45OTA1OCwxLjAzNjY3LC45NDYzNSwxLjIzNTE2LC45ODQ5LC45OTA1OCwuOTIzOTMsLjg5MTYsLjk0MiwxLjAzNjY3LC43NTAyNiwuOTQ2MzUsMS4wMjk3LDEuMjM1MTYsLjkwOTE4LC45NDA0OCwuOTgyMTcsLjg5NzQ2LC44NDE1MywuOTIyNzQsLjgyNTA3LC44ODgzMiwuODQ0MzgsLjg4MTc4LDEuMDM1MjUsLjk4NDksMS4wMDIyNSwuNzgwODYsLjk3MjQ4LC44OTQwNCwxLjIzNTE2LC45ODQ5LC45MjI3NCwuOTg0OSwuODk0MDQsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTY5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODU4NjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwOTMzLDEsMSwxLDEsMSwxLC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjg5OTQsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45Nzg1OCwuODI2MTYsLjkxMTMzLC44MzQzNywuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDU3MiwxLjgxMDU1LC45MDc0OSwxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1Mjg0LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkNhbGlicmlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlSZWd1bGFyRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzkwMTYsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjczODM0LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTM4NSwuODUxMjIsLjc3NDUyLC44NjUwMywuNzUxODYsLjY4ODg3LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDI1OCwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zOTAxNiwxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC44NjEyOCwuOTQ0NjksLjg0NTcsLjk0NDY5LC44OTQ2NCwxLjA5ODQyLC44NDYzNiwuOTQ0NjksMS4wMzI5NywxLjA3NjkyLC45MDkxOCwxLjAzMjk3LC45NTg5NywuOTQ0NjksLjk0ODIsLjk0NDY5LC45NDQ2OSwxLjA0NjkyLC43ODIyMywxLjIwNTYyLC45NDQ2OSwuOTAzMzIsLjk4OTg2LC44NjYyMSwuOTA1MjcsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4wODcwNywuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MzgzNCwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkzODUsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUyODQsLjg1MzExLC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjkzLC44NDU3LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44OTQ2NCwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45NDQ2OSwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTA3NDcsLjg2NjUxLC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTA1MjcsLjk0NDY5LC45MDUyNywuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjg1MTkzLC45MjQ1NCwuODY0NzcsLjk5MjEsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LDEsMSwuODYyNzUsLjk0NDY5LC45MDg3MiwuOTU3ODYsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LDEuMDMyOTcsLjkwNjg1LC44MjYwMSwuNzc3NDEsMS4wNTYxMSwuNjM3NywxLjA3NjkyLDEsMSwuOTA5MTgsLjc1NTkzLDEuMDMyOTcsMSwxLC43NjAzMiwuOTA0NTIsLjk4MTU2LDEuMTE4NDIsLjc3MjYxLDEuMTE0MjksLjg5Mzg1LC45NDQ2OSwxLDEsLjg5Mzg1LC45NDQ2OSwuOTU4NzcsLjg2OTAxLC45NDQ2OSwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODY2NywuOTAwMTYsLjc1MTg2LDEuMDQ2OTIsMSwxLC43NTE4NiwxLjA0NjkyLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsMSwxLC43OTc3NiwuOTIxODgsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjg2MTI4LC43NjMxOCwuODY5MywuODUzMTEsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3NzQyLC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44NjY4NiwuOTA4NjEsLjYyMjY3LC43NDM1OSwuNjU2NDksLjg1NDk4LC41Njk2MywuODgyNTQsMS4yMzUxNiwuODY3NSwuODE1NTIsLjc1NDQzLC44NDUwMywuNzMyMDYsLjc2NjU5LC44NjI3NSwuODUxMjIsLjkwNjg1LC43Nzg5MiwuODU3NDYsMS4wMjYzOCwuODkzODUsLjc1NjU3LC44NTEyMiwuODYyNzUsLjc3NDUyLC43NDE3MSwuNzk3NzYsLjczMDYsLjk1MTY1LC43NzgxOCwuODk3NzIsLjg4ODMxLC45MDY4NSwuNzMwNiwuOTgxNDIsMS4wMjE5MSwuOTY1NzYsMS4yMzUxNiwuOTkwMTgsLjk4MTQyLC45MjM2LC44OTI1OCwuOTQwMzUsMS4wMjE5MSwuNzg4NDgsLjk2NTc2LC45NTYxLDEuMjM1MTYsLjkwOTE4LC45MjU3OCwuOTU0MjQsLjg5NzQ2LC44Mzk2OSwuOTQ4MiwuODAxMTMsLjg5NDQyLC44NTIwOCwuODYxNTUsLjk4MDIyLC45OTAxOCwxLjAwNDUyLC44MTIwOSwuOTkyNDcsLjg5MTgxLDEuMjM1MTYsLjk5MDE4LC45NDgyLC45OTAxOCwuODkxODEsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODg0NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk0NjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NzY2LDEsMSwxLDEsMSwxLC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjkwNDMsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45OTMzMSwuODI2MTYsLjkxMTMzLC44NDI4NiwuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEuMDcxODUsLjk5NDEzLC45NjMzNCwxLjA4MDY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRGYWN0b3JzPXZvaWQgMDt0LkhlbHZldGljYUJvbGRGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwuOTk5OTgsLjk5OTc0LC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3NywxLjAwMDg3LC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywxLjAwMDI2LC45OTk5LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LC45OTk3MywuOTk5NzcsMS4wMDAyNiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5OTgsMS4wMDA2LC45OTk5OCwxLjAwMDAzLC45OTk3MywuOTk5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk5OCwxLjAwMDI2LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsMS4wMDA2LC45OTk4MiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk1OSwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3MywxLC45OTk1OSwxLjAwMDc3LC45OTk1OSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3NywuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTczLDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjA2NDA5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsMS4wMzM3NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNDIsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAzODI4LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAzNCwuOTk5NzcsMSwuOTk5OTcsMS4wMDAyNiwxLjAwMDc4LDEuMDAwMzYsLjk5OTczLDEuMDAwMTMsMS4wMDA2LC45OTk3NywuOTk5NzcsLjk5OTg4LC44NTE0OCwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsMS4wMDA2OSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk4NCwxLjAwMDI2LDEuMDAwMDEsMS4wMDAyNCwxLjAwMDAxLC45OTk5LDEsMS4wMDA2LDEuMDAwMDEsMS4wMDA0MSwuOTk5NjIsMS4wMDAyNiwxLjAwMDYsLjk5OTk1LDEuMDAwNDEsLjk5OTQyLC45OTk3MywuOTk5MjcsMS4wMDA4MiwuOTk5MDIsMS4wMDAyNiwxLjAwMDg3LDEuMDAwNiwxLjAwMDY5LC45OTk3MywuOTk4NjcsLjk5OTczLC45OTkzLDEuMDAwMjYsMS4wMDA0OSwxLjAwMDU2LDEsLjk5OTg4LC45OTkzNSwuOTk5OTUsLjk5OTU0LDEuMDAwNTUsLjk5OTQ1LDEuMDAwMzIsMS4wMDA2LC45OTk5NSwxLjAwMDI2LC45OTk5NSwxLjAwMDMyLDEuMDAwMDEsMS4wMDAwOCwuOTk5NzEsMS4wMDAxOSwuOTk5NCwxLjAwMDAxLDEuMDAwNiwxLjAwMDQ0LC45OTk3MywxLjAwMDIzLDEuMDAwNDcsMSwuOTk5NDIsLjk5NTYxLC45OTk4OSwxLjAwMDM1LC45OTk3NywxLjAwMDM1LC45OTk3NywxLjAwMDE5LC45OTk0NCwxLjAwMDAxLDEuMDAwMjEsLjk5OTI2LDEuMDAwMzUsMS4wMDAzNSwuOTk5NDIsMS4wMDA0OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk4OSwxLjAwMDU3LDEuMDAwMDEsLjk5OTM2LDEuMDAwNTIsMS4wMDAxMiwuOTk5OTYsMS4wMDA0MywxLDEuMDAwMzUsLjk5OTQsLjk5OTc2LDEuMDAwMzUsLjk5OTczLDEuMDAwNTIsMS4wMDA0MSwxLjAwMTE5LDEuMDAwMzcsLjk5OTczLDEuMDAwMDIsLjk5OTg2LDEuMDAwNDEsMS4wMDA0MSwuOTk5MDIsLjk5OTYsMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwuOTk5NzMsMS4wMDA1MiwuOTk5NzMsMSwuOTk5NzMsMS4wMDA0MSwxLjAwMDc1LC45OTk0LDEuMDAwMywuOTk5OTksMSwxLjAwMDQxLC45OTk1NSwxLC45OTkxNSwuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDExOSwuOTk5NTUsLjk5OTczLDEuMDAwNiwuOTk5MTEsMS4wMDA2LDEuMDAwMjYsLjk5OTcyLDEuMDAwMjYsLjk5OTAyLDEuMDAwNDEsLjk5OTczLC45OTk5OSwxLDEsMS4wMDAzOCwxLjAwMDUsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwxLjAwMDQ3LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTk5NzIsMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywxLjAwMDMxLDEuMDAwMTUsMSwuOTk1NjEsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTcyLC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDA0NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDEwMTEsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTc3LDEsMSwxLjAwMDI2LC45OTk2OSwuOTk5NzIsLjk5OTgxLC45OTk4LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsLjkxMTU1LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5NjYsMS4wMDAyMiwxLjAwMDMyLDEuMDAwMDEsLjk5OTQ0LDEuMDAwMjYsMS4wMDAwMSwuOTk5NjgsMS4wMDAwMSwxLjAwMDQ3LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTgxLDEuMDAxMDEsMS4wMDAyNiwxLjAwMDYsLjk5OTQ4LC45OTk4MSwxLjAwMDY0LC45OTk3MywuOTk5NDIsMS4wMDEwMSwxLjAwMDYxLDEuMDAwMjYsMS4wMDA2OSwxLjAwMDYsMS4wMDAxNCwuOTk5NzMsMS4wMTMyMiwuOTk5NzMsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMTIsLjk5OTIzLDEsMS4wMDA2NCwxLjAwMDc2LC45OTk0OCwxLjAwMDU1LDEuMDAwNjMsMS4wMDAwNywuOTk5NDMsMS4wMDA2LC45OTk0OCwxLjAwMDI2LC45OTk0OCwuOTk5NDMsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjksMS4wMDAzOCwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTc4LDEuMDAwMDEsMS4wMDA1NywuOTk5ODksLjk5OTY3LC45OTk2NCwuOTk5NjcsLjk5OTc3LC45OTk5OSwuOTk5NzcsMS4wMDAzOCwuOTk5NzcsMS4wMDAwMSwuOTk5NzMsMS4wMDA2NiwuOTk5NjcsLjk5OTY3LDEuMDAwNDEsLjk5OTk4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwuOTk5NjcsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NjQsMS4wMDAzMSwxLjAwMDAxLC45OTk5OSwuOTk5OTksMSwxLjAwMDIzLDEsMSwuOTk5OTksMS4wMDAzNSwxLjAwMDAxLC45OTk5OSwuOTk5NzMsLjk5OTc3LC45OTk5OSwxLjAwMDU4LC45OTk3MywuOTk5NzMsLjk5OTU1LC45OTk1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45OTk4OSwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsLjQ1OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDAxLC45OTk5OSwuOTk5ODIsLjk5OTk0LC45OTk5NiwxLDEuMDAwNDIsMS4wMDA0NCwxLjAwMDI5LDEuMDAwMjMsLjk5OTczLC45OTk3MywxLjAwMDI2LC45OTk0OSwxLjAwMDAyLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzUsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMzIsLjk4Njg1LC45OTk3MywxLjAwMDI2LDEsMSwuOTk5NjYsMS4wMDA0NCwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTcxLC45OTk3OCwxLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwOTgsMSwxLDEsMS4wMDA0OSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zNSxsaW5lR2FwOi4yfTt0LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjAyODgsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LC45OTk0NiwxLjAwMDM0LDEsLjk5OTI0LDEuMDAwMDEsMSwxLC45OTk3MywuOTk5MjQsLjk5OTczLC45OTkyNCwuOTk5NzMsMS4wNjMxMSwuOTk5NzMsMS4wMDAyNCwuOTk5NzMsLjk5OTI0LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNDEsLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODk1NDcsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAwMSwxLDEuMDAwNTQsLjk5OTc3LDEuMDAwODQsMS4wMDAwNywuOTk5NzMsMS4wMDAxMywuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLC45OTk0NSwuOTEyMjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5MzMsMS4wMDAyMiwxLjAwMDU0LDEuMDAwMDEsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMDEsMS4wMDAxLDEuMDAwMDEsMS4wMDA1MiwxLDEuMDAwNiwxLjAwMDAxLC45OTk0NSwuOTk4OTcsLjk5OTY4LC45OTkyNCwxLjAwMDM2LC45OTk0NSwuOTk5NDksMSwxLjAwMDYsLjk5ODk3LC45OTkxOCwuOTk5NjgsLjk5OTExLC45OTkyNCwxLC45OTk2MiwxLjAxNDg3LDEsMS4wMDA1LC45OTk3MywxLjAwMDEyLDEuMDAwNDMsMSwuOTk5OTUsLjk5OTk0LDEuMDAwMzYsLjk5OTQ3LDEuMDAwMTksMS4wMDA2MywxLjAwMDI1LC45OTkyNCwxLjAwMDM2LC45OTk3MywxLjAwMDM2LDEuMDAwMjUsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjcsMS4wMDAxLDEuMDAwNjgsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsMS4wMDAwOCwuOTk5NTcsLjk5OTcyLC45OTk0LC45OTk1NCwuOTk5NzUsMS4wMDA1MSwxLjAwMDAxLDEuMDAwMTksMS4wMDAwMSwxLjAwMDEsLjk5OTg2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDM4LC45OTk1NCwuOTk5NTQsLjk5OTQsMS4wMDA2NiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk3NSwxLjAwMDEsMS4wMDAwMSwuOTk5OTMsLjk5OTUsLjk5OTU1LDEuMDAwMTYsLjk5OTc4LC45OTk3NCwxLjAwMDE5LDEuMDAwMjIsLjk5OTU1LDEuMDAwNTMsLjk5OTczLDEuMDAwODksMS4wMDAwNSwuOTk5NjcsMS4wMDA0OCwuOTk5NzMsMS4wMDAwMiwxLjAwMDM0LC45OTk3MywuOTk5NzMsLjk5OTY0LDEuMDAwMDYsMS4wMDA2NiwuOTk5NDcsLjk5OTczLC45ODg5NCwuOTk5NzMsMSwuNDQ4OTgsMSwuOTk5NDYsMSwxLjAwMDM5LDEuMDAwODIsLjk5OTkxLC45OTk5MSwuOTk5ODUsMS4wMDAyMiwxLjAwMDIzLDEuMDAwNjEsMS4wMDAwNiwuOTk5NjYsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDAxOSwxLjAwMDgsMSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5ODMsMS4wMDA0NCwuOTk5NzMsLjk5OTY0LC45ODMzMiwxLC45OTk3MywxLDEsLjk5OTYyLC45OTg5NSwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywxLjAwNDIzLC45OTkyNSwuOTk5OTksMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDA0OSwxLDEuMDAyNDUsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwxLjAwMDAzLDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk1MzE3LC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsMS4wMDA2LDEuMDAwMDYsLjk5OTczLC45OTk3MywuOTk5ODIsMS4wMDAwMSwxLjAwMDQzLC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywuOTk5NzMsLjk5OTg3LDEuMDAwMDEsMS4wMDAwMSwuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsMSwxLjAwMDAxLC45OTk3MywuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NDksLjk5OTczLC45OTk5OCwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5MjQsLjk5OTI0LDEsLjk5OTI0LC45OTk5OSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDA2LC45OTk3MywxLC45OTk3NywxLDEsMSwxLjAwMDA1LDEuMDAwOSwxLjAwMDA1LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDksLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk4LDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsMSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjA2NDA5LDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEsLjk5OTczLDEsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEuMDQ1OTYsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LDEuMDAwMTksMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDI1NzIsLjk5OTczLDEuMDAwMDUsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5OTksLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODQ1MzMsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTI4LDEsLjk5OTc3LDEuMDAwMTMsMS4wMDA1NSwuOTk5NDcsLjk5OTQ1LC45OTk0MSwuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNCwuOTE2MjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDUsLjk5OTk5LC45OTk3NywxLjAwMDE1LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsLjk5OTQ2LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTc4LDEuMDAwNDUsLjk5OTczLC45OTkyNCwxLjAwMDIzLC45OTk3OCwuOTk5NjYsMSwxLjAwMDY1LDEuMDAwNDUsMS4wMDAxOSwuOTk5NzMsLjk5OTczLC45OTkyNCwxLDEsLjk2NDk5LDEsMS4wMDA1NSwuOTk5NzMsMS4wMDAwOCwxLjAwMDI3LDEsLjk5OTcsLjk5OTk1LDEuMDAwMjMsLjk5OTMzLDEuMDAwMTksMS4wMDAxNSwxLjAwMDMxLC45OTkyNCwxLjAwMDIzLC45OTk3MywxLjAwMDIzLDEuMDAwMzEsMS4wMDAwMSwuOTk5MjgsMS4wMDAyOSwxLjAwMDkyLDEuMDAwMzUsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsLjk5OTg4LC45OTk3NSwxLDEuMDAwODIsLjk5NTYxLC45OTk2LDEuMDAwMzUsMS4wMDAwMSwuOTk5NjIsMS4wMDAwMSwxLjAwMDkyLC45OTk2NCwxLjAwMDAxLC45OTk2MywuOTk5OTksMS4wMDAzNSwxLjAwMDM1LDEuMDAwODIsLjk5OTYyLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTYsLjk5OTY3LDEuMDAwMDEsMS4wMDAzNCwxLjAwMDc0LDEuMDAwNTQsMS4wMDA1MywxLjAwMDYzLC45OTk3MSwuOTk5NjIsMS4wMDAzNSwuOTk5NzUsLjk5OTc3LC45OTk3MywxLjAwMDQzLC45OTk1MywxLjAwMDcsLjk5OTE1LC45OTk3MywxLjAwMDA4LC45OTg5MiwxLjAwMDczLDEuMDAwNzMsMS4wMDExNCwuOTk5MTUsMS4wMDA3MywuOTk5NTUsLjk5OTczLDEuMDAwOTIsLjk5OTczLDEsLjk5OTk4LDEsMS4wMDAzLDEsMS4wMDA0MywxLjAwMDAxLC45OTk2OSwxLjAwMDMsMSwxLjAwMDM1LDEuMDAwMDEsLjk5OTUsMSwxLjAwMDkyLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNywuOTk5NSwxLC45OTkyNCwxLjAwMDYsLjk5OTI0LC45OTk3MiwxLjAwMDYyLC45OTk3MywxLjAwMTE0LDEuMDAwNzMsMSwuOTk5NTUsMSwxLDEuMDAwNDcsLjk5OTY4LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLDEsLjk5OTczLDEsMSwuOTk5NTUsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMjY3LC45OTk5OSwuOTk5OTgsLjk5OTk4LDEsLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwuOTk5MjUsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45NjMyOSwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLC44MjU0LDEuMDAwMTUsMSwxLjAwMDM1LDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz12b2lkIDA7dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3MTksNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4NSw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM4NSw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDQ2NSw3MjIsMzMzLDg1Myw5MDYsNDc0LDgyNSw5MjcsODM4LDI3OCw3MjIsNzIyLDYwMSw3MTksNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjQ0LDc3OCw3MjIsNjY3LDYwMCw2MTEsNjY3LDgyMSw2NjcsODA5LDgwMiwyNzgsNjY3LDYxNSw0NTEsNjExLDI3OCw1ODIsNjE1LDYxMCw1NTYsNjA2LDQ3NSw0NjAsNjExLDU0MSwyNzgsNTU4LDU1Niw2MTIsNTU2LDQ0NSw2MTEsNzY2LDYxOSw1MjAsNjg0LDQ0Niw1ODIsNzE1LDU3Niw3NTMsODQ1LDI3OCw1ODIsNjExLDU4Miw4NDUsNjY3LDY2OSw4ODUsNTY3LDcxMSw2NjcsMjc4LDI3Niw1NTYsMTA5NCwxMDYyLDg3NSw2MTAsNzIyLDYyMiw3MTksNzIyLDcxOSw3MjIsNTY3LDcxMiw2NjcsOTA0LDYyNiw3MTksNzE5LDYxMCw3MDIsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYyMiw4NTQsNjY3LDczMCw3MDMsMTAwNSwxMDE5LDg3MCw5NzksNzE5LDcxMSwxMDMxLDcxOSw1NTYsNjE4LDYxNSw0MTcsNjM1LDU1Niw3MDksNDk3LDYxNSw2MTUsNTAwLDYzNSw3NDAsNjA0LDYxMSw2MDQsNjExLDU1Niw0OTAsNTU2LDg3NSw1NTYsNjE1LDU4MSw4MzMsODQ0LDcyOSw4NTQsNjE1LDU1Miw4NTQsNTgzLDU1Niw1NTYsNjExLDQxNyw1NTIsNTU2LDI3OCwyODEsMjc4LDk2OSw5MDYsNjExLDUwMCw2MTUsNTU2LDYwNCw3NzgsNjExLDQ4Nyw0NDcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTA5NCw1NTYsODg1LDQ4OSwxMTE1LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDc0MCw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzgyLDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzk2LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDcyMiwzMzMsODU0LDkwNiw0NzMsODQ0LDkzMCw4NDcsMjc4LDcyMiw3MjIsNjEwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NTcsNzc4LDcxOCw2NjcsNTkwLDYxMSw2NjcsODIyLDY2Nyw4MjksNzgxLDI3OCw2NjcsNjIwLDQ3OSw2MTEsMjc4LDU5MSw2MjAsNjIxLDU1Niw2MTAsNDc5LDQ5Miw2MTEsNTU4LDI3OCw1NjYsNTU2LDYwMyw1NTYsNDUwLDYxMSw3MTIsNjA1LDUzMiw2NjQsNDA5LDU5MSw3MDQsNTc4LDc3Myw4MzQsMjc4LDU5MSw2MTEsNTkxLDgzNCw2NjcsNjY3LDg4Niw2MTQsNzE5LDY2NywyNzgsMjc4LDU1NiwxMDk0LDEwNDIsODU0LDYyMiw3MTksNjc3LDcxOSw3MjIsNzA4LDcyMiw2MTQsNzIyLDY2Nyw5MjcsNjQzLDcxOSw3MTksNjE1LDY4Nyw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjc3LDc4MSw2NjcsNzI5LDcwOCw5NzksOTg5LDg1NCwxZTMsNzA4LDcxOSwxMDQyLDcyOSw1NTYsNjE5LDYwNCw1MzQsNjE4LDU1Niw3MzYsNTEwLDYxMSw2MTEsNTA3LDYyMiw3NDAsNjA0LDYxMSw2MTEsNjExLDU1Niw4ODksNTU2LDg4NSw1NTYsNjQ2LDU4Myw4ODksOTM1LDcwNyw4NTQsNTk0LDU1Miw4NjUsNTg5LDU1Niw1NTYsNjExLDQ2OSw1NjMsNTU2LDI3OCwyNzgsMjc4LDk2OSw5MDYsNjExLDUwNyw2MTksNTU2LDYxMSw3NzgsNjExLDU3NSw0NjcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTEwNCw1NTYsODg1LDUxNiwxMTQ2LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCw5OTksNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYyNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzMzLDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjgxLDU1Niw0MDAsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MTUsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzU0LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg5LDg0NiwzODksNzk0LDg2NSw3NzUsMjIyLDY2Nyw2NjcsNTcwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjcsODMzLDcyMiw2NDgsNzc4LDcyNSw2NjcsNjAwLDYxMSw2NjcsODM3LDY2Nyw4MzEsNzYxLDI3OCw2NjcsNTcwLDQzOSw1NTUsMjIyLDU1MCw1NzAsNTcxLDUwMCw1NTYsNDM5LDQ2Myw1NTUsNTQyLDIyMiw1MDAsNDkyLDU0OCw1MDAsNDQ3LDU1Niw2NzAsNTczLDQ4Niw2MDMsMzc0LDU1MCw2NTIsNTQ2LDcyOCw3NzksMjIyLDU1MCw1NTYsNTUwLDc3OSw2NjcsNjY3LDg0Myw1NDQsNzA4LDY2NywyNzgsMjc4LDUwMCwxMDY2LDk4Miw4NDQsNTg5LDcxNSw2MzksNzI0LDY2Nyw2NTEsNjY3LDU0NCw3MDQsNjY3LDkxNyw2MTQsNzE1LDcxNSw1ODksNjg2LDgzMyw3MjIsNzc4LDcyNSw2NjcsNzIyLDYxMSw2MzksNzk1LDY2Nyw3MjcsNjczLDkyMCw5MjMsODA1LDg4Niw2NTEsNjk0LDEwMjIsNjgyLDU1Niw1NjIsNTIyLDQ5Myw1NTMsNTU2LDY4OCw0NjUsNTU2LDU1Niw0NzIsNTY0LDY4Niw1NTAsNTU2LDU1Niw1NTYsNTAwLDgzMyw1MDAsODM1LDUwMCw1NzIsNTE4LDgzMCw4NTEsNjIxLDczNiw1MjYsNDkyLDc1Miw1MzQsNTU2LDU1Niw1NTYsMzc4LDQ5Niw1MDAsMjIyLDIyMiwyMjIsOTEwLDgyOCw1NTYsNDcyLDU2NSw1MDAsNTU2LDc3OCw1NTYsNDkyLDMzOSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwODMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsOTk4LDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODQsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV07dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjE1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzUsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyOTIsNTU2LDMzNCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYwNCw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNzUsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODQsODM4LDM4NCw3NzQsODU1LDc1MiwyMjIsNjY3LDY2Nyw1NTEsNjY4LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2OCw4MzMsNzIyLDY1MCw3NzgsNzIyLDY2Nyw2MTgsNjExLDY2Nyw3OTgsNjY3LDgzNSw3NDgsMjc4LDY2Nyw1NzgsNDQ2LDU1NiwyMjIsNTQ3LDU3OCw1NzUsNTAwLDU1Nyw0NDYsNDQxLDU1Niw1NTYsMjIyLDUwMCw1MDAsNTc2LDUwMCw0NDgsNTU2LDY5MCw1NjksNDgyLDYxNywzOTUsNTQ3LDY0OCw1MjUsNzEzLDc4MSwyMjIsNTQ3LDU1Niw1NDcsNzgxLDY2Nyw2NjcsODY1LDU0Miw3MTksNjY3LDI3OCwyNzgsNTAwLDEwNTcsMTAxMCw4NTQsNTgzLDcyMiw2MzUsNzE5LDY2Nyw2NTYsNjY3LDU0Miw2NzcsNjY3LDkyMyw2MDQsNzE5LDcxOSw1ODMsNjU2LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MzUsNzYwLDY2Nyw3NDAsNjY3LDkxNyw5MzgsNzkyLDg4NSw2NTYsNzE5LDEwMTAsNzIyLDU1Niw1NzMsNTMxLDM2NSw1ODMsNTU2LDY2OSw0NTgsNTU5LDU1OSw0MzgsNTgzLDY4OCw1NTIsNTU2LDU0Miw1NTYsNTAwLDQ1OCw1MDAsODIzLDUwMCw1NzMsNTIxLDgwMiw4MjMsNjI1LDcxOSw1MjEsNTEwLDc1MCw1NDIsNTU2LDU1Niw1NTYsMzY1LDUxMCw1MDAsMjIyLDI3OCwyMjIsOTA2LDgxMiw1NTYsNDM4LDU1OSw1MDAsNTUyLDc3OCw1NTYsNDg5LDQxMSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwNzMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXQuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9dC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9dC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRGYWN0b3JzPXZvaWQgMDt0Lk15cmlhZFByb0JvbGRGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzI3MDYsLjgwNDc5LC44MzczNCwuOTg4OTQsLjk5NzkzLC45ODk3LC45Mzg4NCwuODYyMDksLjk0MjkyLC45NDI5MiwxLjE2NjYxLDEuMDIwNTgsLjkzNTgyLC45NjY5NCwuOTM1ODIsMS4xOTEzNywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjc4MDc2LC43ODA3NiwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzI4NTEsLjc4OTY2LC45MDgzOCwuODM2MzcsLjgyMzkxLC45NjM3NiwuODAwNjEsLjg2Mjc1LC44NzY4LC45NTQwNywxLjAyNTgsLjczOTAxLC44NTAyMiwuODM2NTUsMS4wMTU2LC45NTU0NiwuOTIxNzksLjg3MTA3LC45MjE3OSwuODIxMTQsLjgwOTYsLjg5NzEzLC45NDQzOCwuOTUzNTMsLjk0MDgzLC45MTkwNSwuOTA0MDYsLjk0NDYsLjk0MjkyLDEuMTg3NzcsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLC45MDA4OCwuOTQ5MzgsLjk3ODk4LC44MTA5MywuOTc1NzEsLjk0OTM4LDEuMDI0LC45NTc3LC45NTkzMywuOTg2MjEsMS4wNDc0LC45NzQ1NSwuOTg5ODEsLjk2NzIsLjk1OTMzLC45NDQ2LC45Nzg5OCwuOTc0MDcsLjk3NjQ2LC43ODAzNiwxLjEwMjA4LC45NTQ0MiwuOTUyOTgsLjk3NTc5LC45MzMyLC45NDAzOSwuOTM4LC44MDY4NywxLjAxMTQ5LC44MDY4NywxLjAyMDU4LC44MDQ3OSwuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsMS4wMTE0OSwxLjAwODcyLC45MDA4OCwuOTE4ODIsMS4wMjEzLC44MzYxLDEuMDIwNTgsLjYyMjk1LC41NDMyNCwuODkwMjIsMS4wODU5NSwxLDEsLjkwMDg4LDEsLjk3NDU1LC45MzU4MiwuOTAwODgsMSwxLjA1Njg2LC44MzYxLC45OTY0MiwuOTk2NDIsLjk5NjQyLC43Mjg1MSwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuODY4LC44MjM5MSwuODAwNjEsLjgwMDYxLC44MDA2MSwuODAwNjEsMS4wMjU4LDEuMDI1OCwxLjAyNTgsMS4wMjU4LC45NzQ4NCwuOTU1NDYsLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwxLjAyMDU4LC45MjE3OSwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjkwNDA2LC44Njk1OCwuOTgyMjUsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjkwMzEsLjgxMDkzLC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjkzOTY5LC45NTkzMywuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwxLjA4NTk1LC45NDQ2LC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTQwMzksLjk3ODk4LC45NDAzOSwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC45NjM3NiwuODQzMTMsLjk3NDg0LC45NzU3MSwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsMSwxLC45NTQwNywuOTU5MzMsLjk3MDY5LC45NTkzMywxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsLjg4NywxLjAxNTkxLC43MzkwMSwxLjA0NzQsMSwxLC45NzQ1NSwuODM2NTUsLjk4OTgxLDEsMSwuODM2NTUsLjczOTc3LC44MzY1NSwuNzM5MDMsLjg0NjM4LDEuMDMzLC45NTU0NiwuOTU5MzMsMSwxLC45NTU0NiwuOTU5MzMsLjgyNzEsLjk1NDE3LC45NTkzMywuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTM2LC45MTk2NCwuODIxMTQsLjk3NjQ2LDEsMSwuODIxMTQsLjk3NjQ2LC44MDk2LC43ODAzNiwuODA5NiwuNzgwMzYsMSwxLC44MDk2LC43ODAzNiwxLDEsLjg5NzEzLC43NzQ1MiwuODk3MTMsMS4xMDIwOCwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjkwNDA2LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LDEsLjk5NzkzLC45MDgzOCwuOTQ5MzgsLjg2OCwuOTAzMSwuOTIxNzksLjk0NDYsMSwxLC44OTcxMywxLjEwMjA4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDk4OSwuOTM1OCwuOTE5NDUsLjgzMTgxLC43NTI2MSwuODc5OTIsLjgyOTc2LC45NjAzNCwuODM2ODksLjk3MjY4LDEuMDA3OCwuOTA4MzgsLjgzNjM3LC44MDE5LC45MDE1NywuODAwNjEsLjk0NDYsLjk1NDA3LC45MjQzNiwxLjAyNTgsLjg1MDIyLC45NzE1MywxLjAxNTYsLjk1NTQ2LC44OTE5MiwuOTIxNzksLjkyMzYxLC44NzEwNywuOTYzMTgsLjg5NzEzLC45MzcwNCwuOTU2MzgsLjkxOTA1LC45MTcwOSwuOTI3OTYsMS4wMjU4LC45MzcwNCwuOTQ4MzYsMS4wMzczLC45NTkzMywxLjAwNzgsLjk1ODcxLC45NDgzNiwuOTYxNzQsLjkyNjAxLC45NDk4LC45ODYwNywuOTU3NzYsLjk1OTMzLDEuMDU0NTMsMS4wMDc4LC45ODI3NSwuOTMxNCwuOTU2MTcsLjkxNzAxLDEuMDU5OTMsLjk0NDYsLjc4MzY3LC45NTUzLDEsLjg2ODMyLDEuMDEyOCwuOTU4NzEsLjk5Mzk0LC44NzU0OCwuOTYzNjEsLjg2Nzc0LDEuMDA3OCwuOTU4NzEsLjk0NDYsLjk1ODcxLC44Njc3NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MzU4MiwuOTM1ODIsLjkzNTgyLDEsLjkwOCwuOTA4LC45MTgsLjk0MjE5LC45NDIxOSwuOTY1NDQsMSwxLjI4NSwxLDEsLjgxMDc5LC44MTA3OSwxLDEsLjc0ODU0LDEsMSwxLDEsLjk5NzkzLDEsMSwxLC42NSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTcxNzMsMSwuODA1MzUsLjc2MTY5LDEuMDIwNTgsMS4wNzMyLDEuMDU0ODYsMSwxLDEuMzA2OTIsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNjE2MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0JvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfTt0Lk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjYyMjcsLjgwNzc5LC44MTYyNSwuOTcyNzYsLjk3Mjc2LC45NzczMywuOTIyMjIsLjgzMjY2LC45NDI5MiwuOTQyOTIsMS4xNjE0OCwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTczMzcsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcxNTQxLC43NjgxMywuODU1NzYsLjgwNTkxLC44MDcyOSwuOTQyOTksLjc3NTEyLC44MzY1NSwuODY1MjMsLjkyMjIyLC45ODYyMSwuNzE3NDMsLjgxNjk4LC43OTcyNiwuOTg1NTgsLjkyMjIyLC45MDYzNywuODM4MDksLjkwNjM3LC44MDcyOSwuNzY0NjMsLjg2Mjc1LC45MDY5OSwuOTE2MDUsLjkxNTQsLjg1MzA4LC44NTQ1OCwuOTA1MzEsLjk0MjkyLDEuMjEyOTYsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLDEuMTg2MTYsLjk5NjEzLC45MTY3NywuNzgyMTYsLjkxNjc3LC45MDA4MywuOTg3OTYsLjkxMzUsLjkyMTY4LC45NTM4MSwuOTg5ODEsLjk1Mjk4LC45NTM4MSwuOTM0NTksLjkyMTY4LC45MTUxMywuOTIwMDQsLjkxNjc3LC45NTA3NywuNzQ4LDEuMDQ1MDIsLjkxNjc3LC45MjA2MSwuOTQyMzYsLjg5NTQ0LC44OTM2NCwuOSwuODA2ODcsLjg1NzgsLjgwNjg3LDEuMDIwNTgsLjgwNzc5LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuODU3OCwuOTk5NzMsMS4xODYxNiwuOTEzMzksMS4wODA3NCwuODI4OTEsMS4wMjA1OCwuNTU1MDksLjcxNTI2LC44OTAyMiwxLjA4NTk1LDEsMSwxLjE4NjE2LDEsLjk2NzM2LC45MzU4MiwxLjE4NjE2LDEsMS4wNDg2NCwuODI3MTEsLjk5MDQzLC45OTA0MywuOTkwNDMsLjcxNTQxLC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NDUsLjgwNzI5LC43NzUxMiwuNzc1MTIsLjc3NTEyLC43NzUxMiwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk1OTYxLC45MjIyMiwuOTA2MzcsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LDEuMDIwNTgsLjkwMjUxLC45MDY5OSwuOTA2OTksLjkwNjk5LC45MDY5OSwuODU0NTgsLjgzNjU5LC45NDk1MSwuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuODU4MTEsLjc4MjE2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuOTUzODEsLjk1MzgxLC45NTM4MSwuOTUzODEsLjkxMzUsLjkyMTY4LC45MTUxMywuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsMS4wODU5NSwuOTE2NzcsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC44OTM2NCwuOTIzMzIsLjg5MzY0LC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODU1NzYsLjk5NjEzLC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjk0Mjk5LC43Njc4MywuOTU5NjEsLjkxNjc3LC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuODY1MjMsLjkxMzUsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwxLDEsLjkyMjIyLC45MjE2OCwuOTIyMjIsLjkyMTY4LC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuODYwMzYsLjk3MDk2LC43MTc0MywuOTg5ODEsMSwxLC45NTI5OCwuNzk3MjYsLjk1MzgxLDEsMSwuNzk3MjYsLjY4OTQsLjc5NzI2LC43NDMyMSwuODE2OTEsMS4wMDA2LC45MjIyMiwuOTIxNjgsMSwxLC45MjIyMiwuOTIxNjgsLjc5NDY0LC45MjA5OCwuOTIxNjgsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDYzNywuOTE1MTMsLjkwOSwuODc1MTQsLjgwNzI5LC45NTA3NywxLDEsLjgwNzI5LC45NTA3NywuNzY0NjMsLjc0OCwuNzY0NjMsLjc0OCwxLDEsLjc2NDYzLC43NDgsMSwxLC44NjI3NSwuNzI2NTEsLjg2Mjc1LDEuMDQ1MDIsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjg1NDU4LC45MDUzMSwuOSwuOTA1MzEsLjksLjkwNTMxLC45LDEsLjk3Mjc2LC44NTU3NiwuOTk2MTMsLjg0NSwuODU4MTEsLjkwMjUxLC45MTY3NywxLDEsLjg2Mjc1LDEuMDQ1MDIsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4wMDg5OSwxLjMwNjI4LC44NTU3NiwuODAxNzgsLjY2ODYyLC43OTI3LC42OTMyMywuODgxMjcsLjcyNDU5LC44OTcxMSwuOTUzODEsLjg1NTc2LC44MDU5MSwuNzgwNSwuOTQ3MjksLjc3NTEyLC45MDUzMSwuOTIyMjIsLjkwNjM3LC45ODYyMSwuODE2OTgsLjkyNjU1LC45ODU1OCwuOTIyMjIsLjg1MzU5LC45MDYzNywuOTA5NzYsLjgzODA5LC45NDUyMywuODYyNzUsLjgzNTA5LC45MzE1NywuODUzMDgsLjgzMzkyLC45MjM0NiwuOTg2MjEsLjgzNTA5LC45Mjg4NiwuOTEzMjQsLjkyMTY4LC45NTM4MSwuOTA2NDYsLjkyODg2LC45MDU1NywuODY4NDcsLjkwMjc2LC45MTMyNCwuODY4NDIsLjkyMTY4LC45OTUzMSwuOTUzODEsLjkyMjQsLjg1NDA4LC45MjY5OSwuODY4NDcsMS4wMDUxLC45MTUxMywuODA0ODcsLjkzNDgxLDEsLjg4MTU5LDEuMDUyMTQsLjkwNjQ2LC45NzM1NSwuODE1MzksLjg5Mzk4LC44NTkyMywuOTUzODEsLjkwNjQ2LC45MTUxMywuOTA2NDYsLjg1OTIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkxNTQsLjk0MjM2LC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjg1NDU4LC44OTM2NCwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkxNzgyLC45MTc4MiwuOTE3ODIsMSwuODk2LC44OTYsLjg5NiwuOTMzMiwuOTMzMiwuOTU5NzMsMSwxLjI2LDEsMSwuODA0NzksLjgwMTc4LDEsMSwuODU2MzMsMSwxLDEsMSwuOTcyNzYsMSwxLDEsLjY5OCwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTQ1NDIsMSwuNzkxOTksLjc4Njk0LDEuMDIwNTgsMS4wMzQ5MywxLjA1NDg2LDEsMSwxLjIzMDI2LDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMjAwMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5NeXJpYWRQcm9JdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjU1MDcsLjg0OTQzLC44NTYzOSwuODg0NjUsLjg4NDY1LC44NjkzNiwuODgzMDcsLjg2OTQ4LC44NTI4MywuODUyODMsMS4wNjM4MywxLjAyMDU4LC43NTk0NSwuOTIxOSwuNzU5NDUsMS4xNzMzNywuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjc1OTQ1LC43NTk0NSwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNjkwNDYsLjcwOTI2LC44NTE1OCwuNzc4MTIsLjc2ODUyLC44OTU5MSwuNzA0NjYsLjc2MTI1LC44MDA5NCwuODY4MjIsLjgzODY0LC43MjgsLjc3MjEyLC43OTQ3NSwuOTM2MzcsLjg3NTE0LC44NTg4LC43NjAxMywuODU4OCwuNzI0MjEsLjY5ODY2LC43NzU5OCwuODU5OTEsLjgwODExLC44NzgzMiwuNzgxMTIsLjc3NTEyLC44NTYyLDEuMDIyMiwxLjE4NDE3LDEuMDIyMiwxLjI3MDE0LC44OTkwMywxLjE1MDEyLC45Mzg1OSwuOTQzOTksLjg0NiwuOTQzOTksLjgxNDUzLDEuMDE4NiwuOTQyMTksLjk2MDE3LDEuMDMwNzUsMS4wMjE3NSwuOTEyLDEuMDMwNzUsLjk2OTk4LC45NjAxNywuOTM4NTksLjk0Mzk5LC45NDM5OSwuOTU0OTMsLjc0NiwxLjEyNjU4LC45NDU3OCwuOTEsLjk3OSwuODgyLC44ODIsLjgzLC44NTAzNCwuODM1MzcsLjg1MDM0LDEuMDIwNTgsLjcwODY5LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODM1MzcsLjkwMDgzLDEuMTUwMTIsLjkxNjEsLjk0NTY1LC43MzU0MSwxLjAyMDU4LC41MzYwOSwuNjkzNTMsLjc5NTE5LDEuMDg1OTUsMSwxLDEuMTUwMTIsMSwuOTE5NzQsLjc1OTQ1LDEuMTUwMTIsMSwuOTQ0NiwuNzMzNjEsLjkwMDUsLjkwMDUsLjkwMDUsLjYyODY0LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC43NzMsLjc2ODUyLC43MDQ2NiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuODM4NjQsLjgzODY0LC44Mzg2NCwuODM4NjQsLjkwNTYxLC44NzUxNCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwxLjAyMDU4LC44NTc1MSwuODU5OTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjc3NTEyLC43NjAxMywuODgwNzUsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjgwNzUsLjg0NiwuODE0NTMsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgyNDI0LC44MjQyNCwuODI0MjQsLjgyNDI0LC45Mjc4LC45NjAxNywuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LDEuMDg1OTUsLjg1NjIsLjk0NTc4LC45NDU3OCwuOTQ1NzgsLjk0NTc4LC44ODIsLjk0NTc4LC44ODIsLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC44NTE1OCwuOTM4NTksLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjg5NTkxLC44NTQ0LC45MDU2MSwuOTQzOTksLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwuODAwOTQsLjk0MjE5LDEsMSwuODY4MjIsLjk2MDE3LC44NjgyMiwuOTYwMTcsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwuODI0MjQsLjgzODY0LDEuMDMwNzUsLjgzODY0LC44MjQyNCwuODE0MDIsMS4wMjczOCwuNzI4LDEuMDIxNzUsMSwxLC45MTIsLjc5NDc1LDEuMDMwNzUsMSwxLC43OTQ3NSwuODM5MTEsLjc5NDc1LC42NjI2NiwuODA1NTMsMS4wNjY3NiwuODc1MTQsLjk2MDE3LDEsMSwuODc1MTQsLjk2MDE3LC44Njg2NSwuODczOTYsLjk2MDE3LC44NTg4LC45Mzg1OSwuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NjcsLjg0NzU5LC43MjQyMSwuOTU0OTMsMSwxLC43MjQyMSwuOTU0OTMsLjY5ODY2LC43NDYsLjY5ODY2LC43NDYsMSwxLC42OTg2NiwuNzQ2LDEsMSwuNzc1OTgsLjg4NDE3LC43NzU5OCwxLjEyNjU4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC43NzUxMiwuODU2MiwuODMsLjg1NjIsLjgzLC44NTYyLC44MywxLC44ODQ2NSwuODUxNTgsLjkzODU5LC43NzMsLjgwNzUsLjg1NzUxLC44NTYyLDEsMSwuNzc1OTgsMS4xMjY1OCwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTMxMywxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjA4MTA2LDEuMDM5MDEsLjg1MTU4LC43NzAyNSwuNjIyNjQsLjc2NDYsLjY1MzUxLC44NjAyNiwuNjk0NjEsLjg5OTQ3LDEuMDMwNzUsLjg1MTU4LC43NzgxMiwuNzY0NDksLjg4ODM2LC43MDQ2NiwuODU2MiwuODY4MjIsLjg1ODgsLjgzODY0LC43NzIxMiwuODUzMDgsLjkzNjM3LC44NzUxNCwuODIzNTIsLjg1ODgsLjg1NzAxLC43NjAxMywuODkwNTgsLjc3NTk4LC44MTU2LC44MjU2NSwuNzgxMTIsLjc3ODk5LC44OTM4NiwuODM4NjQsLjgxNTYsLjk0ODYsLjkyMzg4LC45NjE4NiwxLjAzMDc1LC45MTEyMywuOTQ4NiwuOTMyOTgsLjg3OCwuOTM5NDIsLjkyMzg4LC44NDU5NiwuOTYxODYsLjk1MTE5LDEuMDMwNzUsLjkyMiwuODg3ODcsLjk1ODI5LC44OCwuOTM1NTksLjkzODU5LC43ODgxNSwuOTM3NTgsMSwuODkyMTcsMS4wMzczNywuOTExMjMsLjkzOTY5LC43NzQ4NywuODU3NjksLjg2Nzk5LDEuMDMwNzUsLjkxMTIzLC45Mzg1OSwuOTExMjMsLjg2Nzk5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjc3NTEyLC44ODIsLjkyMTksMSwuODk5MDMsMSwxLDEsLjg3MzIxLC44NzMyMSwuODczMjEsMSwxLjAyNywxLjAyNywxLjAyNywuODY4NDcsLjg2ODQ3LC43OTEyMSwxLDEuMTI0LDEsMSwuNzM1NzIsLjczNTcyLDEsMSwuODUwMzQsMSwxLDEsMSwuODg0NjUsMSwxLDEsLjY2OSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQ4MjgsMSwuNzQ5NDgsLjc1MTg3LDEuMDIwNTgsLjk4MzkxLDEuMDIxMTksMSwxLDEuMDYyMzMsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTIzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0l0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9O3QuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9WzEuMzY4OTgsMSwxLC43NjMwNSwuODI3ODQsLjk0OTM1LC44OTM2NCwuOTIyNDEsLjg5MDczLC45MDcwNiwuOTg0NzIsLjg1MjgzLC44NTI4MywxLjA2NjQsMS4wMjA1OCwuNzQ1MDUsLjkyMTksLjc0NTA1LDEuMjM0NTYsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC43NDUwNSwuNzQ1MDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjczMDAyLC43MjYwMSwuOTE3NTUsLjgxMjYsLjgwMzE0LC45MjIyMiwuNzM3NjQsLjc5NzI2LC44MzA1MSwuOTAyODQsLjg2MDIzLC43NCwuODEyNiwuODQ4NjksLjk2NTE4LC45MTExNSwuODg1OCwuNzk3NjEsLjg4NTgsLjc0NDk4LC43MzkxNCwuODEzNjMsLjg5NTkxLC44MzY1OSwuODk2MzMsLjg1NjA4LC44MTExLC45MDUzMSwxLjAyMjIsMS4yMjczNiwxLjAyMjIsMS4yNzAxNCwuODk5MDMsLjkwMDg4LC44NjY2NywxLjAyMzEsLjg5NiwxLjAxNDExLC45MDA4MywxLjA1MDk5LDEuMDA1MTIsLjk5NzkzLDEuMDUzMjYsMS4wOTM3NywuOTM4LDEuMDYyMjYsMS4wMDExOSwuOTk3OTMsLjk4NzE0LDEuMDIzMSwxLjAxMjMxLC45ODE5NiwuNzkyLDEuMTkxMzcsLjk5MDc0LC45NjIsMS4wMTkxNSwuOTI2LC45NDIsLjg1NiwuODUwMzQsLjkyMDA2LC44NTAzNCwxLjAyMDU4LC42OTA2NywuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMDA2LC45MzMyLC45MDA4OCwuOTE4ODIsLjkzNDg0LC43NTMzOSwxLjAyMDU4LC41Njg2NiwuNTQzMjQsLjc5NTE5LDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NTMyNSwuNzQ1MDUsLjkwMDg4LDEsLjk3MTk4LC43NTMzOSwuOTEwMDksLjkxMDA5LC45MTAwOSwuNjY0NjYsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjc4OCwuODAzMTQsLjczNzY0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC44NjAyMywuODYwMjMsLjg2MDIzLC44NjAyMywuOTI5MTUsLjkxMTE1LC44ODU4LC44ODU4LC44ODU4LC44ODU4LC44ODU4LDEuMDIwNTgsLjg4NTgsLjg5NTkxLC44OTU5MSwuODk1OTEsLjg5NTkxLC44MTExLC43OTYxMSwuODk3MTMsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2OTM2LC44OTYsLjkwMDgzLC45MDA4MywuOTAwODMsLjkwMDgzLC44NDIyNCwuODQyMjQsLjg0MjI0LC44NDIyNCwuOTcyNzYsLjk5NzkzLC45ODcxNCwuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsMS4wODU5NSwuODk4NzYsLjk5MDc0LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45NDIsMS4wMjMxLC45NDIsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC45MTc1NSwuODY2NjcsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjkyMjIyLC45MzM3MiwuOTI5MTUsMS4wMTQxMSwuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsMSwxLC45MDI4NCwuOTk3OTMsLjkwOTc2LC45OTc5MywuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLC44NDIyNCwuODYwMjMsMS4wNTMyNiwuODYwMjMsLjg0MjI0LC44Mjg3MywxLjA3NDY5LC43NCwxLjA5Mzc3LDEsMSwuOTM4LC44NDg2OSwxLjA2MjI2LDEsMSwuODQ4NjksLjgzNzA0LC44NDg2OSwuODE0NDEsLjg1NTg4LDEuMDg5MjcsLjkxMTE1LC45OTc5MywxLDEsLjkxMTE1LC45OTc5MywuOTE4ODcsLjkwOTkxLC45OTc5MywuODg1OCwuOTg3MTQsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODk0LC45MTQzNCwuNzQ0OTgsLjk4MTk2LDEsMSwuNzQ0OTgsLjk4MTk2LC43MzkxNCwuNzkyLC43MzkxNCwuNzkyLDEsMSwuNzM5MTQsLjc5MiwxLDEsLjgxMzYzLC45MDQsLjgxMzYzLDEuMTkxMzcsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuODExMSwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwxLC45MjI0MSwuOTE3NTUsLjg2NjY3LC43ODgsLjg2OTM2LC44ODU4LC44OTg3NiwxLDEsLjgxMzYzLDEuMTkxMzcsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMzg4LDEuMDM5MDEsLjkyMTM4LC43ODEwNSwuNzE1NCwuODYxNjksLjgwNTEzLC45NDAwNywuODI1MjgsLjk4NjEyLDEuMDYyMjYsLjkxNzU1LC44MTI2LC44MTg4NCwuOTI4MTksLjczNzY0LC45MDUzMSwuOTAyODQsLjg4NTgsLjg2MDIzLC44MTI2LC45MTE3MiwuOTY1MTgsLjkxMTE1LC44MzA4OSwuODg1OCwuODc3OTEsLjc5NzYxLC44OTI5NywuODEzNjMsLjg4MTU3LC44OTk5MiwuODU2MDgsLjgxOTkyLC45NDMwNywuODYwMjMsLjg4MTU3LC45NTMwOCwuOTg2OTksLjk5NzkzLDEuMDYyMjYsLjk1ODE3LC45NTMwOCwuOTczNTgsLjkyOCwuOTgwODgsLjk4Njk5LC45Mjc2MSwuOTk3OTMsLjk2MDE3LDEuMDYyMjYsLjk4NiwuOTQ0LC45NTk3OCwuOTM4LC45NjcwNSwuOTg3MTQsLjgwNDQyLC45ODk3MiwxLC44OTc2MiwxLjA0NTUyLC45NTgxNywuOTkwMDcsLjg3MDY0LC45MTg3OSwuODg4ODgsMS4wNjIyNiwuOTU4MTcsLjk4NzE0LC45NTgxNywuODg4ODgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODExMSwuOTQyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC45MzE3MywuOTMxNzMsLjkzMTczLDEsMS4wNjMwNCwxLjA2MzA0LDEuMDY5MDQsLjg5OTAzLC44OTkwMywuODA1NDksMSwxLjE1NiwxLDEsLjc2NTc1LC43NjU3NSwxLDEsLjcyNDU4LDEsMSwxLDEsLjkyMjQxLDEsMSwxLC42MTksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA3MjU3LDEsLjc0NzA1LC43MTExOSwxLjAyMDU4LDEuMDI0LDEuMDIxMTksMSwxLDEuMTUzNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1NjM4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuTXlyaWFkUHJvUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlNlZ29ldWlSZWd1bGFyTWV0cmljcz10LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz10LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZE1ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZEZhY3RvcnM9dm9pZCAwO3QuU2Vnb2V1aUJvbGRGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTkyOTcsLjk4MjQsMS4wNDAxNiwxLjA2NDk3LDEuMDM0MjQsLjk3NTI5LDEuMTc2NDcsMS4yMzIwMywxLjEwODUsMS4xMDg1LDEuMTY5MzksMS4yMTA3LC45NzU0LDEuMjE0MDgsLjk3NTQsMS41OTU3OCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LC44MTM3OCwuODEzNzgsMS4yMTA3LDEuMjEwNywxLjIxMDcsLjcxNzAzLC45Nzg0NywuOTczNjMsLjg4Nzc2LC44NjQxLDEuMDIwOTYsLjc5Nzk1LC44NTEzMiwuOTE0LDEuMDYwODUsMS4xNDA2LC44MDA3LC44OTg1OCwuODM2OTMsMS4xNDg4OSwxLjA5Mzk4LC45NzQ4OSwuOTIwOTQsLjk3NDg5LC45MDM5OSwuODQwNDEsLjk1OTIzLDEuMDAxMzUsMSwxLjA2NDY3LC45ODI0MywuOTA5OTYsLjk5MzYxLDEuMTA4NSwxLjU2OTQyLDEuMTA4NSwxLjIxMDcsLjc0NjI3LC45NDI4MiwuOTY3NTIsMS4wMTUxOSwuODYzMDQsMS4wMTM1OSwuOTcyNzgsMS4xNTEwMywxLjAxMzU5LC45ODU2MSwxLjAyMjg1LDEuMDIyODUsMS4wMDUyNywxLjAyMjg1LDEuMDMwMiwuOTkwNDEsMS4wMDA4LDEuMDE1MTksMS4wMTM1OSwxLjAyMjU4LC43OTEwNCwxLjE2ODYyLC45OTA0MSwuOTc0NTQsMS4wMjUxMSwuOTkyOTgsLjk2NzUyLC45NTgwMSwuOTQ4NTYsMS4xNjU3OSwuOTQ4NTYsMS4yMTA3LC45ODI0LDEuMDM0MjQsMS4wMzQyNCwxLDEuMDM0MjQsMS4xNjU3OSwuODcyNywxLjM4NzEsMS4xODYyMiwxLjEwODE4LDEuMDQ0NzgsMS4yMTA3LDEuMTg2MjIsLjc1MTU1LC45NDk5NCwxLjI4ODI2LDEuMjE0MDgsMS4yMTQwOCwuOTEwNTYsMSwuOTE1NzIsLjk3NTQsLjY0NjYzLDEuMTgzMjgsMS4yNDg2NiwxLjA0NDc4LDEuMTQxNjksMS4xNTc0OSwxLjE3Mzg5LC43MTcwMywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTM1MDYsLjg2NDEsLjc5Nzk1LC43OTc5NSwuNzk3OTUsLjc5Nzk1LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjAyMDk2LDEuMDkzOTgsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwxLjIxMDcsLjk3NDg5LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkwOTk2LC45MjA5NCwxLjAyNzk4LC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45MzEzNiwuODYzMDQsLjk3Mjc4LC45NzI3OCwuOTcyNzgsLjk3Mjc4LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsLjk3MTIyLC45OTA0MSwxLDEsMSwxLDEsMS4yODgyNiwxLjAwMDgsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk5MDQxLC45Njc1MiwxLjAxNTE5LC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsMS4wMjA5NiwxLjAzMDU3LDEuMDIwOTYsMS4wMzUxNywuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksMSwxLDEuMDYwODUsLjk4NTYxLDEuMDYwODUsMS4wMDg3OSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwuOTcxMzgsMS4wODY5MiwuODAwNywxLjAyMjg1LDEsMSwxLjAwNTI3LC44MzY5MywxLjAyMjg1LDEsMSwuODM2OTMsLjk0NTUsLjgzNjkzLC45MDQxOCwuODM2OTMsMS4xMzAwNSwxLjA5Mzk4LC45OTA0MSwxLDEsMS4wOTM5OCwuOTkwNDEsLjk2NjkyLDEuMDkyNTEsLjk5MDQxLC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45Mzk5NCwuOTc5MzEsLjkwMzk5LDEuMDIyNTgsMSwxLC45MDM5OSwxLjAyMjU4LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsMSwxLC45NTkyMywxLjA3MDM0LC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLC45MDk5NiwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwxLjA3NzMzLDEuMDM0MjQsLjk3MzYzLC45Njc1MiwuOTM1MDYsLjkzMTM2LC45NzQ4OSwxLjAwMDgsMSwxLC45NTkyMywxLjE2ODYyLDEuMTUxMDMsMS4xNTEwMywxLjAxMTczLDEuMDM5NTksLjc1OTUzLC44MTM3OCwuNzk5MTIsMS4xNTEwMywxLjIxOTk0LC45NTE2MSwuODc4MTUsMS4wMTE0OSwuODE1MjUsLjc2NzYsLjk4MTY3LDEuMDExMzQsMS4wMjU0NiwuODQwOTcsMS4wMzA4OSwxLjE4MTAyLC45NzM2MywuODg3NzYsLjg1MTM0LC45NzgyNiwuNzk3OTUsLjk5MzYxLDEuMDYwODUsLjk3NDg5LDEuMTQwNiwuODk4NTgsMS4wMzg4LDEuMTQ4ODksMS4wOTM5OCwuODYwMzksLjk3NDg5LDEuMDU5NSwuOTIwOTQsLjk0NzkzLC45NTkyMywuOTA5OTYsLjk5MzQ2LC45ODI0MywxLjAyMTEyLC45NTQ5MywxLjE0MDYsLjkwOTk2LDEuMDM1NzQsMS4wMjU5NywxLjAwMDgsMS4xODEwMiwxLjA2NjI4LDEuMDM1NzQsMS4wMTkyLDEuMDE5MzIsMS4wMDg4NiwuOTc1MzEsMS4wMTA2LDEuMDAwOCwxLjEzMTg5LDEuMTgxMDIsMS4wMjI3NywuOTg2ODMsMS4wMDE2LC45OTU2MSwxLjA3MjM3LDEuMDAwOCwuOTA0MzQsLjk5OTIxLC45MzgwMywuODk2NSwxLjIzMDg1LDEuMDY2MjgsMS4wNDk4MywuOTYyNjgsMS4wNDk5LC45ODQzOSwxLjE4MTAyLDEuMDY2MjgsMS4wMDA4LDEuMDY2MjgsLjk4NDM5LC43OTc5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5NDY2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NzI3OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAyMDY1LDEsMSwxLDEsMSwxLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsMSwxLjIxNDA4LC44OTkwMywxLDEsLjc1MTU1LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjczMDQ3LC43MzA0NywxLjIwNjQyLC45MTIxMSwxLjI1NjM1LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4xMjQ1NCwuOTM1MDMsMS4wMzQyNCwxLjE5Njg3LDEuMDM0MjQsMSwxLDEsLjc3MSwxLDEsMS4xNTc0OSwxLjE1NzQ5LDEuMTU3NDksMS4xMDk0OCwuODYyNzksLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjE2ODk3LDEsLjk2MDg1LC45MDEzNywxLjIxMDcsMS4xODQxNiwxLjEzOTczLC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMTcyLDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg4NzQsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjA5MTkzLDEuMDkxOTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuU2Vnb2V1aUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4OTQ2LDEuMDM5NTksMS4wNDAxNiwxLjAyODA5LDEuMDM2LC45NzYzOSwxLjEwOTUzLDEuMjMyMDMsMS4xMTE0NCwxLjExMTQ0LDEuMTY5MzksMS4yMTIzNywuOTc1NCwxLjIxMjYxLC45NzU0LDEuNTk3NTQsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsLjgxMzc4LC44MTM3OCwxLjIxMjM3LDEuMjEyMzcsMS4yMTIzNywuNzM1NDEsLjk3ODQ3LC45NzM2MywuODk3MjMsLjg3ODk3LDEuMDQyNiwuNzk0MjksLjg1MjkyLC45MTE0OSwxLjA1ODE1LDEuMTQwNiwuNzk2MzEsLjkwMTI4LC44Mzg1MywxLjA0Mzk2LDEuMTA2MTUsLjk3NTUyLC45NDQzNiwuOTc1NTIsLjg4NjQxLC44MDUyNywuOTYwODMsMS4wMDEzNSwxLDEuMDY3NzcsLjk4MTcsLjkxMTQyLC45OTM2MSwxLjExMTQ0LDEuNTcyOTMsMS4xMTE0NCwxLjIxMjM3LC43NDYyNywxLjMxODE4LDEuMDY1ODUsLjk3MDQyLC44MzA1NSwuOTcwNDIsLjkzNTAzLDEuMTI2MSwuOTcwNDIsLjk3OTIyLDEuMTQyMzYsLjk0NTUyLDEuMDEwNTQsMS4xNDIzNiwxLjAyNDcxLC45NzkyMiwuOTQxNjUsLjk3MDQyLC45NzA0MiwxLjAyNzYsLjc4OTI5LDEuMTI2MSwuOTc5MjIsLjk1ODc0LDEuMDIxOTcsLjk4NTA3LC45Njc1MiwuOTcxNjgsLjk1MTA3LDEuMTY1NzksLjk1MTA3LDEuMjEyMzcsMS4wMzk1OSwxLjAzNiwxLjAzNiwxLDEuMDM2LDEuMTY1NzksLjg3MzU3LDEuMzE4MTgsMS4xODc1NCwxLjI2NzgxLDEuMDUzNTYsMS4yMTIzNywxLjE4NjIyLC43OTQ4NywuOTQ5OTQsMS4yOTAwNCwxLjI0MDQ3LDEuMjQwNDcsMS4zMTgxOCwxLC45MTQ4NCwuOTc1NCwxLjMxODE4LDEuMTM0OSwxLjI0ODY2LDEuMDUzNTYsMS4xMzkzNCwxLjE1NTc0LDEuMTczODksLjczNTQxLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NDM4NSwuODc4OTcsLjc5NDI5LC43OTQyOSwuNzk0MjksLjc5NDI5LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjA0MjYsMS4xMDYxNSwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLDEuMjEyMzcsLjk3NTUyLDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkxMTQyLC45NDQzNiwuOTg3MjEsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsLjk2NzA1LC44MzA1NSwuOTM1MDMsLjkzNTAzLC45MzUwMywuOTM1MDMsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwuOTMxMjUsLjk3OTIyLC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsMS4yOTAwNCwuOTQxNjUsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk3OTIyLC45Njc1MiwuOTcwNDIsLjk2NzUyLC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsMS4wNDI2LDEuMDAzMywxLjA0MjYsLjk3MDQyLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwxLDEsMS4wNTgxNSwuOTc5MjIsMS4wNTgxNSwuOTc5MjIsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsLjk3NDQxLDEuMDQzMDIsLjc5NjMxLDEuMDE1ODIsMSwxLDEuMDEwNTQsLjgzODUzLDEuMTQyMzYsMSwxLC44Mzg1MywxLjA5MTI1LC44Mzg1MywuOTA0MTgsLjgzODUzLDEuMTk1MDgsMS4xMDYxNSwuOTc5MjIsMSwxLDEuMTA2MTUsLjk3OTIyLDEuMDEwMzQsMS4xMDQ2NiwuOTc5MjIsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjkxNjAyLC45MTk4MSwuODg2NDEsMS4wMjc2LDEsMSwuODg2NDEsMS4wMjc2LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksMSwxLC45NjA4MywxLjA1NDAzLC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLC45MTE0MiwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwxLjIzMTk5LDEuMDM2LC45NzM2MywxLjA2NTg1LC45NDM4NSwuOTY3MDUsLjk3NTUyLC45NDE2NSwxLDEsLjk2MDgzLDEuMTI2MSwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwuOTUxNjEsMS4yNzEyNiwxLjAwODExLC44MzI4NCwuNzc3MDIsLjk5MTM3LC45NTI1MywxLjAzNDcsLjg2MTQyLDEuMDcyMDUsMS4xNDIzNiwuOTczNjMsLjg5NzIzLC44Njg2OSwxLjA5ODE4LC43OTQyOSwuOTkzNjEsMS4wNTgxNSwuOTc1NTIsMS4xNDA2LC45MDEyOCwxLjA2NjYyLDEuMDQzOTYsMS4xMDYxNSwuODQ5MTgsLjk3NTUyLDEuMDQ2OTQsLjk0NDM2LC45ODAxNSwuOTYwODMsLjkxMTQyLDEuMDAzNTYsLjk4MTcsMS4wMTk0NSwuOTg5OTksMS4xNDA2LC45MTE0MiwxLjA0OTYxLC45ODk4LDEuMDA2MzksMS4xNDIzNiwxLjA3NTE0LDEuMDQ5NjEsLjk5NjA3LDEuMDI4OTcsMS4wMDgsLjk4OTgsLjk1MTM0LDEuMDA2MzksMS4xMTEyMSwxLjE0MjM2LDEuMDA1MTgsLjk3OTgxLDEuMDIxODYsMSwxLjA4NTc4LC45NDE2NSwuOTkzMTQsLjk4Mzg3LC45MzAyOCwuOTMzNzcsMS4zNTEyNSwxLjA3NTE0LDEuMTA2ODcsLjkzNDkxLDEuMDQyMzIsMS4wMDM1MSwxLjE0MjM2LDEuMDc1MTQsLjk0MTY1LDEuMDc1MTQsMS4wMDM1MSwuNzk0MjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTA5NywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTM1MDMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NjA5LDEsMSwxLDEsMSwxLDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsMSwxLjIxMjYxLC44OTkwMywxLDEsLjc1MTU1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjcyOTU5LC43Mjk1OSwxLjIwNTAyLC45MTQwNiwxLjI2NTE0LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4wOTEyNSwuOTMzMjcsMS4wMzMzNiwxLjE2NTQxLDEuMDM2LDEsMSwxLC43NzEsMSwxLDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsLjg2MzY0LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjIyNCwxLDEsMS4xNjc5OCwxLC45NjA4NSwuOTAwNjgsMS4yMTIzNywxLjE4NDE2LDEuMTM5MDQsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjEzMzksMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODc3NSwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTMyNjksMS4xMzI2OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9O3QuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjE0NzYzLDEuMDUzNjUsMS4wNjIzNCwuOTY5MjcsLjkyNTg2LDEuMTUzNzMsMS4xODQxNCwuOTEzNDksLjkxMzQ5LDEuMDc0MDMsMS4xNzMwOCwuNzgzODMsMS4yMDA4OCwuNzgzODMsMS40MjUzMSwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MzgzLC43ODM4MywxLjE3MzA4LDEuMTczMDgsMS4xNzMwOCwuNzczNDksLjk0NTY1LC45NDcyOSwuODU5NDQsLjg4NTA2LC45ODU4LC43NDgxNywuODAwMTYsLjg4NDQ5LC45ODAzOSwuOTU3ODIsLjY5MjM4LC44OTg5OCwuODMyMzEsLjk4MTgzLDEuMDM5ODksLjk2OTI0LC44NjIzNywuOTY5MjQsLjgwNTk1LC43NDUyNCwuODYwOTEsLjk1NDAyLC45NDE0MywuOTg0NDgsLjg4NTgsLjgzMDg5LC45MzI4NSwxLjA5NDksMS4zOTAxNiwxLjA5NDksMS40NTk5NCwuNzQ2MjcsMS4wNDgzOSwuOTc0NTQsLjk3NDU0LC44NzIwNywuOTc0NTQsLjg3NTMzLDEuMDYxNTEsLjk3NDU0LDEuMDAxNzYsMS4xNjQ4NCwxLjA4MTMyLC45ODA0NywxLjE2NDg0LDEuMDI5ODksMS4wMTA1NCwuOTYyMjUsLjk3NDU0LC45NzQ1NCwxLjA2NTk4LC43OTAwNCwxLjE2MzQ0LDEuMDAzNTEsLjk0NjI5LC45OTczLC45MTAxNiwuOTY3NzcsLjkwNDMsLjkxMDgyLC45MjQ4MSwuOTEwODIsMS4xNzMwOCwuOTU3NDgsLjk2OTI3LC45NjkyNywxLC45NjkyNywuOTI0ODEsLjgwNTk3LDEuMDQ4MzksMS4yMzM5MywxLjE3ODEsLjkyNDUsMS4xNzMwOCwxLjIwODA4LC42MzIxOCwuOTQyNjEsMS4yNDgyMiwxLjA5OTcxLDEuMDk5NzEsMS4wNDgzOSwxLC44NTI3MywuNzgwMzIsMS4wNDgzOSwxLjA5OTcxLDEuMjIzMjYsLjkyNDUsMS4wOTgzNiwxLjEzNTI1LDEuMTUyMjIsLjcwNDI0LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC44NTQ5OCwuODg1MDYsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjc0ODE3LC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTg1OCwxLjAzOTg5LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzMwOCwuOTY5MjQsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjk1NDAyLC44MzA4OSwuODYyMzcsLjg4NDA5LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45MjkxNiwuODcyMDcsLjg3NTMzLC44NzUzMywuODc1MzMsLjg3NTMzLC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTM4NTQsMS4wMTA1NCwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LDEuMjQ4MjIsLjg3NjEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwuOTY3NzcsLjk3NDU0LC45Njc3NywuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC45ODU4LC45NTM5MSwuOTg1OCwuOTc0NTQsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LDEsMSwuOTgwMzksMS4wMDE3NiwuOTgwMzksMS4wMDE3NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsMS4xNjQ4NCwuOTU3ODIsLjkzMTQ2LC44NDQyMSwxLjEyNzYxLC42OTIzOCwxLjA4MTMyLDEsMSwuOTgwNDcsLjgzMjMxLDEuMTY0ODQsMSwxLC44NDcyMywxLjA0ODYxLC44NDcyMywuNzg3NTUsLjgzMjMxLDEuMjM3MzYsMS4wMzk4OSwxLjAxMDU0LDEsMSwxLjAzOTg5LDEuMDEwNTQsLjk4NTcsMS4wMzg0OSwxLjAxMDU0LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45MjM4MywuOTAxNzEsLjgwNTk1LDEuMDY1OTgsMSwxLC44MDU5NSwxLjA2NTk4LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsMSwxLC44NjA5MSwxLjAyNzU5LC44NTc3MSwxLjE2MzQ0LC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LC44MzA4OSwuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywxLjMxODY4LC45NjkyNywuOTQ3MjksLjk3NDU0LC44NTQ5OCwuOTI5MTYsLjk2OTI0LC44NzYxLDEsMSwuODYwOTEsMS4xNjM0NCwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwuODE5NjUsLjgxOTY1LC45NDcyOSwuNzgwMzIsLjcxMDIyLC45MDg4MywuODQxNzEsLjk5ODc3LC43NzU5NiwxLjA1NzM0LDEuMiwuOTQ3MjksLjg1OTQ0LC44Mjc5MSwuOTYwNywuNzQ4MTcsLjkzMjg1LC45ODAzOSwuOTY5MjQsLjk1NzgyLC44OTg5OCwuOTgzMTYsLjk4MTgzLDEuMDM5ODksLjc4NjE0LC45NjkyNCwuOTc2NDIsLjg2MjM3LC44NjA3NSwuODYwOTEsLjgzMDg5LC45MDA4MiwuODg1OCwuOTcyOTYsMS4wMTI4NCwuOTU3ODIsLjgzMDg5LDEuMDk3NiwxLjA0LDEuMDMzNDIsMS4yLDEuMDY3NSwxLjA5NzYsLjk4MjA1LDEuMDM4MDksMS4wNTA5NywxLjA0LC45NTM2NCwxLjAzMzQyLDEuMDU0MDEsMS4yLDEuMDIxNDgsMS4wMTE5LDEuMDQ3MjQsMS4wMTI3LDEuMDI3MzIsLjk2MjI1LC44OTY1LC45Nzc4MywuOTM1NzQsLjk0ODE4LDEuMzA2NzksMS4wNjc1LDEuMTE4MjYsLjk5ODIxLDEuMDU1NywxLjAzMjYsMS4yLDEuMDY3NSwuOTYyMjUsMS4wNjc1LDEuMDMyNiwuNzQ4MTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzc1NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc1MzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk4NzA1LDEsMSwxLDEsMSwxLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwxLjEyMzE3LDEuMTIzMTcsMS4xMjMxNywuNjc2MDMsLjY3NjAzLDEuMTU2MjEsLjczNTg0LDEuMjExOTEsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44NzcwOSwuOTY5MjcsMS4wMTQ3MywuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjA5ODM2LDEuMDk4MzYsMS4wOTgzNiwxLjAxNTIyLC44NjMyMSwuOTQ0MzQsLjg2NDksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NDM4LDEuMTczMDgsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njc5MSwxLjI0ODIyLDEuMjQ4MjIsMS4xNzMwOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE3OTg0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDc0MiwxLjEwNzQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4NTk0LDEuMDIyODUsMS4xMDQ1NCwxLjA2MjM0LC45NjkyNywuOTIwMzcsMS4xOTk4NSwxLjIwNDYsLjkwNjE2LC45MDYxNiwxLjA3MTUyLDEuMTcxNCwuNzgwMzIsMS4yMDA4OCwuNzgwMzIsMS40MDI0NiwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MDMyLC43ODAzMiwxLjE3MTQsMS4xNzE0LDEuMTcxNCwuODA1OTcsLjk0MDg0LC45NjcwNiwuODU5NDQsLjg1NzM0LC45NzA5MywuNzU4NDIsLjc5OTM2LC44ODE5OCwuOTgzMSwuOTU3ODIsLjcxMzg3LC44Njk2OSwuODQ2MzYsMS4wNzc5NiwxLjAzNTg0LC45NjkyNCwuODM5NjgsLjk2OTI0LC44MjgyNiwuNzk2NDksLjg1NzcxLC45NTEzMiwuOTMxMTksLjk4OTY1LC44ODQzMywuODI4NywuOTMzNjUsMS4wODYxMiwxLjM2MzgsMS4wODYxMiwxLjQ1Nzg2LC43NDYyNywuODA0OTksLjkxNDg0LDEuMDU3MDcsLjkyMzgzLDEuMDU4ODIsLjk0MDMsMS4xMjY1NCwxLjA1ODgyLDEuMDE3NTYsMS4wOTAxMSwxLjA5MDExLC45OTQxNCwxLjA5MDExLDEuMDM0LDEuMDE3NTYsMS4wNTM1NiwxLjA1NzA3LDEuMDU4ODIsMS4wNDM5OSwuODQ4NjMsMS4yMTk2OCwxLjAxNzU2LC45NTgwMSwxLjAwMDY4LC45MTc5NywuOTY3NzcsLjkwNDMsLjkwMzUxLC45MjEwNSwuOTAzNTEsMS4xNzE0LC44NTMzNywuOTY5MjcsLjk2OTI3LC45OTkxMiwuOTY5MjcsLjkyMTA1LC44MDU5NywxLjI0MzQsMS4yMDgwOCwxLjA1OTM3LC45MDk1NywxLjE3MTQsMS4yMDgwOCwuNzUxNTUsLjk0MjYxLDEuMjQ2NDQsMS4wOTk3MSwxLjA5OTcxLC44NDc1MSwxLC44NTI3MywuNzgwMzIsLjYxNTg0LDEuMDU0MjUsMS4xNzkxNCwuOTA5NTcsMS4wODY2NSwxLjExNTkzLDEuMTQxNjksLjczMzgxLC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC44NjAzNSwuODU3MzQsLjc1ODQyLC43NTg0MiwuNzU4NDIsLjc1ODQyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTcwOTMsMS4wMzU4NCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTcxNCwuOTY5MjQsLjk1MTMyLC45NTEzMiwuOTUxMzIsLjk1MTMyLC44Mjg3LC44Mzk2OCwuODkwNDksLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkzNTc1LC45MjM4MywuOTQwMywuOTQwMywuOTQwMywuOTQwMywuODcxNywuODcxNywuODcxNywuODcxNywxLjAwNTI3LDEuMDE3NTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMjQ2NDQsLjk1OTIzLDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LDEuMDE3NTYsLjk2Nzc3LDEuMDU3MDcsLjk2Nzc3LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuOTY3MDYsLjkxNDg0LC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjk3MDkzLDEuMDk2OSwuOTcwOTMsMS4wNTg4MiwuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLDEsMSwuOTgzMSwxLjAxNzU2LC45ODMxLDEuMDE3NTYsLjk1NzgyLC44NzE3LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLDEuMDkwMTEsLjk1NzgyLC44NzE3LC44NDc4NCwxLjExNTUxLC43MTM4NywxLjA5MDExLDEsMSwuOTk0MTQsLjg0NjM2LDEuMDkwMTEsMSwxLC44NDYzNiwxLjA1MzYsLjg0NjM2LC45NDI5OCwuODQ2MzYsMS4yMzI5NywxLjAzNTg0LDEuMDE3NTYsMSwxLDEuMDM1ODQsMS4wMTc1NiwxLjAwMzIzLDEuMDM0NDQsMS4wMTc1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTMwNjYsLjk4MjkzLC44MjgyNiwxLjA0Mzk5LDEsMSwuODI4MjYsMS4wNDM5OSwuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLDEsMSwuODU3NzEsMS4xNzMxOCwuODU3NzEsMS4yMTk2OCwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTg5NjUsMS4wMDA2OCwuODI4NywuOTY3NzcsLjgyODcsLjkzMzY1LC45MDQzLC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsMS4wODU3MSwuOTY5MjcsLjk2NzA2LC45MTQ4NCwuODYwMzUsLjkzNTc1LC45NjkyNCwuOTU5MjMsMSwxLC44NTc3MSwxLjIxOTY4LDEuMTE0MzcsMS4xMTQzNywuOTMxMDksLjkxMjAyLC42MDQxMSwuODQxNjQsLjU1NTcyLDEuMDExNzMsLjk3MzYxLC44MTgxOCwuODE4MTgsLjk2NjM1LC43ODAzMiwuNzI3MjcsLjkyMzY2LC45ODYwMSwxLjAzNDA1LC43Nzk2OCwxLjA5Nzk5LDEuMiwuOTY3MDYsLjg1OTQ0LC44NTYzOCwuOTY0OTEsLjc1ODQyLC45MzM2NSwuOTgzMSwuOTY5MjQsLjk1NzgyLC44Njk2OSwuOTQxNTIsMS4wNzc5NiwxLjAzNTg0LC43ODQzNywuOTY5MjQsLjk4NzE1LC44Mzk2OCwuODM0OTEsLjg1NzcxLC44Mjg3LC45NDQ5MiwuODg0MzMsLjkyODcsMS4wMDk4LC45NTc4MiwuODI4NywxLjA2MjUsLjk4MjQ4LDEuMDM0MjQsMS4yLDEuMDEwNzEsMS4wNjI1LC45NTI0NiwxLjAzODA5LDEuMDQ5MTIsLjk4MjQ4LDEuMDAyMjEsMS4wMzQyNCwxLjA1NDQzLDEuMiwxLjA0Nzg1LC45OTYwOSwxLjAwMTY5LDEuMDUxNzYsLjk5MzQ2LDEuMDUzNTYsLjkwODcsMS4wMzAwNCwuOTU1NDIsLjkzMTE3LDEuMjMzNjIsMS4wMTA3MSwxLjA3ODMxLDEuMDI1MTIsMS4wNTIwNSwxLjAzNTAyLDEuMiwxLjAxMDcxLDEuMDUzNTYsMS4wMTA3MSwxLjAzNTAyLC43NTg0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzE5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQwMjEsMSwxLDEsMSwxLDEsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjAzMDc3LDEuMTMxOTYsMS4xMzE5NiwxLjEzMTk2LC42NzQyOCwuNjc0MjgsMS4xNjAzOSwuNzMyOTEsMS4yMDk5NiwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3Nzk2LC45NjkyNywxLjAxNTE4LC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMTA1MzksMS4xMDUzOSwxLjExMzU4LDEuMDY5NjcsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NTA3LDEuMTcxNCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2OTcsMS4yNDgyMiwxLjI0ODIyLDEuMTcyMzgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODA4MywxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA5MzgsMS4xMDkzOCwxLDEsMSwxLjA1NDI1LDEuMDk5NzEsMS4wOTk3MSwxLjA5OTcxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdEV2YWx1YXRvcj10LlBvc3RTY3JpcHRDb21waWxlcj10LlBERkZ1bmN0aW9uRmFjdG9yeT12b2lkIDA7dC5pc1BERkZ1bmN0aW9uPWZ1bmN0aW9uIGlzUERGRnVuY3Rpb24oZSl7bGV0IHQ7aWYoZSBpbnN0YW5jZW9mIHIuRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9O3ZhciByPWEoNCksaT1hKDIpLG49YSg1OCkscz1hKDUpLG89YSg1OSk7dC5QREZGdW5jdGlvbkZhY3Rvcnk9Y2xhc3MgUERGRnVuY3Rpb25GYWN0b3J5e2NvbnN0cnVjdG9yKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQ9ITB9KXt0aGlzLnhyZWY9ZTt0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PXR9Y3JlYXRlKGUpe2NvbnN0IHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPVBERkZ1bmN0aW9uLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIHIuUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7dGhpcy5fY2FjaGUoZSxhKTtyZXR1cm4gYX1jcmVhdGVGcm9tQXJyYXkoZSl7Y29uc3QgdD10aGlzLmdldENhY2hlZChlKTtpZih0KXJldHVybiB0O2NvbnN0IGE9UERGRnVuY3Rpb24ucGFyc2VBcnJheSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMuaXNFdmFsU3VwcG9ydGVkLGZuT2JqOmUgaW5zdGFuY2VvZiByLlJlZj90aGlzLnhyZWYuZmV0Y2goZSk6ZX0pO3RoaXMuX2NhY2hlKGUsYSk7cmV0dXJuIGF9Z2V0Q2FjaGVkKGUpe2xldCB0O2UgaW5zdGFuY2VvZiByLlJlZj90PWU6ZSBpbnN0YW5jZW9mIHIuRGljdD90PWUub2JqSWQ6ZSBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSYmKHQ9ZS5kaWN0Py5vYmpJZCk7aWYodCl7Y29uc3QgZT10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYodCk7aWYoZSlyZXR1cm4gZX1yZXR1cm4gbnVsbH1fY2FjaGUoZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO2xldCBhO2UgaW5zdGFuY2VvZiByLlJlZj9hPWU6ZSBpbnN0YW5jZW9mIHIuRGljdD9hPWUub2JqSWQ6ZSBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSYmKGE9ZS5kaWN0Py5vYmpJZCk7YSYmdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLnNldChudWxsLGEsdCl9Z2V0IF9sb2NhbEZ1bmN0aW9uQ2FjaGUoKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiX2xvY2FsRnVuY3Rpb25DYWNoZSIsbmV3IG8uTG9jYWxGdW5jdGlvbkNhY2hlKX19O2Z1bmN0aW9uIHRvTnVtYmVyQXJyYXkoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmxlbmd0aDtmb3IobGV0IGE9MDthPHQ7YSsrKWlmKCJudW1iZXIiIT10eXBlb2YgZVthXSl7Y29uc3QgYT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKylhW3JdPStlW3JdO3JldHVybiBhfXJldHVybiBlfWNsYXNzIFBERkZ1bmN0aW9ue3N0YXRpYyBnZXRTYW1wbGVBcnJheShlLHQsYSxyKXtsZXQgaSxuLHM9MTtmb3IoaT0wLG49ZS5sZW5ndGg7aTxuO2krKylzKj1lW2ldO3MqPXQ7Y29uc3Qgbz1uZXcgQXJyYXkocyk7bGV0IGM9MCxsPTA7Y29uc3QgaD0xLygyKiphLTEpLHU9ci5nZXRCeXRlcygocyphKzcpLzgpO2xldCBkPTA7Zm9yKGk9MDtpPHM7aSsrKXtmb3IoO2M8YTspe2w8PD04O2x8PXVbZCsrXTtjKz04fWMtPWE7b1tpXT0obD4+YykqaDtsJj0oMTw8YyktMX1yZXR1cm4gb31zdGF0aWMgcGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphfSl7Y29uc3Qgcj1hLmRpY3R8fGE7c3dpdGNoKHIuZ2V0KCJGdW5jdGlvblR5cGUiKSl7Y2FzZSAwOnJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphLGRpY3Q6cn0pO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDpyfSk7Y2FzZSAzOnJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxkaWN0OnJ9KTtjYXNlIDQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSl9dGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZSBvZiBmdW5jdGlvbiIpfXN0YXRpYyBwYXJzZUFycmF5KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm5PYmo6YX0pe2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiB0aGlzLnBhcnNlKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46YX0pO2NvbnN0IHI9W107Zm9yKGNvbnN0IGkgb2YgYSlyLnB1c2godGhpcy5wYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmUuZmV0Y2hJZlJlZihpKX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0LGEsaSl7Zm9yKGxldCBuPTAscz1yLmxlbmd0aDtuPHM7bisrKXJbbl0oZSx0LGEsaStuKX19c3RhdGljIGNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphLGRpY3Q6cn0pe2Z1bmN0aW9uIHRvTXVsdGlBcnJheShlKXtjb25zdCB0PWUubGVuZ3RoLGE9W107bGV0IHI9MDtmb3IobGV0IGk9MDtpPHQ7aSs9MilhW3IrK109W2VbaV0sZVtpKzFdXTtyZXR1cm4gYX1mdW5jdGlvbiBpbnRlcnBvbGF0ZShlLHQsYSxyLGkpe3JldHVybiByKyhpLXIpLyhhLXQpKihlLXQpfWxldCBuPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJSYW5nZSIpKTtpZighbnx8IXMpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO2NvbnN0IG89bi5sZW5ndGgvMixjPXMubGVuZ3RoLzI7bj10b011bHRpQXJyYXkobik7cz10b011bHRpQXJyYXkocyk7Y29uc3QgbD10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIlNpemUiKSksaD1yLmdldCgiQml0c1BlclNhbXBsZSIpLHU9ci5nZXQoIk9yZGVyIil8fDE7MSE9PXUmJigwLGkuaW5mbykoIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAiK3UpO2xldCBkPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRW5jb2RlIikpO2lmKGQpZD10b011bHRpQXJyYXkoZCk7ZWxzZXtkPVtdO2ZvcihsZXQgZT0wO2U8bzsrK2UpZC5wdXNoKFswLGxbZV0tMV0pfWxldCBmPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRGVjb2RlIikpO2Y9Zj90b011bHRpQXJyYXkoZik6cztjb25zdCBnPXRoaXMuZ2V0U2FtcGxlQXJyYXkobCxjLGgsYSk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGbihlLHQsYSxyKXtjb25zdCBpPTE8PG8saD1uZXcgRmxvYXQ2NEFycmF5KGkpLHU9bmV3IFVpbnQzMkFycmF5KGkpO2xldCBwLG07Zm9yKG09MDttPGk7bSsrKWhbbV09MTtsZXQgYj1jLHk9MTtmb3IocD0wO3A8bzsrK3Ape2NvbnN0IGE9bltwXVswXSxyPW5bcF1bMV07bGV0IHM9aW50ZXJwb2xhdGUoTWF0aC5taW4oTWF0aC5tYXgoZVt0K3BdLGEpLHIpLGEscixkW3BdWzBdLGRbcF1bMV0pO2NvbnN0IG89bFtwXTtzPU1hdGgubWluKE1hdGgubWF4KHMsMCksby0xKTtjb25zdCBjPXM8by0xP01hdGguZmxvb3Iocyk6cy0xLGY9YysxLXMsZz1zLWMsdz1jKmIsUz13K2I7Zm9yKG09MDttPGk7bSsrKWlmKG0meSl7aFttXSo9Zzt1W21dKz1TfWVsc2V7aFttXSo9Zjt1W21dKz13fWIqPW87eTw8PTF9Zm9yKG09MDttPGM7KyttKXtsZXQgZT0wO2ZvcihwPTA7cDxpO3ArKyllKz1nW3VbcF0rbV0qaFtwXTtlPWludGVycG9sYXRlKGUsMCwxLGZbbV1bMF0sZlttXVsxXSk7YVtyK21dPU1hdGgubWluKE1hdGgubWF4KGUsc1ttXVswXSksc1ttXVsxXSl9fX1zdGF0aWMgY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDphfSl7Y29uc3Qgcj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkMwIikpfHxbMF0saT10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkMxIikpfHxbMV0sbj1hLmdldCgiTiIpLHM9W107Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7KytlKXMucHVzaChpW2VdLXJbZV0pO2NvbnN0IG89cy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKGUsdCxhLGkpe2NvbnN0IGM9MT09PW4/ZVt0XTplW3RdKipuO2ZvcihsZXQgZT0wO2U8bzsrK2UpYVtpK2VdPXJbZV0rYypzW2VdfX1zdGF0aWMgY29uc3RydWN0U3RpY2hlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6YX0pe2NvbnN0IHI9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJEb21haW4iKSk7aWYoIXIpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiIpO2lmKDEhPT1yLmxlbmd0aC8yKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7Y29uc3Qgbj1bXTtmb3IoY29uc3QgciBvZiBhLmdldCgiRnVuY3Rpb25zIikpbi5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjplLmZldGNoSWZSZWYocil9KSk7Y29uc3Qgcz10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkJvdW5kcyIpKSxvPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRW5jb2RlIikpLGM9bmV3IEZsb2F0MzJBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZuKGUsdCxhLGkpe2NvbnN0IGw9ZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZyb21JUkNsaXAoZSx0LGEpe2U+YT9lPWE6ZTx0JiYoZT10KTtyZXR1cm4gZX0oZVt0XSxyWzBdLHJbMV0pLGg9cy5sZW5ndGg7bGV0IHU7Zm9yKHU9MDt1PGgmJiEobDxzW3VdKTsrK3UpO2xldCBkPXJbMF07dT4wJiYoZD1zW3UtMV0pO2xldCBmPXJbMV07dTxzLmxlbmd0aCYmKGY9c1t1XSk7Y29uc3QgZz1vWzIqdV0scD1vWzIqdSsxXTtjWzBdPWQ9PT1mP2c6ZysobC1kKSoocC1nKS8oZi1kKTtuW3VdKGMsMCxhLGkpfX1zdGF0aWMgY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSl7Y29uc3Qgcz10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIkRvbWFpbiIpKSxvPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiUmFuZ2UiKSk7aWYoIXMpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbi4iKTtpZighbyl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiTm8gcmFuZ2UuIik7Y29uc3QgYz1uZXcgbi5Qb3N0U2NyaXB0TGV4ZXIoYSksbD1uZXcgbi5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmaS5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe2NvbnN0IGU9KG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIpLmNvbXBpbGUobCxzLG8pO2lmKGUpcmV0dXJuIG5ldyBGdW5jdGlvbigic3JjIiwic3JjT2Zmc2V0IiwiZGVzdCIsImRlc3RPZmZzZXQiLGUpfSgwLGkuaW5mbykoIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uIik7Y29uc3QgaD1vLmxlbmd0aD4+MSx1PXMubGVuZ3RoPj4xLGQ9bmV3IFBvc3RTY3JpcHRFdmFsdWF0b3IobCksZj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBnPTgxOTI7Y29uc3QgcD1uZXcgRmxvYXQzMkFycmF5KHUpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RQb3N0U2NyaXB0Rm4oZSx0LGEscil7bGV0IGksbixzPSIiO2NvbnN0IGM9cDtmb3IoaT0wO2k8dTtpKyspe249ZVt0K2ldO2NbaV09bjtzKz1uKyJfIn1jb25zdCBsPWZbc107aWYodm9pZCAwIT09bCl7YS5zZXQobCxyKTtyZXR1cm59Y29uc3QgbT1uZXcgRmxvYXQzMkFycmF5KGgpLGI9ZC5leGVjdXRlKGMpLHk9Yi5sZW5ndGgtaDtmb3IoaT0wO2k8aDtpKyspe249Ylt5K2ldO2xldCBlPW9bMippXTtpZihuPGUpbj1lO2Vsc2V7ZT1vWzIqaSsxXTtuPmUmJihuPWUpfW1baV09bn1pZihnPjApe2ctLTtmW3NdPW19YS5zZXQobSxyKX19fWNsYXNzIFBvc3RTY3JpcHRTdGFja3tzdGF0aWMgTUFYX1NUQUNLX1NJWkU9MTAwO2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RhY2s9ZT9BcnJheS5mcm9tKGUpOltdfXB1c2goZSl7aWYodGhpcy5zdGFjay5sZW5ndGg+PVBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7dGhpcy5zdGFjay5wdXNoKGUpfXBvcCgpe2lmKHRoaXMuc3RhY2subGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayB1bmRlcmZsb3cuIik7cmV0dXJuIHRoaXMuc3RhY2sucG9wKCl9Y29weShlKXtpZih0aGlzLnN0YWNrLmxlbmd0aCtlPj1Qb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO2NvbnN0IHQ9dGhpcy5zdGFjaztmb3IobGV0IGE9dC5sZW5ndGgtZSxyPWUtMTtyPj0wO3ItLSxhKyspdC5wdXNoKHRbYV0pfWluZGV4KGUpe3RoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWUtMV0pfXJvbGwoZSx0KXtjb25zdCBhPXRoaXMuc3RhY2sscj1hLmxlbmd0aC1lLGk9YS5sZW5ndGgtMSxuPXIrKHQtTWF0aC5mbG9vcih0L2UpKmUpO2ZvcihsZXQgZT1yLHQ9aTtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9Zm9yKGxldCBlPXIsdD1uLTE7ZTx0O2UrKyx0LS0pe2NvbnN0IHI9YVtlXTthW2VdPWFbdF07YVt0XT1yfWZvcihsZXQgZT1uLHQ9aTtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9fX1jbGFzcyBQb3N0U2NyaXB0RXZhbHVhdG9ye2NvbnN0cnVjdG9yKGUpe3RoaXMub3BlcmF0b3JzPWV9ZXhlY3V0ZShlKXtjb25zdCB0PW5ldyBQb3N0U2NyaXB0U3RhY2soZSk7bGV0IGE9MDtjb25zdCByPXRoaXMub3BlcmF0b3JzLG49ci5sZW5ndGg7bGV0IHMsbyxjO2Zvcig7YTxuOyl7cz1yW2ErK107aWYoIm51bWJlciIhPXR5cGVvZiBzKXN3aXRjaChzKXtjYXNlImp6IjpjPXQucG9wKCk7bz10LnBvcCgpO298fChhPWMpO2JyZWFrO2Nhc2UiaiI6bz10LnBvcCgpO2E9bzticmVhaztjYXNlImFicyI6bz10LnBvcCgpO3QucHVzaChNYXRoLmFicyhvKSk7YnJlYWs7Y2FzZSJhZGQiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8rYyk7YnJlYWs7Y2FzZSJhbmQiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyYmYyk6dC5wdXNoKG8mYyk7YnJlYWs7Y2FzZSJhdGFuIjpjPXQucG9wKCk7bz10LnBvcCgpO289TWF0aC5hdGFuMihvLGMpL01hdGguUEkqMTgwO288MCYmKG8rPTM2MCk7dC5wdXNoKG8pO2JyZWFrO2Nhc2UiYml0c2hpZnQiOmM9dC5wb3AoKTtvPXQucG9wKCk7bz4wP3QucHVzaChvPDxjKTp0LnB1c2gobz4+Yyk7YnJlYWs7Y2FzZSJjZWlsaW5nIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguY2VpbChvKSk7YnJlYWs7Y2FzZSJjb3B5IjpvPXQucG9wKCk7dC5jb3B5KG8pO2JyZWFrO2Nhc2UiY29zIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguY29zKG8lMzYwLzE4MCpNYXRoLlBJKSk7YnJlYWs7Y2FzZSJjdmkiOm89MHx0LnBvcCgpO3QucHVzaChvKTticmVhaztjYXNlImN2ciI6YnJlYWs7Y2FzZSJkaXYiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8vYyk7YnJlYWs7Y2FzZSJkdXAiOnQuY29weSgxKTticmVhaztjYXNlImVxIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPT09Yyk7YnJlYWs7Y2FzZSJleGNoIjp0LnJvbGwoMiwxKTticmVhaztjYXNlImV4cCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobyoqYyk7YnJlYWs7Y2FzZSJmYWxzZSI6dC5wdXNoKCExKTticmVhaztjYXNlImZsb29yIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguZmxvb3IobykpO2JyZWFrO2Nhc2UiZ2UiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8+PWMpO2JyZWFrO2Nhc2UiZ3QiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8+Yyk7YnJlYWs7Y2FzZSJpZGl2IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvL2N8MCk7YnJlYWs7Y2FzZSJpbmRleCI6bz10LnBvcCgpO3QuaW5kZXgobyk7YnJlYWs7Y2FzZSJsZSI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobzw9Yyk7YnJlYWs7Y2FzZSJsbiI6bz10LnBvcCgpO3QucHVzaChNYXRoLmxvZyhvKSk7YnJlYWs7Y2FzZSJsb2ciOm89dC5wb3AoKTt0LnB1c2goTWF0aC5sb2cobykvTWF0aC5MTjEwKTticmVhaztjYXNlImx0IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPGMpO2JyZWFrO2Nhc2UibW9kIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvJWMpO2JyZWFrO2Nhc2UibXVsIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvKmMpO2JyZWFrO2Nhc2UibmUiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8hPT1jKTticmVhaztjYXNlIm5lZyI6bz10LnBvcCgpO3QucHVzaCgtbyk7YnJlYWs7Y2FzZSJub3QiOm89dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBvP3QucHVzaCghbyk6dC5wdXNoKH5vKTticmVhaztjYXNlIm9yIjpjPXQucG9wKCk7bz10LnBvcCgpOyJib29sZWFuIj09dHlwZW9mIG8mJiJib29sZWFuIj09dHlwZW9mIGM/dC5wdXNoKG98fGMpOnQucHVzaChvfGMpO2JyZWFrO2Nhc2UicG9wIjp0LnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnJvbGwobyxjKTticmVhaztjYXNlInJvdW5kIjpvPXQucG9wKCk7dC5wdXNoKE1hdGgucm91bmQobykpO2JyZWFrO2Nhc2Uic2luIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc2luKG8lMzYwLzE4MCpNYXRoLlBJKSk7YnJlYWs7Y2FzZSJzcXJ0IjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc3FydChvKSk7YnJlYWs7Y2FzZSJzdWIiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8tYyk7YnJlYWs7Y2FzZSJ0cnVlIjp0LnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOm89dC5wb3AoKTtvPW88MD9NYXRoLmNlaWwobyk6TWF0aC5mbG9vcihvKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJ4b3IiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyE9PWMpOnQucHVzaChvXmMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtzfWApfWVsc2UgdC5wdXNoKHMpfXJldHVybiB0LnN0YWNrfX10LlBvc3RTY3JpcHRFdmFsdWF0b3I9UG9zdFNjcmlwdEV2YWx1YXRvcjtjbGFzcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUpe3RoaXMudHlwZT1lfXZpc2l0KGUpeygwLGkudW5yZWFjaGFibGUpKCJhYnN0cmFjdCBtZXRob2QiKX19Y2xhc3MgQXN0QXJndW1lbnQgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiYXJncyIpO3RoaXMuaW5kZXg9ZTt0aGlzLm1pbj10O3RoaXMubWF4PWF9dmlzaXQoZSl7ZS52aXNpdEFyZ3VtZW50KHRoaXMpfX1jbGFzcyBBc3RMaXRlcmFsIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigibGl0ZXJhbCIpO3RoaXMubnVtYmVyPWU7dGhpcy5taW49ZTt0aGlzLm1heD1lfXZpc2l0KGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1jbGFzcyBBc3RCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhLHIsaSl7c3VwZXIoImJpbmFyeSIpO3RoaXMub3A9ZTt0aGlzLmFyZzE9dDt0aGlzLmFyZzI9YTt0aGlzLm1pbj1yO3RoaXMubWF4PWl9dmlzaXQoZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19Y2xhc3MgQXN0TWluIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJtYXgiKTt0aGlzLmFyZz1lO3RoaXMubWluPWUubWluO3RoaXMubWF4PXR9dmlzaXQoZSl7ZS52aXNpdE1pbih0aGlzKX19Y2xhc3MgQXN0VmFyaWFibGUgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigidmFyIik7dGhpcy5pbmRleD1lO3RoaXMubWluPXQ7dGhpcy5tYXg9YX12aXNpdChlKXtlLnZpc2l0VmFyaWFibGUodGhpcyl9fWNsYXNzIEFzdFZhcmlhYmxlRGVmaW5pdGlvbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiZGVmaW5pdGlvbiIpO3RoaXMudmFyaWFibGU9ZTt0aGlzLmFyZz10fXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZURlZmluaXRpb24odGhpcyl9fWNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcntjb25zdHJ1Y3Rvcigpe3RoaXMucGFydHM9W119dmlzaXRBcmd1bWVudChlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWF4KCIsZS5taW4sIiwgTWF0aC5taW4oIixlLm1heCwiLCBzcmNbc3JjT2Zmc2V0ICsgIixlLmluZGV4LCJdKSkiKX12aXNpdFZhcmlhYmxlKGUpe3RoaXMucGFydHMucHVzaCgidiIsZS5pbmRleCl9dmlzaXRMaXRlcmFsKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9dmlzaXRCaW5hcnlPcGVyYXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCIoIik7ZS5hcmcxLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiICIsZS5vcCwiICIpO2UuYXJnMi52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIikiKX12aXNpdFZhcmlhYmxlRGVmaW5pdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goInZhciAiKTtlLnZhcmlhYmxlLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiID0gIik7ZS5hcmcudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCI7Iil9dmlzaXRNaW4oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKTtlLmFyZy52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFydHMuam9pbigiIil9fWZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBBc3RMaXRlcmFsKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIGJ1aWxkTXVsT3BlcmF0aW9uKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fWNvbnN0IGE9TWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLHI9TWF0aC5tYXgoZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpO3JldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIqIixlLHQsYSxyKX1mdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IEFzdExpdGVyYWwoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCItIixlLHQsZS5taW4tdC5tYXgsZS5tYXgtdC5taW4pfWZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyBBc3RMaXRlcmFsKHQpOmUubWF4PD10P2U6bmV3IEFzdE1pbihlLHQpfWNsYXNzIFBvc3RTY3JpcHRDb21waWxlcntjb21waWxlKGUsdCxhKXtjb25zdCByPVtdLGk9W10sbj10Lmxlbmd0aD4+MSxzPWEubGVuZ3RoPj4xO2xldCBvLGMsbCxoLHUsZCxmLGcscD0wO2ZvcihsZXQgZT0wO2U8bjtlKyspci5wdXNoKG5ldyBBc3RBcmd1bWVudChlLHRbMiplXSx0WzIqZSsxXSkpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Zz1lW3RdO2lmKCJudW1iZXIiIT10eXBlb2YgZylzd2l0Y2goZyl7Y2FzZSJhZGQiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJjdnIiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJleGNoIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO3U9ci5wb3AoKTtkPXIucG9wKCk7ci5wdXNoKHUsZCk7YnJlYWs7Y2FzZSJwb3AiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7ci5wb3AoKTticmVhaztjYXNlImluZGV4IjppZihyLmxlbmd0aDwxKXJldHVybiBudWxsO2w9ci5wb3AoKTtpZigibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7bz1sLm51bWJlcjtpZihvPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxyLmxlbmd0aDxvKXJldHVybiBudWxsO3U9cltyLmxlbmd0aC1vLTFdO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtby0xXT1mO3IucHVzaChmKTtpLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbihmLHUpKTticmVhaztjYXNlImR1cCI6aWYoci5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibnVtYmVyIj09dHlwZW9mIGVbdCsxXSYmImd0Ij09PWVbdCsyXSYmZVt0KzNdPT09dCs3JiYianoiPT09ZVt0KzRdJiYicG9wIj09PWVbdCs1XSYmZVt0KzZdPT09ZVt0KzFdKXtsPXIucG9wKCk7ci5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKGwsZVt0KzFdKSk7dCs9NjticmVha311PXIuYXQoLTEpO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtMV09ZjtyLnB1c2goZik7aS5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24oZix1KSk7YnJlYWs7Y2FzZSJyb2xsIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO2g9ci5wb3AoKTtsPXIucG9wKCk7aWYoImxpdGVyYWwiIT09aC50eXBlfHwibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7Yz1oLm51bWJlcjtvPWwubnVtYmVyO2lmKG88PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKXx8ci5sZW5ndGg8bylyZXR1cm4gbnVsbDtjPShjJW8rbyklbztpZigwPT09YylicmVhaztyLnB1c2goLi4uci5zcGxpY2Uoci5sZW5ndGgtbyxvLWMpKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfWVsc2Ugci5wdXNoKG5ldyBBc3RMaXRlcmFsKGcpKX1pZihyLmxlbmd0aCE9PXMpcmV0dXJuIG51bGw7Y29uc3QgbT1bXTtmb3IoY29uc3QgZSBvZiBpKXtjb25zdCB0PW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7ZS52aXNpdCh0KTttLnB1c2godC50b1N0cmluZygpKX1mb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9cltlXSxpPW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7dC52aXNpdChpKTtjb25zdCBuPWFbMiplXSxzPWFbMiplKzFdLG89W2kudG9TdHJpbmcoKV07aWYobj50Lm1pbil7by51bnNoaWZ0KCJNYXRoLm1heCgiLG4sIiwgIik7by5wdXNoKCIpIil9aWYoczx0Lm1heCl7by51bnNoaWZ0KCJNYXRoLm1pbigiLHMsIiwgIik7by5wdXNoKCIpIil9by51bnNoaWZ0KCJkZXN0W2Rlc3RPZmZzZXQgKyAiLGUsIl0gPSAiKTtvLnB1c2goIjsiKTttLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG0uam9pbigiXG4iKX19dC5Qb3N0U2NyaXB0Q29tcGlsZXI9UG9zdFNjcmlwdENvbXBpbGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdFBhcnNlcj10LlBvc3RTY3JpcHRMZXhlcj12b2lkIDA7dmFyIHI9YSgyKSxpPWEoNCksbj1hKDMpO3QuUG9zdFNjcmlwdFBhcnNlcj1jbGFzcyBQb3N0U2NyaXB0UGFyc2Vye2NvbnN0cnVjdG9yKGUpe3RoaXMubGV4ZXI9ZTt0aGlzLm9wZXJhdG9ycz1bXTt0aGlzLnRva2VuPW51bGw7dGhpcy5wcmV2PW51bGx9bmV4dFRva2VuKCl7dGhpcy5wcmV2PXRoaXMudG9rZW47dGhpcy50b2tlbj10aGlzLmxleGVyLmdldFRva2VuKCl9YWNjZXB0KGUpe2lmKHRoaXMudG9rZW4udHlwZT09PWUpe3RoaXMubmV4dFRva2VuKCk7cmV0dXJuITB9cmV0dXJuITF9ZXhwZWN0KGUpe2lmKHRoaXMuYWNjZXB0KGUpKXJldHVybiEwO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmV4cGVjdGVkIHN5bWJvbDogZm91bmQgJHt0aGlzLnRva2VuLnR5cGV9IGV4cGVjdGVkICR7ZX0uYCl9cGFyc2UoKXt0aGlzLm5leHRUb2tlbigpO3RoaXMuZXhwZWN0KHMuTEJSQUNFKTt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7cmV0dXJuIHRoaXMub3BlcmF0b3JzfXBhcnNlQmxvY2soKXtmb3IoOzspaWYodGhpcy5hY2NlcHQocy5OVU1CRVIpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNlIGlmKHRoaXMuYWNjZXB0KHMuT1BFUkFUT1IpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNle2lmKCF0aGlzLmFjY2VwdChzLkxCUkFDRSkpcmV0dXJuO3RoaXMucGFyc2VDb25kaXRpb24oKX19cGFyc2VDb25kaXRpb24oKXtjb25zdCBlPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qocy5SQlJBQ0UpO2lmKHRoaXMuYWNjZXB0KHMuSUYpKXt0aGlzLm9wZXJhdG9yc1tlXT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifWVsc2V7aWYoIXRoaXMuYWNjZXB0KHMuTEJSQUNFKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiUFMgRnVuY3Rpb246IGVycm9yIHBhcnNpbmcgY29uZGl0aW9uYWwuIik7e2NvbnN0IHQ9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKTtjb25zdCBhPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7dGhpcy5leHBlY3Qocy5JRkVMU0UpO3RoaXMub3BlcmF0b3JzW3RdPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9yc1t0KzFdPSJqIjt0aGlzLm9wZXJhdG9yc1tlXT1hO3RoaXMub3BlcmF0b3JzW2UrMV09Imp6In19fX07Y29uc3Qgcz17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fTtjbGFzcyBQb3N0U2NyaXB0VG9rZW57c3RhdGljIGdldCBvcENhY2hlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIm9wQ2FjaGUiLE9iamVjdC5jcmVhdGUobnVsbCkpfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy50eXBlPWU7dGhpcy52YWx1ZT10fXN0YXRpYyBnZXRPcGVyYXRvcihlKXtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLm9wQ2FjaGVbZV18fD1uZXcgUG9zdFNjcmlwdFRva2VuKHMuT1BFUkFUT1IsZSl9c3RhdGljIGdldCBMQlJBQ0UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTEJSQUNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuTEJSQUNFLCJ7IikpfXN0YXRpYyBnZXQgUkJSQUNFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIlJCUkFDRSIsbmV3IFBvc3RTY3JpcHRUb2tlbihzLlJCUkFDRSwifSIpKX1zdGF0aWMgZ2V0IElGKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIklGIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuSUYsIklGIikpfXN0YXRpYyBnZXQgSUZFTFNFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIklGRUxTRSIsbmV3IFBvc3RTY3JpcHRUb2tlbihzLklGRUxTRSwiSUZFTFNFIikpfX10LlBvc3RTY3JpcHRMZXhlcj1jbGFzcyBQb3N0U2NyaXB0TGV4ZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W119bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9Z2V0VG9rZW4oKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZih0PDApcmV0dXJuIGkuRU9GO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoISgwLG4uaXNXaGl0ZVNwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1zd2l0Y2goMHx0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiBuZXcgUG9zdFNjcmlwdFRva2VuKHMuTlVNQkVSLHRoaXMuZ2V0TnVtYmVyKCkpO2Nhc2UgMTIzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLkxCUkFDRTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5SQlJBQ0V9Y29uc3QgYT10aGlzLnN0ckJ1ZjthLmxlbmd0aD0wO2FbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTtmb3IoOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJih0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjIpOylhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk7Y29uc3Qgcj1hLmpvaW4oIiIpO3N3aXRjaChyLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaWYiOnJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUZFTFNFO2RlZmF1bHQ6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5nZXRPcGVyYXRvcihyKX19Z2V0TnVtYmVyKCl7bGV0IGU9dGhpcy5jdXJyZW50Q2hhcjtjb25zdCB0PXRoaXMuc3RyQnVmO3QubGVuZ3RoPTA7dFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmKGU+PTQ4JiZlPD01N3x8NDU9PT1lfHw0Nj09PWUpOyl0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29uc3QgYT1wYXJzZUZsb2F0KHQuam9pbigiIikpO2lmKGlzTmFOKGEpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlcjogJHthfWApO3JldHVybiBhfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5SZWdpb25hbEltYWdlQ2FjaGU9dC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT10LkxvY2FsSW1hZ2VDYWNoZT10LkxvY2FsR1N0YXRlQ2FjaGU9dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT10Lkdsb2JhbEltYWdlQ2FjaGU9dm9pZCAwO3ZhciByPWEoMiksaT1hKDQpO2NsYXNzIEJhc2VMb2NhbENhY2hle2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlTG9jYWxDYWNoZSYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VMb2NhbENhY2hlLiIpO3RoaXMuX29ubHlSZWZzPSEwPT09ZT8ub25seVJlZnM7aWYoIXRoaXMuX29ubHlSZWZzKXt0aGlzLl9uYW1lUmVmTWFwPW5ldyBNYXA7dGhpcy5faW1hZ2VNYXA9bmV3IE1hcH10aGlzLl9pbWFnZUNhY2hlPW5ldyBpLlJlZlNldENhY2hlfWdldEJ5TmFtZShlKXt0aGlzLl9vbmx5UmVmcyYmKDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBgZ2V0QnlOYW1lYCBtZXRob2QuIik7Y29uc3QgdD10aGlzLl9uYW1lUmVmTWFwLmdldChlKTtyZXR1cm4gdD90aGlzLmdldEJ5UmVmKHQpOnRoaXMuX2ltYWdlTWFwLmdldChlKXx8bnVsbH1nZXRCeVJlZihlKXtyZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQoZSl8fG51bGx9c2V0KGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC4iKX19dC5Mb2NhbEltYWdlQ2FjaGU9Y2xhc3MgTG9jYWxJbWFnZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGUsdD1udWxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsQ29sb3JTcGFjZUNhY2hlPWNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGU9bnVsbCx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO251bGwhPT1lJiZ0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGEpfX07dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9Y2xhc3MgTG9jYWxGdW5jdGlvbkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxGdW5jdGlvbkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfX07dC5Mb2NhbEdTdGF0ZUNhY2hlPWNsYXNzIExvY2FsR1N0YXRlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPWNsYXNzIExvY2FsVGlsaW5nUGF0dGVybkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9fTt0LlJlZ2lvbmFsSW1hZ2VDYWNoZT1jbGFzcyBSZWdpb25hbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoZT1udWxsLHQsYSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCdSZWdpb25hbEltYWdlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9fTtjbGFzcyBHbG9iYWxJbWFnZUNhY2hle3N0YXRpYyBOVU1fUEFHRVNfVEhSRVNIT0xEPTI7c3RhdGljIE1JTl9JTUFHRVNfVE9fQ0FDSEU9MTA7c3RhdGljIE1BWF9CWVRFX1NJWkU9NSpyLk1BWF9JTUFHRV9TSVpFX1RPX0NBQ0hFO2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVmQ2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGU7dGhpcy5faW1hZ2VDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZX1nZXQgX2J5dGVTaXplKCl7bGV0IGU9MDtmb3IoY29uc3QgdCBvZiB0aGlzLl9pbWFnZUNhY2hlKWUrPXQuYnl0ZVNpemU7cmV0dXJuIGV9Z2V0IF9jYWNoZUxpbWl0UmVhY2hlZCgpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTUlOX0lNQUdFU19UT19DQUNIRSkmJiEodGhpcy5fYnl0ZVNpemU8R2xvYmFsSW1hZ2VDYWNoZS5NQVhfQllURV9TSVpFKX1zaG91bGRDYWNoZShlLHQpe2xldCBhPXRoaXMuX3JlZkNhY2hlLmdldChlKTtpZighYSl7YT1uZXcgU2V0O3RoaXMuX3JlZkNhY2hlLnB1dChlLGEpfWEuYWRkKHQpO3JldHVybiEoYS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTlVNX1BBR0VTX1RIUkVTSE9MRCkmJiEoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpJiZ0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZCl9YWRkQnl0ZVNpemUoZSx0KXtjb25zdCBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO2EmJihhLmJ5dGVTaXplfHwoYS5ieXRlU2l6ZT10KSl9Z2V0RGF0YShlLHQpe2NvbnN0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpcmV0dXJuIG51bGw7Y29uc3Qgcj10aGlzLl9pbWFnZUNhY2hlLmdldChlKTtpZighcilyZXR1cm4gbnVsbDthLmFkZCh0KTtyZXR1cm4gcn1zZXREYXRhKGUsdCl7aWYoIXRoaXMuX3JlZkNhY2hlLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkICJzaG91bGRDYWNoZSIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkPygwLHIud2FybikoIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9Y2xlYXIoZT0hMSl7ZXx8dGhpcy5fcmVmQ2FjaGUuY2xlYXIoKTt0aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCl9fXQuR2xvYmFsSW1hZ2VDYWNoZT1HbG9iYWxJbWFnZUNhY2hlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuYmlkaT1mdW5jdGlvbiBiaWRpKGUsdD0tMSxhPSExKXtsZXQgYz0hMDtjb25zdCBsPWUubGVuZ3RoO2lmKDA9PT1sfHxhKXJldHVybiBjcmVhdGVCaWRpVGV4dChlLGMsYSk7cy5sZW5ndGg9bDtvLmxlbmd0aD1sO2xldCBoLHUsZD0wO2ZvcihoPTA7aDxsOysraCl7c1toXT1lLmNoYXJBdChoKTtjb25zdCB0PWUuY2hhckNvZGVBdChoKTtsZXQgYT0iTCI7aWYodDw9MjU1KWE9aVt0XTtlbHNlIGlmKDE0MjQ8PXQmJnQ8PTE1MjQpYT0iUiI7ZWxzZSBpZigxNTM2PD10JiZ0PD0xNzkxKXthPW5bMjU1JnRdO2F8fCgwLHIud2FybikoIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIit0LnRvU3RyaW5nKDE2KSl9ZWxzZSgxNzkyPD10JiZ0PD0yMjIwfHw2NDMzNjw9dCYmdDw9NjUwMjN8fDY1MTM2PD10JiZ0PD02NTI3OSkmJihhPSJBTCIpOyJSIiE9PWEmJiJBTCIhPT1hJiYiQU4iIT09YXx8ZCsrO29baF09YX1pZigwPT09ZCl7Yz0hMDtyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxjKX1pZigtMT09PXQpaWYoZC9sPC4zJiZsPjQpe2M9ITA7dD0wfWVsc2V7Yz0hMTt0PTF9Y29uc3QgZj1bXTtmb3IoaD0wO2g8bDsrK2gpZltoXT10O2NvbnN0IGc9aXNPZGQodCk/IlIiOiJMIixwPWcsbT1wO2xldCBiLHk9cDtmb3IoaD0wO2g8bDsrK2gpIk5TTSI9PT1vW2hdP29baF09eTp5PW9baF07eT1wO2ZvcihoPTA7aDxsOysraCl7Yj1vW2hdOyJFTiI9PT1iP29baF09IkFMIj09PXk/IkFOIjoiRU4iOiJSIiE9PWImJiJMIiE9PWImJiJBTCIhPT1ifHwoeT1iKX1mb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiQUwiPT09YiYmKG9baF09IlIiKX1mb3IoaD0xO2g8bC0xOysraCl7IkVTIj09PW9baF0mJiJFTiI9PT1vW2gtMV0mJiJFTiI9PT1vW2grMV0mJihvW2hdPSJFTiIpOyJDUyIhPT1vW2hdfHwiRU4iIT09b1toLTFdJiYiQU4iIT09b1toLTFdfHxvW2grMV0hPT1vW2gtMV18fChvW2hdPW9baC0xXSl9Zm9yKGg9MDtoPGw7KytoKWlmKCJFTiI9PT1vW2hdKXtmb3IobGV0IGU9aC0xO2U+PTAmJiJFVCI9PT1vW2VdOy0tZSlvW2VdPSJFTiI7Zm9yKGxldCBlPWgrMTtlPGwmJiJFVCI9PT1vW2VdOysrZSlvW2VdPSJFTiJ9Zm9yKGg9MDtoPGw7KytoKXtiPW9baF07IldTIiE9PWImJiJFUyIhPT1iJiYiRVQiIT09YiYmIkNTIiE9PWJ8fChvW2hdPSJPTiIpfXk9cDtmb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiRU4iPT09Yj9vW2hdPSJMIj09PXk/IkwiOiJFTiI6IlIiIT09YiYmIkwiIT09Ynx8KHk9Yil9Zm9yKGg9MDtoPGw7KytoKWlmKCJPTiI9PT1vW2hdKXtjb25zdCBlPWZpbmRVbmVxdWFsKG8saCsxLCJPTiIpO2xldCB0PXA7aD4wJiYodD1vW2gtMV0pO2xldCBhPW07ZSsxPGwmJihhPW9bZSsxXSk7IkwiIT09dCYmKHQ9IlIiKTsiTCIhPT1hJiYoYT0iUiIpO3Q9PT1hJiZzZXRWYWx1ZXMobyxoLGUsdCk7aD1lLTF9Zm9yKGg9MDtoPGw7KytoKSJPTiI9PT1vW2hdJiYob1toXT1nKTtmb3IoaD0wO2g8bDsrK2gpe2I9b1toXTtpc0V2ZW4oZltoXSk/IlIiPT09Yj9mW2hdKz0xOiJBTiIhPT1iJiYiRU4iIT09Ynx8KGZbaF0rPTIpOiJMIiE9PWImJiJBTiIhPT1iJiYiRU4iIT09Ynx8KGZbaF0rPTEpfWxldCB3LFM9LTEseD05OTtmb3IoaD0wLHU9Zi5sZW5ndGg7aDx1OysraCl7dz1mW2hdO1M8dyYmKFM9dyk7eD53JiZpc09kZCh3KSYmKHg9dyl9Zm9yKHc9Uzt3Pj14Oy0tdyl7bGV0IGU9LTE7Zm9yKGg9MCx1PWYubGVuZ3RoO2g8dTsrK2gpaWYoZltoXTx3KXtpZihlPj0wKXtyZXZlcnNlVmFsdWVzKHMsZSxoKTtlPS0xfX1lbHNlIGU8MCYmKGU9aCk7ZT49MCYmcmV2ZXJzZVZhbHVlcyhzLGUsZi5sZW5ndGgpfWZvcihoPTAsdT1zLmxlbmd0aDtoPHU7KytoKXtjb25zdCBlPXNbaF07IjwiIT09ZSYmIj4iIT09ZXx8KHNbaF09IiIpfXJldHVybiBjcmVhdGVCaWRpVGV4dChzLmpvaW4oIiIpLGMpfTt2YXIgcj1hKDIpO2NvbnN0IGk9WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLG49WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gaXNPZGQoZSl7cmV0dXJuIDAhPSgxJmUpfWZ1bmN0aW9uIGlzRXZlbihlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gZmluZFVuZXF1YWwoZSx0LGEpe2xldCByLGk7Zm9yKHI9dCxpPWUubGVuZ3RoO3I8aTsrK3IpaWYoZVtyXSE9PWEpcmV0dXJuIHI7cmV0dXJuIHJ9ZnVuY3Rpb24gc2V0VmFsdWVzKGUsdCxhLHIpe2ZvcihsZXQgaT10O2k8YTsrK2kpZVtpXT1yfWZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoZSx0LGEpe2ZvcihsZXQgcj10LGk9YS0xO3I8aTsrK3IsLS1pKXtjb25zdCB0PWVbcl07ZVtyXT1lW2ldO2VbaV09dH19ZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoZSx0LGE9ITEpe2xldCByPSJsdHIiO2E/cj0idHRiIjp0fHwocj0icnRsIik7cmV0dXJue3N0cjplLGRpcjpyfX1jb25zdCBzPVtdLG89W119LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5nZXRGb250U3Vic3RpdHV0aW9uPWZ1bmN0aW9uIGdldEZvbnRTdWJzdGl0dXRpb24oZSx0LGEsdSxkKXtjb25zdCBmPXU9KDAsci5ub3JtYWxpemVGb250TmFtZSkodSk7bGV0IGc9ZS5nZXQoZik7aWYoZylyZXR1cm4gZztsZXQgcD1sLmdldCh1KTtpZighcClmb3IoY29uc3RbZSx0XW9mIGgpaWYodS5zdGFydHNXaXRoKGUpKXt1PWAke3R9JHt1LnN1YnN0cmluZyhlLmxlbmd0aCl9YDtwPWwuZ2V0KHUpO2JyZWFrfWxldCBtPSExO2lmKCFwKXtwPWwuZ2V0KGQpO209ITB9Y29uc3QgYj1gJHt0LmdldERvY0lkKCl9X3Mke3QuY3JlYXRlRm9udElkKCl9YDtpZighcCl7aWYoISgwLGkudmFsaWRhdGVGb250TmFtZSkodSkpe2Uuc2V0KGYsbnVsbCk7cmV0dXJuIG51bGx9Y29uc3QgdD0vYm9sZC9naS50ZXN0KHUpLGE9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QodSk7Zz17Y3NzOmIsZ3Vlc3NGYWxsYmFjazohMCxsb2FkZWROYW1lOmIsYmFzZUZvbnROYW1lOnUsc3JjOmBsb2NhbCgke3V9KWAsc3R5bGU6dCYmYSYmY3x8dCYmc3x8YSYmb3x8bn07ZS5zZXQoZixnKTtyZXR1cm4gZ31jb25zdCB5PVtdO20mJigwLGkudmFsaWRhdGVGb250TmFtZSkodSkmJnkucHVzaChgbG9jYWwoJHt1fSlgKTtjb25zdHtzdHlsZTp3LHVsdGltYXRlOlN9PWdlbmVyYXRlRm9udChwLHksYSkseD1udWxsPT09UztnPXtjc3M6YCR7Yn0ke3g/IiI6YCwke1N9YH1gLGd1ZXNzRmFsbGJhY2s6eCxsb2FkZWROYW1lOmIsYmFzZUZvbnROYW1lOnUsc3JjOnkuam9pbigiLCIpLHN0eWxlOnd9O2Uuc2V0KGYsZyk7cmV0dXJuIGd9O3ZhciByPWEoMzgpLGk9YSgzKTtjb25zdCBuPXtzdHlsZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCJ9LHM9e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiYm9sZCJ9LG89e3N0eWxlOiJpdGFsaWMiLHdlaWdodDoibm9ybWFsIn0sYz17c3R5bGU6Iml0YWxpYyIsd2VpZ2h0OiJib2xkIn0sbD1uZXcgTWFwKFtbIlRpbWVzLVJvbWFuIix7bG9jYWw6WyJUaW1lcyBOZXcgUm9tYW4iLCJUaW1lcy1Sb21hbiIsIlRpbWVzIiwiTGliZXJhdGlvbiBTZXJpZiIsIk5pbWJ1cyBSb21hbiIsIk5pbWJ1cyBSb21hbiBMIiwiVGlub3MiLCJUaG9ybmRhbGUiLCJUZVggR3lyZSBUZXJtZXMiLCJGcmVlU2VyaWYiLCJEZWphVnUgU2VyaWYiLCJCaXRzdHJlYW0gVmVyYSBTZXJpZiIsIlVidW50dSJdLHN0eWxlOm4sdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZCIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6cyx1bHRpbWF0ZToic2VyaWYifV0sWyJUaW1lcy1JdGFsaWMiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOm8sdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZEl0YWxpYyIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6Yyx1bHRpbWF0ZToic2VyaWYifV0sWyJIZWx2ZXRpY2EiLHtsb2NhbDpbIkhlbHZldGljYSIsIkhlbHZldGljYSBOZXVlIiwiQXJpYWwiLCJBcmlhbCBOb3ZhIiwiTGliZXJhdGlvbiBTYW5zIiwiQXJpbW8iLCJOaW1idXMgU2FucyIsIk5pbWJ1cyBTYW5zIEwiLCJBMDMwIiwiVGVYIEd5cmUgSGVyb3MiLCJGcmVlU2FucyIsIkRlamFWdSBTYW5zIiwiQWxiYW55IiwiQml0c3RyZWFtIFZlcmEgU2FucyIsIkFyaWFsIFVuaWNvZGUgTVMiLCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIkFwcGxlIFN5bWJvbHMiLCJDYW50YXJlbGwiXSxwYXRoOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiIsc3R5bGU6bix1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkhlbHZldGljYS1Cb2xkIix7YWxpYXM6IkhlbHZldGljYSIscGF0aDoiTGliZXJhdGlvblNhbnMtQm9sZC50dGYiLHN0eWxlOnMsdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtT2JsaXF1ZSIse2FsaWFzOiJIZWx2ZXRpY2EiLHBhdGg6IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLHN0eWxlOm8sdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLHthbGlhczoiSGVsdmV0aWNhIixwYXRoOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiIsc3R5bGU6Yyx1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkNvdXJpZXIiLHtsb2NhbDpbIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkxpYmVyYXRpb24gTW9ubyIsIk5pbWJ1cyBNb25vIiwiTmltYnVzIE1vbm8gTCIsIkNvdXNpbmUiLCJDdW1iZXJsYW5kIiwiVGVYIEd5cmUgQ3Vyc29yIiwiRnJlZU1vbm8iXSxzdHlsZTpuLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJDb3VyaWVyLUJvbGQiLHthbGlhczoiQ291cmllciIsc3R5bGU6cyx1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQ291cmllci1PYmxpcXVlIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOm8sdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkNvdXJpZXItQm9sZE9ibGlxdWUiLHthbGlhczoiQ291cmllciIsc3R5bGU6Yyx1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQXJpYWxCbGFjayIse2xvY2FsOlsiQXJpYWwgQmxhY2siXSxzdHlsZTp7c3R5bGU6Im5vcm1hbCIsd2VpZ2h0OiI5MDAifSxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGQifV0sWyJBcmlhbEJsYWNrLUJvbGQiLHthbGlhczoiQXJpYWxCbGFjayJ9XSxbIkFyaWFsQmxhY2stSXRhbGljIix7YWxpYXM6IkFyaWFsQmxhY2siLHN0eWxlOntzdHlsZToiaXRhbGljIix3ZWlnaHQ6IjkwMCJ9LGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUifV0sWyJBcmlhbEJsYWNrLUJvbGRJdGFsaWMiLHthbGlhczoiQXJpYWxCbGFjay1JdGFsaWMifV0sWyJBcmlhbE5hcnJvdyIse2xvY2FsOlsiQXJpYWwgTmFycm93IiwiTGliZXJhdGlvbiBTYW5zIE5hcnJvdyIsIkhlbHZldGljYSBDb25kZW5zZWQiLCJOaW1idXMgU2FucyBOYXJyb3ciLCJUZVggR3lyZSBIZXJvcyBDbiJdLHN0eWxlOm4sZmFsbGJhY2s6IkhlbHZldGljYSJ9XSxbIkFyaWFsTmFycm93LUJvbGQiLHthbGlhczoiQXJpYWxOYXJyb3ciLHN0eWxlOnMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxOYXJyb3ctSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpvLGZhbGxiYWNrOiJIZWx2ZXRpY2EtT2JsaXF1ZSJ9XSxbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiLHthbGlhczoiQXJpYWxOYXJyb3ciLHN0eWxlOmMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJ9XSxbIkNhbGlicmkiLHtsb2NhbDpbIkNhbGlicmkiLCJDYXJsaXRvIl0sc3R5bGU6bixmYWxsYmFjazoiSGVsdmV0aWNhIn1dLFsiQ2FsaWJyaS1Cb2xkIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOnMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQ2FsaWJyaS1JdGFsaWMiLHthbGlhczoiQ2FsaWJyaSIsc3R5bGU6byxmYWxsYmFjazoiSGVsdmV0aWNhLU9ibGlxdWUifV0sWyJDYWxpYnJpLUJvbGRJdGFsaWMiLHthbGlhczoiQ2FsaWJyaSIsc3R5bGU6YyxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiV2luZ2RpbmdzIix7bG9jYWw6WyJXaW5nZGluZ3MiLCJVUlcgRGluZ2JhdHMiXSxzdHlsZTpufV0sWyJXaW5nZGluZ3MtUmVndWxhciIse2FsaWFzOiJXaW5nZGluZ3MifV0sWyJXaW5nZGluZ3MtQm9sZCIse2FsaWFzOiJXaW5nZGluZ3MifV1dKSxoPW5ldyBNYXAoW1siQXJpYWwtQmxhY2siLCJBcmlhbEJsYWNrIl1dKTtmdW5jdGlvbiBnZW5lcmF0ZUZvbnQoe2FsaWFzOmUsbG9jYWw6dCxwYXRoOmEsZmFsbGJhY2s6cixzdHlsZTppLHVsdGltYXRlOm59LGgsdSxkPSEwLGY9ITAsZz0iIil7Y29uc3QgcD17c3R5bGU6bnVsbCx1bHRpbWF0ZTpudWxsfTtpZih0KXtjb25zdCBlPWc/YCAke2d9YDoiIjtmb3IoY29uc3QgYSBvZiB0KWgucHVzaChgbG9jYWwoJHthfSR7ZX0pYCl9aWYoZSl7Y29uc3QgdD1sLmdldChlKSxuPWd8fGZ1bmN0aW9uIGdldFN0eWxlVG9BcHBlbmQoZSl7c3dpdGNoKGUpe2Nhc2UgczpyZXR1cm4iQm9sZCI7Y2FzZSBvOnJldHVybiJJdGFsaWMiO2Nhc2UgYzpyZXR1cm4iQm9sZCBJdGFsaWMiO2RlZmF1bHQ6aWYoImJvbGQiPT09ZT8ud2VpZ2h0KXJldHVybiJCb2xkIjtpZigiaXRhbGljIj09PWU/LnN0eWxlKXJldHVybiJJdGFsaWMifXJldHVybiIifShpKTtPYmplY3QuYXNzaWduKHAsZ2VuZXJhdGVGb250KHQsaCx1LGQmJiFyLGYmJiFhLG4pKX1pJiYocC5zdHlsZT1pKTtuJiYocC51bHRpbWF0ZT1uKTtpZihkJiZyKXtjb25zdCBlPWwuZ2V0KHIpLHt1bHRpbWF0ZTp0fT1nZW5lcmF0ZUZvbnQoZSxoLHUsZCxmJiYhYSxnKTtwLnVsdGltYXRlfHw9dH1mJiZhJiZ1JiZoLnB1c2goYHVybCgke3V9JHthfSlgKTtyZXR1cm4gcH19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5JbWFnZVJlc2l6ZXI9dm9pZCAwO3ZhciByPWEoMik7Y2xhc3MgSW1hZ2VSZXNpemVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faW1nRGF0YT1lO3RoaXMuX2lzTWFzaz10fXN0YXRpYyBuZWVkc1RvQmVSZXNpemVkKGUsdCl7aWYoZTw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCYmdDw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aClyZXR1cm4hMTtjb25zdHtNQVhfRElNOmF9PXRoaXM7aWYoZT5hfHx0PmEpcmV0dXJuITA7Y29uc3Qgcj1lKnQ7aWYodGhpcy5faGFzTWF4QXJlYSlyZXR1cm4gcj50aGlzLk1BWF9BUkVBO2lmKHI8dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCoqMilyZXR1cm4hMTtpZih0aGlzLl9hcmVHb29kRGltcyhlLHQpKXt0aGlzLl9nb29kU3F1YXJlTGVuZ3RoPU1hdGgubWF4KHRoaXMuX2dvb2RTcXVhcmVMZW5ndGgsTWF0aC5mbG9vcihNYXRoLnNxcnQoZSp0KSkpO3JldHVybiExfXRoaXMuX2dvb2RTcXVhcmVMZW5ndGg9dGhpcy5fZ3Vlc3NNYXgodGhpcy5fZ29vZFNxdWFyZUxlbmd0aCxhLDEyOCwwKTtyZXR1cm4gcj4odGhpcy5NQVhfQVJFQT10aGlzLl9nb29kU3F1YXJlTGVuZ3RoKioyKX1zdGF0aWMgZ2V0IE1BWF9ESU0oKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUFYX0RJTSIsdGhpcy5fZ3Vlc3NNYXgoMjA0OCw2NTUzNywwLDEpKX1zdGF0aWMgZ2V0IE1BWF9BUkVBKCl7dGhpcy5faGFzTWF4QXJlYT0hMDtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUFYX0FSRUEiLHRoaXMuX2d1ZXNzTWF4KEltYWdlUmVzaXplci5fZ29vZFNxdWFyZUxlbmd0aCx0aGlzLk1BWF9ESU0sMTI4LDApKioyKX1zdGF0aWMgc2V0IE1BWF9BUkVBKGUpe2lmKGU+PTApe3RoaXMuX2hhc01heEFyZWE9ITA7KDAsci5zaGFkb3cpKHRoaXMsIk1BWF9BUkVBIixlKX19c3RhdGljIHNldE1heEFyZWEoZSl7dGhpcy5faGFzTWF4QXJlYXx8KHRoaXMuTUFYX0FSRUE9ZT4+Mil9c3RhdGljIF9hcmVHb29kRGltcyhlLHQpe3RyeXtjb25zdCBhPW5ldyBPZmZzY3JlZW5DYW52YXMoZSx0KSxyPWEuZ2V0Q29udGV4dCgiMmQiKTtyLmZpbGxSZWN0KDAsMCwxLDEpO2NvbnN0IGk9ci5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YVszXTthLndpZHRoPWEuaGVpZ2h0PTE7cmV0dXJuIDAhPT1pfWNhdGNoKGUpe3JldHVybiExfX1zdGF0aWMgX2d1ZXNzTWF4KGUsdCxhLHIpe2Zvcig7ZSthKzE8dDspe2NvbnN0IGE9TWF0aC5mbG9vcigoZSt0KS8yKSxpPXJ8fGE7dGhpcy5fYXJlR29vZERpbXMoYSxpKT9lPWE6dD1hfXJldHVybiBlfXN0YXRpYyBhc3luYyBjcmVhdGVJbWFnZShlLHQ9ITEpe3JldHVybiBuZXcgSW1hZ2VSZXNpemVyKGUsdCkuX2NyZWF0ZUltYWdlKCl9YXN5bmMgX2NyZWF0ZUltYWdlKCl7Y29uc3QgZT10aGlzLl9lbmNvZGVCTVAoKSx0PW5ldyBCbG9iKFtlLmJ1ZmZlcl0se3R5cGU6ImltYWdlL2JtcCJ9KSxhPWNyZWF0ZUltYWdlQml0bWFwKHQpLHtNQVhfQVJFQTpyLE1BWF9ESU06aX09SW1hZ2VSZXNpemVyLHtfaW1nRGF0YTpufT10aGlzLHt3aWR0aDpzLGhlaWdodDpvfT1uLGM9TWF0aC5tYXgocy9pLG8vaSxNYXRoLnNxcnQocypvL3IpKSxsPU1hdGgubWF4KGMsMiksaD1NYXRoLnJvdW5kKDEwKihjKzEuMjUpKS8xMC9sLHU9TWF0aC5mbG9vcihNYXRoLmxvZzIoaCkpLGQ9bmV3IEFycmF5KHUrMikuZmlsbCgyKTtkWzBdPWw7ZC5zcGxpY2UoLTEsMSxoLygxPDx1KSk7bGV0IGY9cyxnPW8scD1hd2FpdCBhO2Zvcihjb25zdCBlIG9mIGQpe2NvbnN0IHQ9ZixhPWc7Zj1NYXRoLmZsb29yKGYvZSktMTtnPU1hdGguZmxvb3IoZy9lKS0xO2NvbnN0IHI9bmV3IE9mZnNjcmVlbkNhbnZhcyhmLGcpO3IuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UocCwwLDAsdCxhLDAsMCxmLGcpO3A9ci50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1uLmRhdGE9bnVsbDtuLmJpdG1hcD1wO24ud2lkdGg9ZjtuLmhlaWdodD1nO3JldHVybiBufV9lbmNvZGVCTVAoKXtjb25zdHt3aWR0aDplLGhlaWdodDp0LGtpbmQ6YX09dGhpcy5faW1nRGF0YTtsZXQgaSxuPXRoaXMuX2ltZ0RhdGEuZGF0YSxzPW5ldyBVaW50OEFycmF5KDApLG89cyxjPTA7c3dpdGNoKGEpe2Nhc2Ugci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6e2k9MTtzPW5ldyBVaW50OEFycmF5KHRoaXMuX2lzTWFzaz9bMjU1LDI1NSwyNTUsMjU1LDAsMCwwLDBdOlswLDAsMCwwLDI1NSwyNTUsMjU1LDI1NV0pO2NvbnN0IGE9ZSs3Pj4zLHI9YSszJi00O2lmKGEhPT1yKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHIqdCk7bGV0IGk9MDtmb3IobGV0IHM9MCxvPXQqYTtzPG87cys9YSxpKz1yKWUuc2V0KG4uc3ViYXJyYXkocyxzK2EpLGkpO249ZX1icmVha31jYXNlIHIuSW1hZ2VLaW5kLlJHQl8yNEJQUDppPTI0O2lmKDMmZSl7Y29uc3QgYT0zKmUscj1hKzMmLTQsaT1yLWEscz1uZXcgVWludDhBcnJheShyKnQpO2xldCBvPTA7Zm9yKGxldCBlPTAscj10KmE7ZTxyO2UrPWEpe2NvbnN0IHQ9bi5zdWJhcnJheShlLGUrYSk7Zm9yKGxldCBlPTA7ZTxhO2UrPTMpe3NbbysrXT10W2UrMl07c1tvKytdPXRbZSsxXTtzW28rK109dFtlXX1vKz1pfW49c31lbHNlIGZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrPTMpe2NvbnN0IHQ9bltlXTtuW2VdPW5bZSsyXTtuW2UrMl09dH1icmVhaztjYXNlIHIuSW1hZ2VLaW5kLlJHQkFfMzJCUFA6aT0zMjtjPTM7bz1uZXcgVWludDhBcnJheSg2OCk7Y29uc3QgYT1uZXcgRGF0YVZpZXcoby5idWZmZXIpO2lmKHIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pe2Euc2V0VWludDMyKDAsMjU1LCEwKTthLnNldFVpbnQzMig0LDY1MjgwLCEwKTthLnNldFVpbnQzMig4LDE2NzExNjgwLCEwKTthLnNldFVpbnQzMigxMiw0Mjc4MTkwMDgwLCEwKX1lbHNle2Euc2V0VWludDMyKDAsNDI3ODE5MDA4MCwhMCk7YS5zZXRVaW50MzIoNCwxNjcxMTY4MCwhMCk7YS5zZXRVaW50MzIoOCw2NTI4MCwhMCk7YS5zZXRVaW50MzIoMTIsMjU1LCEwKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQiKX1sZXQgbD0wO2NvbnN0IGg9NDArby5sZW5ndGgsdT0xNCtoK3MubGVuZ3RoK24ubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkodSksZj1uZXcgRGF0YVZpZXcoZC5idWZmZXIpO2Yuc2V0VWludDE2KGwsMTk3NzgsITApO2wrPTI7Zi5zZXRVaW50MzIobCx1LCEwKTtsKz00O2Yuc2V0VWludDMyKGwsMCwhMCk7bCs9NDtmLnNldFVpbnQzMihsLDE0K2grcy5sZW5ndGgsITApO2wrPTQ7Zi5zZXRVaW50MzIobCxoLCEwKTtsKz00O2Yuc2V0SW50MzIobCxlLCEwKTtsKz00O2Yuc2V0SW50MzIobCwtdCwhMCk7bCs9NDtmLnNldFVpbnQxNihsLDEsITApO2wrPTI7Zi5zZXRVaW50MTYobCxpLCEwKTtsKz0yO2Yuc2V0VWludDMyKGwsYywhMCk7bCs9NDtmLnNldFVpbnQzMihsLDAsITApO2wrPTQ7Zi5zZXRJbnQzMihsLDAsITApO2wrPTQ7Zi5zZXRJbnQzMihsLDAsITApO2wrPTQ7Zi5zZXRVaW50MzIobCxzLmxlbmd0aC80LCEwKTtsKz00O2Yuc2V0VWludDMyKGwsMCwhMCk7bCs9NDtkLnNldChvLGwpO2wrPW8ubGVuZ3RoO2Quc2V0KHMsbCk7bCs9cy5sZW5ndGg7ZC5zZXQobixsKTtyZXR1cm4gZH19dC5JbWFnZVJlc2l6ZXI9SW1hZ2VSZXNpemVyO0ltYWdlUmVzaXplci5fZ29vZFNxdWFyZUxlbmd0aD0yMDQ4fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTXVybXVySGFzaDNfNjQ9dm9pZCAwO3ZhciByPWEoMik7Y29uc3QgaT0zMjg1Mzc3NTIwLG49NDI5NDkwMTc2MCxzPTY1NTM1O3QuTXVybXVySGFzaDNfNjQ9Y2xhc3MgTXVybXVySGFzaDNfNjR7Y29uc3RydWN0b3IoZSl7dGhpcy5oMT1lPzQyOTQ5NjcyOTUmZTppO3RoaXMuaDI9ZT80Mjk0OTY3Mjk1JmU6aX11cGRhdGUoZSl7bGV0IHQsYTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3Q9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7YT0wO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lLmNoYXJDb2RlQXQocik7aWYoaTw9MjU1KXRbYSsrXT1pO2Vsc2V7dFthKytdPWk+Pj44O3RbYSsrXT0yNTUmaX19fWVsc2V7aWYoISgwLHIuaXNBcnJheUJ1ZmZlcikoZSkpdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIElucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuIik7dD1lLnNsaWNlKCk7YT10LmJ5dGVMZW5ndGh9Y29uc3QgaT1hPj4yLG89YS00KmksYz1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCxpKTtsZXQgbD0wLGg9MCx1PXRoaXMuaDEsZD10aGlzLmgyO2NvbnN0IGY9MzQzMjkxODM1MyxnPTQ2MTg0NTkwNyxwPTExNjAxLG09MTM3MTU7Zm9yKGxldCBlPTA7ZTxpO2UrKylpZigxJmUpe2w9Y1tlXTtsPWwqZiZufGwqcCZzO2w9bDw8MTV8bD4+PjE3O2w9bCpnJm58bCptJnM7dV49bDt1PXU8PDEzfHU+Pj4xOTt1PTUqdSszODY0MjkyMTk2fWVsc2V7aD1jW2VdO2g9aCpmJm58aCpwJnM7aD1oPDwxNXxoPj4+MTc7aD1oKmcmbnxoKm0mcztkXj1oO2Q9ZDw8MTN8ZD4+PjE5O2Q9NSpkKzM4NjQyOTIxOTZ9bD0wO3N3aXRjaChvKXtjYXNlIDM6bF49dFs0KmkrMl08PDE2O2Nhc2UgMjpsXj10WzQqaSsxXTw8ODtjYXNlIDE6bF49dFs0KmldO2w9bCpmJm58bCpwJnM7bD1sPDwxNXxsPj4+MTc7bD1sKmcmbnxsKm0mczsxJmk/dV49bDpkXj1sfXRoaXMuaDE9dTt0aGlzLmgyPWR9aGV4ZGlnZXN0KCl7bGV0IGU9dGhpcy5oMSx0PXRoaXMuaDI7ZV49dD4+PjE7ZT0zOTgxODA2Nzk3KmUmbnwzNjA0NSplJnM7dD00MjgzNTQzNTExKnQmbnwoMjk1MDE2Mzc5NyoodDw8MTZ8ZT4+PjE2KSZuKT4+PjE2O2VePXQ+Pj4xO2U9NDQ0OTg0NDAzKmUmbnw2MDQ5OSplJnM7dD0zMzAxODgyMzY2KnQmbnwoMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZuKT4+PjE2O2VePXQ+Pj4xO3JldHVybihlPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9wZXJhdG9yTGlzdD12b2lkIDA7dmFyIHI9YSgyKTtmdW5jdGlvbiBhZGRTdGF0ZShlLHQsYSxyLGkpe2xldCBuPWU7Zm9yKGxldCBlPTAsYT10Lmxlbmd0aC0xO2U8YTtlKyspe2NvbnN0IGE9dFtlXTtuPW5bYV18fD1bXX1uW3QuYXQoLTEpXT17Y2hlY2tGbjphLGl0ZXJhdGVGbjpyLHByb2Nlc3NGbjppfX1jb25zdCBpPVtdO2FkZFN0YXRlKGksW3IuT1BTLnNhdmUsci5PUFMudHJhbnNmb3JtLHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LHIuT1BTLnJlc3RvcmVdLG51bGwsKGZ1bmN0aW9uIGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksaT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIGFbdF09PT1yLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q7Y2FzZSAzOnJldHVybiBhW3RdPT09ci5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICR7aX1gKX0pLChmdW5jdGlvbiBmb3VuZElubGluZUltYWdlR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxpPWUuYXJnc0FycmF5LG49ZS5pQ3VycixzPW4tMyxvPW4tMixjPW4tMSxsPU1hdGgubWluKE1hdGguZmxvb3IoKHQtcykvNCksMjAwKTtpZihsPDEwKXJldHVybiB0LSh0LXMpJTQ7bGV0IGg9MDtjb25zdCB1PVtdO2xldCBkPTAsZj0xLGc9MTtmb3IobGV0IGU9MDtlPGw7ZSsrKXtjb25zdCB0PWlbbysoZTw8MildLGE9aVtjKyhlPDwyKV1bMF07aWYoZithLndpZHRoPjFlMyl7aD1NYXRoLm1heChoLGYpO2crPWQrMjtmPTA7ZD0wfXUucHVzaCh7dHJhbnNmb3JtOnQseDpmLHk6Zyx3OmEud2lkdGgsaDphLmhlaWdodH0pO2YrPWEud2lkdGgrMjtkPU1hdGgubWF4KGQsYS5oZWlnaHQpfWNvbnN0IHA9TWF0aC5tYXgoaCxmKSsxLG09ZytkKzEsYj1uZXcgVWludDhBcnJheShwKm0qNCkseT1wPDwyO2ZvcihsZXQgZT0wO2U8bDtlKyspe2NvbnN0IHQ9aVtjKyhlPDwyKV1bMF0uZGF0YSxhPXVbZV0udzw8MjtsZXQgcj0wLG49dVtlXS54K3VbZV0ueSpwPDwyO2Iuc2V0KHQuc3ViYXJyYXkoMCxhKSxuLXkpO2ZvcihsZXQgaT0wLHM9dVtlXS5oO2k8cztpKyspe2Iuc2V0KHQuc3ViYXJyYXkocixyK2EpLG4pO3IrPWE7bis9eX1iLnNldCh0LnN1YmFycmF5KHItYSxyKSxuKTtmb3IoO24+PTA7KXt0W24tNF09dFtuXTt0W24tM109dFtuKzFdO3Rbbi0yXT10W24rMl07dFtuLTFdPXRbbiszXTt0W24rYV09dFtuK2EtNF07dFtuK2ErMV09dFtuK2EtM107dFtuK2ErMl09dFtuK2EtMl07dFtuK2ErM109dFtuK2EtMV07bi09eX19Y29uc3Qgdz17d2lkdGg6cCxoZWlnaHQ6bX07aWYoZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3QgZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKHAsbSk7ZS5nZXRDb250ZXh0KCIyZCIpLnB1dEltYWdlRGF0YShuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShiLmJ1ZmZlcikscCxtKSwwLDApO3cuYml0bWFwPWUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7dy5kYXRhPW51bGx9ZWxzZXt3LmtpbmQ9ci5JbWFnZUtpbmQuUkdCQV8zMkJQUDt3LmRhdGE9Yn1hLnNwbGljZShzLDQqbCxyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKTtpLnNwbGljZShzLDQqbCxbdyx1XSk7cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShpLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsci5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24gaXRlcmF0ZUltYWdlTWFza0dyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksaT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIGFbdF09PT1yLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogJHtpfWApfSksKGZ1bmN0aW9uIGZvdW5kSW1hZ2VNYXNrR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxpPWUuYXJnc0FycmF5LG49ZS5pQ3VycixzPW4tMyxvPW4tMixjPW4tMTtsZXQgbD1NYXRoLmZsb29yKCh0LXMpLzQpO2lmKGw8MTApcmV0dXJuIHQtKHQtcyklNDtsZXQgaCx1LGQ9ITE7Y29uc3QgZj1pW2NdWzBdLGc9aVtvXVswXSxwPWlbb11bMV0sbT1pW29dWzJdLGI9aVtvXVszXTtpZihwPT09bSl7ZD0hMDtoPW8rNDtsZXQgZT1jKzQ7Zm9yKGxldCB0PTE7dDxsO3QrKyxoKz00LGUrPTQpe3U9aVtoXTtpZihpW2VdWzBdIT09Znx8dVswXSE9PWd8fHVbMV0hPT1wfHx1WzJdIT09bXx8dVszXSE9PWIpe3Q8MTA/ZD0hMTpsPXQ7YnJlYWt9fX1pZihkKXtsPU1hdGgubWluKGwsMWUzKTtjb25zdCBlPW5ldyBGbG9hdDMyQXJyYXkoMipsKTtoPW87Zm9yKGxldCB0PTA7dDxsO3QrKyxoKz00KXt1PWlbaF07ZVt0PDwxXT11WzRdO2VbMSsodDw8MSldPXVbNV19YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTtpLnNwbGljZShzLDQqbCxbZixnLHAsbSxiLGVdKX1lbHNle2w9TWF0aC5taW4obCwxMDApO2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDxsO3QrKyl7dT1pW28rKHQ8PDIpXTtjb25zdCBhPWlbYysodDw8MildWzBdO2UucHVzaCh7ZGF0YTphLmRhdGEsd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsaW50ZXJwb2xhdGU6YS5pbnRlcnBvbGF0ZSxjb3VudDphLmNvdW50LHRyYW5zZm9ybTp1fSl9YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO2kuc3BsaWNlKHMsNCpsLFtlXSl9cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShpLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlWE9iamVjdCxyLk9QUy5yZXN0b3JlXSwoZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmFyZ3NBcnJheSxhPWUuaUN1cnItMjtyZXR1cm4gMD09PXRbYV1bMV0mJjA9PT10W2FdWzJdfSksKGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksaT1lLmFyZ3NBcnJheSxuPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGFbdF09PT1yLk9QUy5zYXZlO2Nhc2UgMTppZihhW3RdIT09ci5PUFMudHJhbnNmb3JtKXJldHVybiExO2NvbnN0IG49ZS5pQ3Vyci0yLHM9aVtuXVswXSxvPWlbbl1bM107cmV0dXJuIGlbdF1bMF09PT1zJiYwPT09aVt0XVsxXSYmMD09PWlbdF1bMl0mJmlbdF1bM109PT1vO2Nhc2UgMjppZihhW3RdIT09ci5PUFMucGFpbnRJbWFnZVhPYmplY3QpcmV0dXJuITE7Y29uc3QgYz1pW2UuaUN1cnItMV1bMF07cmV0dXJuIGlbdF1bMF09PT1jO2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke259YCl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCBhPWUuZm5BcnJheSxpPWUuYXJnc0FycmF5LG49ZS5pQ3VycixzPW4tMyxvPW4tMixjPWlbbi0xXVswXSxsPWlbb11bMF0saD1pW29dWzNdLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1zKS80KSwxZTMpO2lmKHU8MylyZXR1cm4gdC0odC1zKSU0O2NvbnN0IGQ9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2xldCBmPW87Zm9yKGxldCBlPTA7ZTx1O2UrKyxmKz00KXtjb25zdCB0PWlbZl07ZFtlPDwxXT10WzRdO2RbMSsoZTw8MSldPXRbNV19Y29uc3QgZz1bYyxsLGgsZF07YS5zcGxpY2Uocyw0KnUsci5PUFMucGFpbnRJbWFnZVhPYmplY3RSZXBlYXQpO2kuc3BsaWNlKHMsNCp1LGcpO3JldHVybiBzKzF9KSk7YWRkU3RhdGUoaSxbci5PUFMuYmVnaW5UZXh0LHIuT1BTLnNldEZvbnQsci5PUFMuc2V0VGV4dE1hdHJpeCxyLk9QUy5zaG93VGV4dCxyLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbiBpdGVyYXRlU2hvd1RleHRHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LGk9ZS5hcmdzQXJyYXksbj0odC0oZS5pQ3Vyci00KSklNTtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuYmVnaW5UZXh0O2Nhc2UgMTpyZXR1cm4gYVt0XT09PXIuT1BTLnNldEZvbnQ7Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMuc2V0VGV4dE1hdHJpeDtjYXNlIDM6aWYoYVt0XSE9PXIuT1BTLnNob3dUZXh0KXJldHVybiExO2NvbnN0IG49ZS5pQ3Vyci0zLHM9aVtuXVswXSxvPWlbbl1bMV07cmV0dXJuIGlbdF1bMF09PT1zJiZpW3RdWzFdPT09bztjYXNlIDQ6cmV0dXJuIGFbdF09PT1yLk9QUy5lbmRUZXh0fXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZVNob3dUZXh0R3JvdXAgLSBpbnZhbGlkIHBvczogJHtufWApfSksKGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXkscj1lLmFyZ3NBcnJheSxpPWUuaUN1cnIsbj1pLTQscz1pLTMsbz1pLTIsYz1pLTEsbD1pLGg9cltzXVswXSx1PXJbc11bMV07bGV0IGQ9TWF0aC5taW4oTWF0aC5mbG9vcigodC1uKS81KSwxZTMpO2lmKGQ8MylyZXR1cm4gdC0odC1uKSU1O2xldCBmPW47aWYobj49NCYmYVtuLTRdPT09YVtzXSYmYVtuLTNdPT09YVtvXSYmYVtuLTJdPT09YVtjXSYmYVtuLTFdPT09YVtsXSYmcltuLTRdWzBdPT09aCYmcltuLTRdWzFdPT09dSl7ZCsrO2YtPTV9bGV0IGc9Zis0O2ZvcihsZXQgZT0xO2U8ZDtlKyspe2Euc3BsaWNlKGcsMyk7ci5zcGxpY2UoZywzKTtnKz0yfXJldHVybiBnKzF9KSk7Y2xhc3MgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXVlPWV9X29wdGltaXplKCl7fXB1c2goZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKTt0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpO3RoaXMuX29wdGltaXplKCl9Zmx1c2goKXt9cmVzZXQoKXt9fWNsYXNzIFF1ZXVlT3B0aW1pemVyIGV4dGVuZHMgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnN0YXRlPW51bGw7dGhpcy5jb250ZXh0PXtpQ3VycjowLGZuQXJyYXk6ZS5mbkFycmF5LGFyZ3NBcnJheTplLmFyZ3NBcnJheSxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMX07dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfXNldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZChlKXt0aGlzLmNvbnRleHQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZX1fb3B0aW1pemUoKXtjb25zdCBlPXRoaXMucXVldWUuZm5BcnJheTtsZXQgdD10aGlzLmxhc3RQcm9jZXNzZWQsYT1lLmxlbmd0aCxyPXRoaXMuc3RhdGUsbj10aGlzLm1hdGNoO2lmKCFyJiYhbiYmdCsxPT09YSYmIWlbZVt0XV0pe3RoaXMubGFzdFByb2Nlc3NlZD1hO3JldHVybn1jb25zdCBzPXRoaXMuY29udGV4dDtmb3IoO3Q8YTspe2lmKG4pe2lmKCgwLG4uaXRlcmF0ZUZuKShzLHQpKXt0Kys7Y29udGludWV9dD0oMCxuLnByb2Nlc3NGbikocyx0KzEpO2E9ZS5sZW5ndGg7bj1udWxsO3I9bnVsbDtpZih0Pj1hKWJyZWFrfXI9KHJ8fGkpW2VbdF1dO2lmKHImJiFBcnJheS5pc0FycmF5KHIpKXtzLmlDdXJyPXQ7dCsrO2lmKCFyLmNoZWNrRm58fCgwLHIuY2hlY2tGbikocykpe249cjtyPW51bGx9ZWxzZSByPW51bGx9ZWxzZSB0Kyt9dGhpcy5zdGF0ZT1yO3RoaXMubWF0Y2g9bjt0aGlzLmxhc3RQcm9jZXNzZWQ9dH1mbHVzaCgpe2Zvcig7dGhpcy5tYXRjaDspe2NvbnN0IGU9dGhpcy5xdWV1ZS5mbkFycmF5Lmxlbmd0aDt0aGlzLmxhc3RQcm9jZXNzZWQ9KDAsdGhpcy5tYXRjaC5wcm9jZXNzRm4pKHRoaXMuY29udGV4dCxlKTt0aGlzLm1hdGNoPW51bGw7dGhpcy5zdGF0ZT1udWxsO3RoaXMuX29wdGltaXplKCl9fXJlc2V0KCl7dGhpcy5zdGF0ZT1udWxsO3RoaXMubWF0Y2g9bnVsbDt0aGlzLmxhc3RQcm9jZXNzZWQ9MH19Y2xhc3MgT3BlcmF0b3JMaXN0e3N0YXRpYyBDSFVOS19TSVpFPTFlMztzdGF0aWMgQ0hVTktfU0laRV9BQk9VVD10aGlzLkNIVU5LX1NJWkUtNTtjb25zdHJ1Y3RvcihlPTAsdCl7dGhpcy5fc3RyZWFtU2luaz10O3RoaXMuZm5BcnJheT1bXTt0aGlzLmFyZ3NBcnJheT1bXTshdHx8ZSZyLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBOdWxsT3B0aW1pemVyKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBRdWV1ZU9wdGltaXplcih0aGlzKTt0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0O3RoaXMuX3RvdGFsTGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLl9yZXNvbHZlZD10P251bGw6UHJvbWlzZS5yZXNvbHZlKCl9c2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKGUpe3RoaXMub3B0aW1pemVyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fWdldCB0b3RhbExlbmd0aCgpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH1hZGRPcChlLHQpe3RoaXMub3B0aW1pemVyLnB1c2goZSx0KTt0aGlzLndlaWdodCsrO3RoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49T3BlcmF0b3JMaXN0LkNIVU5LX1NJWkV8fHRoaXMud2VpZ2h0Pj1PcGVyYXRvckxpc3QuQ0hVTktfU0laRV9BQk9VVCYmKGU9PT1yLk9QUy5yZXN0b3JlfHxlPT09ci5PUFMuZW5kVGV4dCkpJiZ0aGlzLmZsdXNoKCl9YWRkSW1hZ2VPcHMoZSx0LGEpe3ZvaWQgMCE9PWEmJnRoaXMuYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsYV0pO3RoaXMuYWRkT3AoZSx0KTt2b2lkIDAhPT1hJiZ0aGlzLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pfWFkZERlcGVuZGVuY3koZSl7aWYoIXRoaXMuZGVwZW5kZW5jaWVzLmhhcyhlKSl7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKGUpO3RoaXMuYWRkT3Aoci5PUFMuZGVwZW5kZW5jeSxbZV0pfX1hZGREZXBlbmRlbmNpZXMoZSl7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLmFkZERlcGVuZGVuY3kodCl9YWRkT3BMaXN0KGUpe2lmKGUgaW5zdGFuY2VvZiBPcGVyYXRvckxpc3Qpe2Zvcihjb25zdCB0IG9mIGUuZGVwZW5kZW5jaWVzKXRoaXMuZGVwZW5kZW5jaWVzLmFkZCh0KTtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0KyspdGhpcy5hZGRPcChlLmZuQXJyYXlbdF0sZS5hcmdzQXJyYXlbdF0pfWVsc2UoMCxyLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX1nZXRJUigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX1nZXQgX3RyYW5zZmVycygpe2NvbnN0IGU9W10se2ZuQXJyYXk6dCxhcmdzQXJyYXk6YSxsZW5ndGg6aX09dGhpcztmb3IobGV0IG49MDtuPGk7bisrKXN3aXRjaCh0W25dKXtjYXNlIHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OmNhc2Ugci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpjYXNlIHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpjb25zdCB0PWFbbl1bMF07IXQuY2FjaGVkJiZ0LmRhdGE/LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZlLnB1c2godC5kYXRhLmJ1ZmZlcil9cmV0dXJuIGV9Zmx1c2goZT0hMSx0PW51bGwpe3RoaXMub3B0aW1pemVyLmZsdXNoKCk7Y29uc3QgYT10aGlzLmxlbmd0aDt0aGlzLl90b3RhbExlbmd0aCs9YTt0aGlzLl9zdHJlYW1TaW5rLmVucXVldWUoe2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsYXN0Q2h1bms6ZSxzZXBhcmF0ZUFubm90czp0LGxlbmd0aDphfSwxLHRoaXMuX3RyYW5zZmVycyk7dGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTt0aGlzLmZuQXJyYXkubGVuZ3RoPTA7dGhpcy5hcmdzQXJyYXkubGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLm9wdGltaXplci5yZXNldCgpfX10Lk9wZXJhdG9yTGlzdD1PcGVyYXRvckxpc3R9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QREZJbWFnZT12b2lkIDA7dmFyIHI9YSgyKSxpPWEoMjgpLG49YSg1KSxzPWEoMTIpLG89YSgxOCksYz1hKDYyKSxsPWEoMjYpLGg9YSgzMCksdT1hKDQpO2Z1bmN0aW9uIGRlY29kZUFuZENsYW1wKGUsdCxhLHIpeyhlPXQrZSphKTwwP2U9MDplPnImJihlPXIpO3JldHVybiBlfWZ1bmN0aW9uIHJlc2l6ZUltYWdlTWFzayhlLHQsYSxyLGksbil7Y29uc3Qgcz1pKm47bGV0IG87bz10PD04P25ldyBVaW50OEFycmF5KHMpOnQ8PTE2P25ldyBVaW50MTZBcnJheShzKTpuZXcgVWludDMyQXJyYXkocyk7Y29uc3QgYz1hL2ksbD1yL247bGV0IGgsdSxkLGYsZz0wO2NvbnN0IHA9bmV3IFVpbnQxNkFycmF5KGkpLG09YTtmb3IoaD0wO2g8aTtoKyspcFtoXT1NYXRoLmZsb29yKGgqYyk7Zm9yKGg9MDtoPG47aCsrKXtkPU1hdGguZmxvb3IoaCpsKSptO2Zvcih1PTA7dTxpO3UrKyl7Zj1kK3BbdV07b1tnKytdPWVbZl19fXJldHVybiBvfWNsYXNzIFBERkltYWdle2NvbnN0cnVjdG9yKHt4cmVmOmUscmVzOnQsaW1hZ2U6YSxpc0lubGluZTppPSExLHNtYXNrOm89bnVsbCxtYXNrOmM9bnVsbCxpc01hc2s6bD0hMSxwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSl7dGhpcy5pbWFnZT1hO2NvbnN0IGc9YS5kaWN0LHA9Zy5nZXQoIkYiLCJGaWx0ZXIiKTtsZXQgbTtpZihwIGluc3RhbmNlb2YgdS5OYW1lKW09cC5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShwKSl7Y29uc3QgdD1lLmZldGNoSWZSZWYocFswXSk7dCBpbnN0YW5jZW9mIHUuTmFtZSYmKG09dC5uYW1lKX1zd2l0Y2gobSl7Y2FzZSJKUFhEZWNvZGUiOmNvbnN0IGU9bmV3IGguSnB4SW1hZ2U7ZS5wYXJzZUltYWdlUHJvcGVydGllcyhhLnN0cmVhbSk7YS5zdHJlYW0ucmVzZXQoKTthLndpZHRoPWUud2lkdGg7YS5oZWlnaHQ9ZS5oZWlnaHQ7YS5iaXRzUGVyQ29tcG9uZW50PWUuYml0c1BlckNvbXBvbmVudDthLm51bUNvbXBzPWUuY29tcG9uZW50c0NvdW50O2JyZWFrO2Nhc2UiSkJJRzJEZWNvZGUiOmEuYml0c1BlckNvbXBvbmVudD0xO2EubnVtQ29tcHM9MX1sZXQgYj1nLmdldCgiVyIsIldpZHRoIikseT1nLmdldCgiSCIsIkhlaWdodCIpO2lmKE51bWJlci5pc0ludGVnZXIoYS53aWR0aCkmJmEud2lkdGg+MCYmTnVtYmVyLmlzSW50ZWdlcihhLmhlaWdodCkmJmEuaGVpZ2h0PjAmJihhLndpZHRoIT09Ynx8YS5oZWlnaHQhPT15KSl7KDAsci53YXJuKSgiUERGSW1hZ2UgLSB1c2luZyB0aGUgV2lkdGgvSGVpZ2h0IG9mIHRoZSBpbWFnZSBkYXRhLCByYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS4iKTtiPWEud2lkdGg7eT1hLmhlaWdodH1pZihiPDF8fHk8MSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBpbWFnZSB3aWR0aDogJHtifSBvciBoZWlnaHQ6ICR7eX1gKTt0aGlzLndpZHRoPWI7dGhpcy5oZWlnaHQ9eTt0aGlzLmludGVycG9sYXRlPWcuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKTt0aGlzLmltYWdlTWFzaz1nLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITE7dGhpcy5tYXR0ZT1nLmdldCgiTWF0dGUiKXx8ITE7bGV0IHc9YS5iaXRzUGVyQ29tcG9uZW50O2lmKCF3KXt3PWcuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iik7aWYoIXcpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICR7dGhpcy5pbWFnZU1hc2t9YCk7dz0xfX10aGlzLmJwYz13O2lmKCF0aGlzLmltYWdlTWFzayl7bGV0IG49Zy5nZXRSYXcoIkNTIil8fGcuZ2V0UmF3KCJDb2xvclNwYWNlIik7aWYoIW4peygwLHIuaW5mbykoIkpQWCBpbWFnZXMgKHdoaWNoIGRvIG5vdCByZXF1aXJlIGNvbG9yIHNwYWNlcykiKTtzd2l0Y2goYS5udW1Db21wcyl7Y2FzZSAxOm49dS5OYW1lLmdldCgiRGV2aWNlR3JheSIpO2JyZWFrO2Nhc2UgMzpuPXUuTmFtZS5nZXQoIkRldmljZVJHQiIpO2JyZWFrO2Nhc2UgNDpuPXUuTmFtZS5nZXQoIkRldmljZUNNWUsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgSlBYIGltYWdlcyB3aXRoICR7YS5udW1Db21wc30gY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLmApfX10aGlzLmNvbG9yU3BhY2U9cy5Db2xvclNwYWNlLnBhcnNlKHtjczpuLHhyZWY6ZSxyZXNvdXJjZXM6aT90Om51bGwscGRmRnVuY3Rpb25GYWN0b3J5OmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pO3RoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzfXRoaXMuZGVjb2RlPWcuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTt0aGlzLm5lZWRzRGVjb2RlPSExO2lmKHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSx3KXx8bCYmIXMuQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO2NvbnN0IGU9KDE8PHcpLTE7dGhpcy5kZWNvZGVDb2VmZmljaWVudHM9W107dGhpcy5kZWNvZGVBZGRlbmRzPVtdO2NvbnN0IHQ9IkluZGV4ZWQiPT09dGhpcy5jb2xvclNwYWNlPy5uYW1lO2ZvcihsZXQgYT0wLHI9MDthPHRoaXMuZGVjb2RlLmxlbmd0aDthKz0yLCsrcil7Y29uc3QgaT10aGlzLmRlY29kZVthXSxuPXRoaXMuZGVjb2RlW2ErMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbcl09dD8obi1pKS9lOm4taTt0aGlzLmRlY29kZUFkZGVuZHNbcl09dD9pOmUqaX19aWYobyl0aGlzLnNtYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOm8saXNJbmxpbmU6aSxwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSk7ZWxzZSBpZihjKWlmKGMgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW0pe2MuZGljdC5nZXQoIklNIiwiSW1hZ2VNYXNrIik/dGhpcy5tYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOmMsaXNJbmxpbmU6aSxpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5OmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pOigwLHIud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKX1lbHNlIHRoaXMubWFzaz1jfXN0YXRpYyBhc3luYyBidWlsZEltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6YSxpc0lubGluZTppPSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KXtjb25zdCBjPWE7bGV0IGw9bnVsbCxoPW51bGw7Y29uc3QgdT1hLmRpY3QuZ2V0KCJTTWFzayIpLGQ9YS5kaWN0LmdldCgiTWFzayIpO3U/dSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbT9sPXU6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL1NNYXNrIGZvcm1hdC4iKTpkJiYoZCBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShkKT9oPWQ6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL01hc2sgZm9ybWF0LiIpKTtyZXR1cm4gbmV3IFBERkltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6Yyxpc0lubGluZTppLHNtYXNrOmwsbWFzazpoLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KX1zdGF0aWMgY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6ZSx3aWR0aDp0LGhlaWdodDphLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnIsaW52ZXJzZURlY29kZTppLGludGVycG9sYXRlOm59KXtjb25zdCBzPSh0Kzc+PjMpKmEsbz1lLmJ5dGVMZW5ndGg7bGV0IGMsbDtpZighcnx8aSYmIShzPT09bykpaWYoaSl7Yz1uZXcgVWludDhBcnJheShzKTtjLnNldChlKTtjLmZpbGwoMjU1LG8pfWVsc2UgYz1uZXcgVWludDhBcnJheShlKTtlbHNlIGM9ZTtpZihpKWZvcihsPTA7bDxvO2wrKyljW2xdXj0yNTU7cmV0dXJue2RhdGE6Yyx3aWR0aDp0LGhlaWdodDphLGludGVycG9sYXRlOm59fXN0YXRpYyBhc3luYyBjcmVhdGVNYXNrKHtpbWdBcnJheTplLHdpZHRoOnQsaGVpZ2h0OmEsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06bixpbnZlcnNlRGVjb2RlOnMsaW50ZXJwb2xhdGU6byxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpsPSExfSl7Y29uc3QgaD0xPT09dCYmMT09PWEmJnM9PT0oMD09PWUubGVuZ3RofHwhISgxMjgmZVswXSkpO2lmKGgpcmV0dXJue2lzU2luZ2xlT3BhcXVlUGl4ZWw6aH07aWYobCl7aWYoYy5JbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZCh0LGEpKXtjb25zdCBuPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqNCk7KDAsaS5jb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQSkoe3NyYzplLGRlc3Q6bix3aWR0aDp0LGhlaWdodDphLG5vbkJsYWNrQ29sb3I6MCxpbnZlcnNlRGVjb2RlOnN9KTtyZXR1cm4gYy5JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2Uoe2tpbmQ6ci5JbWFnZUtpbmQuUkdCQV8zMkJQUCxkYXRhOm4sd2lkdGg6dCxoZWlnaHQ6YSxpbnRlcnBvbGF0ZTpvfSl9Y29uc3Qgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsYSksbD1uLmdldENvbnRleHQoIjJkIiksaD1sLmNyZWF0ZUltYWdlRGF0YSh0LGEpOygwLGkuY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEpKHtzcmM6ZSxkZXN0OmguZGF0YSx3aWR0aDp0LGhlaWdodDphLG5vbkJsYWNrQ29sb3I6MCxpbnZlcnNlRGVjb2RlOnN9KTtsLnB1dEltYWdlRGF0YShoLDAsMCk7cmV0dXJue2RhdGE6bnVsbCx3aWR0aDp0LGhlaWdodDphLGludGVycG9sYXRlOm8sYml0bWFwOm4udHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9fXJldHVybiB0aGlzLmNyZWF0ZVJhd01hc2soe2ltZ0FycmF5OmUsd2lkdGg6dCxoZWlnaHQ6YSxpbnZlcnNlRGVjb2RlOnMsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06bixpbnRlcnBvbGF0ZTpvfSl9Z2V0IGRyYXdXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuc21hc2s/LndpZHRofHwwLHRoaXMubWFzaz8ud2lkdGh8fDApfWdldCBkcmF3SGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuaGVpZ2h0LHRoaXMuc21hc2s/LmhlaWdodHx8MCx0aGlzLm1hc2s/LmhlaWdodHx8MCl9ZGVjb2RlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5icGMsYT10aGlzLm51bUNvbXBzLHI9dGhpcy5kZWNvZGVBZGRlbmRzLGk9dGhpcy5kZWNvZGVDb2VmZmljaWVudHMsbj0oMTw8dCktMTtsZXQgcyxvO2lmKDE9PT10KXtmb3Iocz0wLG89ZS5sZW5ndGg7czxvO3MrKyllW3NdPSshZVtzXTtyZXR1cm59bGV0IGM9MDtmb3Iocz0wLG89dGhpcy53aWR0aCp0aGlzLmhlaWdodDtzPG87cysrKWZvcihsZXQgdD0wO3Q8YTt0Kyspe2VbY109ZGVjb2RlQW5kQ2xhbXAoZVtjXSxyW3RdLGlbdF0sbik7YysrfX1nZXRDb21wb25lbnRzKGUpe2NvbnN0IHQ9dGhpcy5icGM7aWYoOD09PXQpcmV0dXJuIGU7Y29uc3QgYT10aGlzLndpZHRoLHI9dGhpcy5oZWlnaHQsaT10aGlzLm51bUNvbXBzLG49YSpyKmk7bGV0IHMsbz0wO3M9dDw9OD9uZXcgVWludDhBcnJheShuKTp0PD0xNj9uZXcgVWludDE2QXJyYXkobik6bmV3IFVpbnQzMkFycmF5KG4pO2NvbnN0IGM9YSppLGw9KDE8PHQpLTE7bGV0IGgsdSxkPTA7aWYoMT09PXQpe2xldCB0LGEsaTtmb3IobGV0IG49MDtuPHI7bisrKXthPWQrKC04JmMpO2k9ZCtjO2Zvcig7ZDxhOyl7dT1lW28rK107c1tkXT11Pj43JjE7c1tkKzFdPXU+PjYmMTtzW2QrMl09dT4+NSYxO3NbZCszXT11Pj40JjE7c1tkKzRdPXU+PjMmMTtzW2QrNV09dT4+MiYxO3NbZCs2XT11Pj4xJjE7c1tkKzddPTEmdTtkKz04fWlmKGQ8aSl7dT1lW28rK107dD0xMjg7Zm9yKDtkPGk7KXtzW2QrK109KyEhKHUmdCk7dD4+PTF9fX19ZWxzZXtsZXQgYT0wO3U9MDtmb3IoZD0wLGg9bjtkPGg7KytkKXtpZihkJWM9PTApe3U9MDthPTB9Zm9yKDthPHQ7KXt1PXU8PDh8ZVtvKytdO2ErPTh9Y29uc3Qgcj1hLXQ7bGV0IGk9dT4+cjtpPDA/aT0wOmk+bCYmKGk9bCk7c1tkXT1pO3UmPSgxPDxyKS0xO2E9cn19cmV0dXJuIHN9ZmlsbE9wYWNpdHkoZSx0LGEsaSxuKXtjb25zdCBzPXRoaXMuc21hc2ssbz10aGlzLm1hc2s7bGV0IGMsbCxoLHUsZCxmO2lmKHMpe2w9cy53aWR0aDtoPXMuaGVpZ2h0O2M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGwqaCk7cy5maWxsR3JheUJ1ZmZlcihjKTtsPT09dCYmaD09PWF8fChjPXJlc2l6ZUltYWdlTWFzayhjLHMuYnBjLGwsaCx0LGEpKX1lbHNlIGlmKG8paWYobyBpbnN0YW5jZW9mIFBERkltYWdlKXtsPW8ud2lkdGg7aD1vLmhlaWdodDtjPW5ldyBVaW50OENsYW1wZWRBcnJheShsKmgpO28ubnVtQ29tcHM9MTtvLmZpbGxHcmF5QnVmZmVyKGMpO2Zvcih1PTAsZD1sKmg7dTxkOysrdSljW3VdPTI1NS1jW3VdO2w9PT10JiZoPT09YXx8KGM9cmVzaXplSW1hZ2VNYXNrKGMsby5icGMsbCxoLHQsYSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkobykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7e2M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqYSk7Y29uc3QgZT10aGlzLm51bUNvbXBzO2Zvcih1PTAsZD10KmE7dTxkOysrdSl7bGV0IHQ9MDtjb25zdCBhPXUqZTtmb3IoZj0wO2Y8ZTsrK2Ype2NvbnN0IGU9blthK2ZdLHI9MipmO2lmKGU8b1tyXXx8ZT5vW3IrMV0pe3Q9MjU1O2JyZWFrfX1jW3VdPXR9fX1pZihjKWZvcih1PTAsZj0zLGQ9dCppO3U8ZDsrK3UsZis9NCllW2ZdPWNbdV07ZWxzZSBmb3IodT0wLGY9MyxkPXQqaTt1PGQ7Kyt1LGYrPTQpZVtmXT0yNTV9dW5kb1ByZWJsZW5kKGUsdCxhKXtjb25zdCByPXRoaXMuc21hc2s/Lm1hdHRlO2lmKCFyKXJldHVybjtjb25zdCBpPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IociwwKSxuPWlbMF0scz1pWzFdLG89aVsyXSxjPXQqYSo0O2ZvcihsZXQgdD0wO3Q8Yzt0Kz00KXtjb25zdCBhPWVbdCszXTtpZigwPT09YSl7ZVt0XT0yNTU7ZVt0KzFdPTI1NTtlW3QrMl09MjU1O2NvbnRpbnVlfWNvbnN0IHI9MjU1L2E7ZVt0XT0oZVt0XS1uKSpyK247ZVt0KzFdPShlW3QrMV0tcykqcitzO2VbdCsyXT0oZVt0KzJdLW8pKnIrb319YXN5bmMgY3JlYXRlSW1hZ2VEYXRhKGU9ITEsdD0hMSl7Y29uc3QgYT10aGlzLmRyYXdXaWR0aCxpPXRoaXMuZHJhd0hlaWdodCxuPXt3aWR0aDphLGhlaWdodDppLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGUsa2luZDowLGRhdGE6bnVsbH0scz10aGlzLm51bUNvbXBzLG89dGhpcy53aWR0aCxoPXRoaXMuaGVpZ2h0LHU9dGhpcy5icGMsZD1vKnMqdSs3Pj4zLGY9dCYmYy5JbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZChhLGkpO2lmKCFlKXtsZXQgZTsiRGV2aWNlR3JheSI9PT10aGlzLmNvbG9yU3BhY2UubmFtZSYmMT09PXU/ZT1yLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDoiRGV2aWNlUkdCIiE9PXRoaXMuY29sb3JTcGFjZS5uYW1lfHw4IT09dXx8dGhpcy5uZWVkc0RlY29kZXx8KGU9ci5JbWFnZUtpbmQuUkdCXzI0QlBQKTtpZihlJiYhdGhpcy5zbWFzayYmIXRoaXMubWFzayYmYT09PW8mJmk9PT1oKXtjb25zdCBzPXRoaXMuZ2V0SW1hZ2VCeXRlcyhoKmQse30pO2lmKHQpcmV0dXJuIGY/Yy5JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2Uoe2RhdGE6cyxraW5kOmUsd2lkdGg6YSxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfSx0aGlzLm5lZWRzRGVjb2RlKTp0aGlzLmNyZWF0ZUJpdG1hcChlLG8saCxzKTtuLmtpbmQ9ZTtuLmRhdGE9cztpZih0aGlzLm5lZWRzRGVjb2RlKXsoMCxyLmFzc2VydCkoZT09PXIuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQLCJQREZJbWFnZS5jcmVhdGVJbWFnZURhdGE6IFRoZSBpbWFnZSBtdXN0IGJlIGdyYXlzY2FsZS4iKTtjb25zdCB0PW4uZGF0YTtmb3IobGV0IGU9MCxhPXQubGVuZ3RoO2U8YTtlKyspdFtlXV49MjU1fXJldHVybiBufWlmKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBsLkpwZWdTdHJlYW0mJiF0aGlzLnNtYXNrJiYhdGhpcy5tYXNrJiYhdGhpcy5uZWVkc0RlY29kZSl7bGV0IGU9aCpkO2lmKHQmJiFmKXtsZXQgdD0hMTtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6ZSo9NDt0PSEwO2JyZWFrO2Nhc2UiRGV2aWNlUkdCIjplPWUvMyo0O3Q9ITA7YnJlYWs7Y2FzZSJEZXZpY2VDTVlLIjp0PSEwfWlmKHQpe2NvbnN0IHQ9dGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDphLGRyYXdIZWlnaHQ6aSxmb3JjZVJHQkE6ITB9KTtyZXR1cm4gdGhpcy5jcmVhdGVCaXRtYXAoci5JbWFnZUtpbmQuUkdCQV8zMkJQUCxhLGksdCl9fWVsc2Ugc3dpdGNoKHRoaXMuY29sb3JTcGFjZS5uYW1lKXtjYXNlIkRldmljZUdyYXkiOmUqPTM7Y2FzZSJEZXZpY2VSR0IiOmNhc2UiRGV2aWNlQ01ZSyI6bi5raW5kPXIuSW1hZ2VLaW5kLlJHQl8yNEJQUDtuLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDphLGRyYXdIZWlnaHQ6aSxmb3JjZVJHQjohMH0pO3JldHVybiBmP2MuSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKG4pOm59fX1jb25zdCBnPXRoaXMuZ2V0SW1hZ2VCeXRlcyhoKmQse2ludGVybmFsOiEwfSkscD0wfGcubGVuZ3RoL2QqaS9oLG09dGhpcy5nZXRDb21wb25lbnRzKGcpO2xldCBiLHksdyxTLHgsQztpZih0JiYhZil7dz1uZXcgT2Zmc2NyZWVuQ2FudmFzKGEsaSk7Uz13LmdldENvbnRleHQoIjJkIik7eD1TLmNyZWF0ZUltYWdlRGF0YShhLGkpO0M9eC5kYXRhfW4ua2luZD1yLkltYWdlS2luZC5SR0JBXzMyQlBQO2lmKGV8fHRoaXMuc21hc2t8fHRoaXMubWFzayl7dCYmIWZ8fChDPW5ldyBVaW50OENsYW1wZWRBcnJheShhKmkqNCkpO2I9MTt5PSEwO3RoaXMuZmlsbE9wYWNpdHkoQyxhLGkscCxtKX1lbHNle2lmKCF0fHxmKXtuLmtpbmQ9ci5JbWFnZUtpbmQuUkdCXzI0QlBQO0M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGEqaSozKTtiPTB9ZWxzZXtuZXcgVWludDMyQXJyYXkoQy5idWZmZXIpLmZpbGwoci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSk7Yj0xfXk9ITF9dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobSk7dGhpcy5jb2xvclNwYWNlLmZpbGxSZ2IoQyxvLGgsYSxpLHAsdSxtLGIpO3kmJnRoaXMudW5kb1ByZWJsZW5kKEMsYSxwKTtpZih0JiYhZil7Uy5wdXRJbWFnZURhdGEoeCwwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6YSxoZWlnaHQ6aSxiaXRtYXA6dy50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfX1uLmRhdGE9QztyZXR1cm4gZj9jLkltYWdlUmVzaXplci5jcmVhdGVJbWFnZShuKTpufWZpbGxHcmF5QnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5udW1Db21wcztpZigxIT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogJHt0fWApO2NvbnN0IGE9dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LG49dGhpcy5icGMscz1hKnQqbis3Pj4zLG89dGhpcy5nZXRJbWFnZUJ5dGVzKGkqcyx7aW50ZXJuYWw6ITB9KSxjPXRoaXMuZ2V0Q29tcG9uZW50cyhvKTtsZXQgbCxoO2lmKDE9PT1uKXtoPWEqaTtpZih0aGlzLm5lZWRzRGVjb2RlKWZvcihsPTA7bDxoOysrbCllW2xdPWNbbF0tMSYyNTU7ZWxzZSBmb3IobD0wO2w8aDsrK2wpZVtsXT0yNTUmLWNbbF07cmV0dXJufXRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKGMpO2g9YSppO2NvbnN0IHU9MjU1LygoMTw8biktMSk7Zm9yKGw9MDtsPGg7KytsKWVbbF09dSpjW2xdfWNyZWF0ZUJpdG1hcChlLHQsYSxuKXtjb25zdCBzPW5ldyBPZmZzY3JlZW5DYW52YXModCxhKSxvPXMuZ2V0Q29udGV4dCgiMmQiKTtsZXQgYztpZihlPT09ci5JbWFnZUtpbmQuUkdCQV8zMkJQUCljPW5ldyBJbWFnZURhdGEobix0LGEpO2Vsc2V7Yz1vLmNyZWF0ZUltYWdlRGF0YSh0LGEpOygwLGkuY29udmVydFRvUkdCQSkoe2tpbmQ6ZSxzcmM6bixkZXN0Om5ldyBVaW50MzJBcnJheShjLmRhdGEuYnVmZmVyKSx3aWR0aDp0LGhlaWdodDphLGludmVyc2VEZWNvZGU6dGhpcy5uZWVkc0RlY29kZX0pfW8ucHV0SW1hZ2VEYXRhKGMsMCwwKTtyZXR1cm57ZGF0YTpudWxsLHdpZHRoOnQsaGVpZ2h0OmEsYml0bWFwOnMudHJhbnNmZXJUb0ltYWdlQml0bWFwKCksaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX19Z2V0SW1hZ2VCeXRlcyhlLHtkcmF3V2lkdGg6dCxkcmF3SGVpZ2h0OmEsZm9yY2VSR0JBOmk9ITEsZm9yY2VSR0I6bj0hMSxpbnRlcm5hbDpzPSExfSl7dGhpcy5pbWFnZS5yZXNldCgpO3RoaXMuaW1hZ2UuZHJhd1dpZHRoPXR8fHRoaXMud2lkdGg7dGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0O3RoaXMuaW1hZ2UuZm9yY2VSR0JBPSEhaTt0aGlzLmltYWdlLmZvcmNlUkdCPSEhbjtjb25zdCBjPXRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSk7aWYoc3x8dGhpcy5pbWFnZSBpbnN0YW5jZW9mIG8uRGVjb2RlU3RyZWFtKXJldHVybiBjOygwLHIuYXNzZXJ0KShjIGluc3RhbmNlb2YgVWludDhBcnJheSwnUERGSW1hZ2UuZ2V0SW1hZ2VCeXRlczogVW5zdXBwb3J0ZWQgImltYWdlQnl0ZXMiIHR5cGUuJyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGMpfX10LlBERkltYWdlPVBERkltYWdlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuaW5jcmVtZW50YWxVcGRhdGU9YXN5bmMgZnVuY3Rpb24gaW5jcmVtZW50YWxVcGRhdGUoe29yaWdpbmFsRGF0YTplLHhyZWZJbmZvOnQsbmV3UmVmczphLHhyZWY6bz1udWxsLGhhc1hmYTpsPSExLHhmYURhdGFzZXRzUmVmOmg9bnVsbCxoYXNYZmFEYXRhc2V0c0VudHJ5OnU9ITEsbmVlZEFwcGVhcmFuY2VzOmQsYWNyb0Zvcm1SZWY6Zj1udWxsLGFjcm9Gb3JtOmc9bnVsbCx4ZmFEYXRhOnA9bnVsbH0pe2F3YWl0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFjcm9mb3JtKHt4cmVmOmUsYWNyb0Zvcm06dCxhY3JvRm9ybVJlZjphLGhhc1hmYTpuLGhhc1hmYURhdGFzZXRzRW50cnk6cyx4ZmFEYXRhc2V0c1JlZjpvLG5lZWRBcHBlYXJhbmNlczpjLG5ld1JlZnM6bH0peyFufHxzfHxvfHwoMCxyLndhcm4pKCJYRkEgLSBDYW5ub3Qgc2F2ZSBpdCIpO2lmKCEoY3x8biYmbykpcmV0dXJuO2NvbnN0IGg9bmV3IGkuRGljdChlKTtmb3IoY29uc3QgZSBvZiB0LmdldEtleXMoKSloLnNldChlLHQuZ2V0UmF3KGUpKTtpZihuJiYhcyl7Y29uc3QgZT10LmdldCgiWEZBIikuc2xpY2UoKTtlLnNwbGljZSgyLDAsImRhdGFzZXRzIik7ZS5zcGxpY2UoMywwLG8pO2guc2V0KCJYRkEiLGUpfWMmJmguc2V0KCJOZWVkQXBwZWFyYW5jZXMiLCEwKTtjb25zdCB1PWUuZW5jcnlwdDtsZXQgZD1udWxsO3UmJihkPXUuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGEubnVtLGEuZ2VuKSk7Y29uc3QgZj1bXTthd2FpdCB3cml0ZU9iamVjdChhLGgsZixkKTtsLnB1c2goe3JlZjphLGRhdGE6Zi5qb2luKCIiKX0pfSh7eHJlZjpvLGFjcm9Gb3JtOmcsYWNyb0Zvcm1SZWY6ZixoYXNYZmE6bCxoYXNYZmFEYXRhc2V0c0VudHJ5OnUseGZhRGF0YXNldHNSZWY6aCxuZWVkQXBwZWFyYW5jZXM6ZCxuZXdSZWZzOmF9KTtsJiZmdW5jdGlvbiB1cGRhdGVYRkEoe3hmYURhdGE6ZSx4ZmFEYXRhc2V0c1JlZjp0LG5ld1JlZnM6YSx4cmVmOml9KXtpZihudWxsPT09ZSl7ZT1mdW5jdGlvbiB3cml0ZVhGQURhdGFGb3JBY3JvZm9ybShlLHQpe2NvbnN0IGE9bmV3IHMuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO2Zvcihjb25zdHt4ZmE6ZX1vZiB0KXtpZighZSljb250aW51ZTtjb25zdHtwYXRoOnQsdmFsdWU6aX09ZTtpZighdCljb250aW51ZTtjb25zdCBvPSgwLG4ucGFyc2VYRkFQYXRoKSh0KTtsZXQgYz1hLmRvY3VtZW50RWxlbWVudC5zZWFyY2hOb2RlKG8sMCk7IWMmJm8ubGVuZ3RoPjEmJihjPWEuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoW28uYXQoLTEpXSwwKSk7Yz9BcnJheS5pc0FycmF5KGkpP2MuY2hpbGROb2Rlcz1pLm1hcCgoZT0+bmV3IHMuU2ltcGxlRE9NTm9kZSgidmFsdWUiLGUpKSk6Yy5jaGlsZE5vZGVzPVtuZXcgcy5TaW1wbGVET01Ob2RlKCIjdGV4dCIsaSldOigwLHIud2FybikoYE5vZGUgbm90IGZvdW5kIGZvciBwYXRoOiAke3R9YCl9Y29uc3QgaT1bXTthLmRvY3VtZW50RWxlbWVudC5kdW1wKGkpO3JldHVybiBpLmpvaW4oIiIpfShpLmZldGNoSWZSZWYodCkuZ2V0U3RyaW5nKCksYSl9Y29uc3Qgbz1pLmVuY3J5cHQ7aWYobyl7ZT1vLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0Lm51bSx0LmdlbikuZW5jcnlwdFN0cmluZyhlKX1jb25zdCBjPWAke3QubnVtfSAke3QuZ2VufSBvYmpcbjw8IC9UeXBlIC9FbWJlZGRlZEZpbGUgL0xlbmd0aCAke2UubGVuZ3RofT4+XG5zdHJlYW1cbmArZSsiXG5lbmRzdHJlYW1cbmVuZG9ialxuIjthLnB1c2goe3JlZjp0LGRhdGE6Y30pfSh7eGZhRGF0YTpwLHhmYURhdGFzZXRzUmVmOmgsbmV3UmVmczphLHhyZWY6b30pO2NvbnN0IG09bmV3IGkuRGljdChudWxsKSxiPXQubmV3UmVmO2xldCB5LHc7Y29uc3QgUz1lLmF0KC0xKTtpZigxMD09PVN8fDEzPT09Uyl7eT1bXTt3PWUubGVuZ3RofWVsc2V7eT1bIlxuIl07dz1lLmxlbmd0aCsxfW0uc2V0KCJTaXplIixiLm51bSsxKTttLnNldCgiUHJldiIsdC5zdGFydFhSZWYpO20uc2V0KCJUeXBlIixpLk5hbWUuZ2V0KCJYUmVmIikpO251bGwhPT10LnJvb3RSZWYmJm0uc2V0KCJSb290Iix0LnJvb3RSZWYpO251bGwhPT10LmluZm9SZWYmJm0uc2V0KCJJbmZvIix0LmluZm9SZWYpO251bGwhPT10LmVuY3J5cHRSZWYmJm0uc2V0KCJFbmNyeXB0Iix0LmVuY3J5cHRSZWYpO2EucHVzaCh7cmVmOmIsZGF0YToiIn0pO2E9YS5zb3J0KCgoZSx0KT0+ZS5yZWYubnVtLXQucmVmLm51bSkpO2NvbnN0IHg9W1swLDEsNjU1MzVdXSxDPVswLDFdO2xldCBrPTA7Zm9yKGNvbnN0e3JlZjplLGRhdGE6dH1vZiBhKXtrPU1hdGgubWF4KGssdyk7eC5wdXNoKFsxLHcsTWF0aC5taW4oZS5nZW4sNjU1MzUpXSk7dys9dC5sZW5ndGg7Qy5wdXNoKGUubnVtLDEpO3kucHVzaCh0KX1tLnNldCgiSW5kZXgiLEMpO2lmKEFycmF5LmlzQXJyYXkodC5maWxlSWRzKSYmdC5maWxlSWRzLmxlbmd0aD4wKXtjb25zdCBlPWZ1bmN0aW9uIGNvbXB1dGVNRDUoZSx0KXtjb25zdCBhPU1hdGguZmxvb3IoRGF0ZS5ub3coKS8xZTMpLGk9dC5maWxlbmFtZXx8IiIsbj1bYS50b1N0cmluZygpLGksZS50b1N0cmluZygpXTtsZXQgcz1uLnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLDApO2Zvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModC5pbmZvKSl7bi5wdXNoKGUpO3MrPWUubGVuZ3RofWNvbnN0IG89bmV3IFVpbnQ4QXJyYXkocyk7bGV0IGw9MDtmb3IoY29uc3QgZSBvZiBuKXt3cml0ZVN0cmluZyhlLGwsbyk7bCs9ZS5sZW5ndGh9cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKSgoMCxjLmNhbGN1bGF0ZU1ENSkobykpfSh3LHQpO20uc2V0KCJJRCIsW3QuZmlsZUlkc1swXSxlXSl9Y29uc3Qgdj1bMSxNYXRoLmNlaWwoTWF0aC5sb2cyKGspLzgpLDJdLEY9KHZbMF0rdlsxXSt2WzJdKSp4Lmxlbmd0aDttLnNldCgiVyIsdik7bS5zZXQoIkxlbmd0aCIsRik7eS5wdXNoKGAke2IubnVtfSAke2IuZ2VufSBvYmpcbmApO2F3YWl0IHdyaXRlRGljdChtLHksbnVsbCk7eS5wdXNoKCIgc3RyZWFtXG4iKTtjb25zdCBPPXkucmVkdWNlKCgoZSx0KT0+ZSt0Lmxlbmd0aCksMCksVD1gXG5lbmRzdHJlYW1cbmVuZG9ialxuc3RhcnR4cmVmXG4ke3d9XG4lJUVPRlxuYCxNPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoK08rRitULmxlbmd0aCk7TS5zZXQoZSk7bGV0IEU9ZS5sZW5ndGg7Zm9yKGNvbnN0IGUgb2YgeSl7d3JpdGVTdHJpbmcoZSxFLE0pO0UrPWUubGVuZ3RofWZvcihjb25zdFtlLHQsYV1vZiB4KXtFPXdyaXRlSW50KGUsdlswXSxFLE0pO0U9d3JpdGVJbnQodCx2WzFdLEUsTSk7RT13cml0ZUludChhLHZbMl0sRSxNKX13cml0ZVN0cmluZyhULEUsTSk7cmV0dXJuIE19O3Qud3JpdGVEaWN0PXdyaXRlRGljdDt0LndyaXRlT2JqZWN0PXdyaXRlT2JqZWN0O3ZhciByPWEoMiksaT1hKDQpLG49YSgzKSxzPWEoNjcpLG89YSg1KSxjPWEoNjgpO2FzeW5jIGZ1bmN0aW9uIHdyaXRlT2JqZWN0KGUsdCxhLHIpe2EucHVzaChgJHtlLm51bX0gJHtlLmdlbn0gb2JqXG5gKTt0IGluc3RhbmNlb2YgaS5EaWN0P2F3YWl0IHdyaXRlRGljdCh0LGEscik6dCBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmYXdhaXQgd3JpdGVTdHJlYW0odCxhLHIpO2EucHVzaCgiXG5lbmRvYmpcbiIpfWFzeW5jIGZ1bmN0aW9uIHdyaXRlRGljdChlLHQsYSl7dC5wdXNoKCI8PCIpO2Zvcihjb25zdCByIG9mIGUuZ2V0S2V5cygpKXt0LnB1c2goYCAvJHsoMCxuLmVzY2FwZVBERk5hbWUpKHIpfSBgKTthd2FpdCB3cml0ZVZhbHVlKGUuZ2V0UmF3KHIpLHQsYSl9dC5wdXNoKCI+PiIpfWFzeW5jIGZ1bmN0aW9uIHdyaXRlU3RyZWFtKGUsdCxhKXtsZXQgbj1lLmdldFN0cmluZygpO251bGwhPT1hJiYobj1hLmVuY3J5cHRTdHJpbmcobikpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgQ29tcHJlc3Npb25TdHJlYW0pe2UuZGljdC5zZXQoIkxlbmd0aCIsbi5sZW5ndGgpO2F3YWl0IHdyaXRlRGljdChlLmRpY3QsdCxhKTt0LnB1c2goIiBzdHJlYW1cbiIsbiwiXG5lbmRzdHJlYW0iKTtyZXR1cm59Y29uc3Qgcz1hd2FpdCBlLmRpY3QuZ2V0QXN5bmMoIkZpbHRlciIpLG89aS5OYW1lLmdldCgiRmxhdGVEZWNvZGUiKTtpZihuLmxlbmd0aD49MjU2fHxBcnJheS5pc0FycmF5KHMpJiZzLmluY2x1ZGVzKG8pfHxzIGluc3RhbmNlb2YgaS5OYW1lJiZzLm5hbWU9PT1vLm5hbWUpdHJ5e2NvbnN0IHQ9KDAsci5zdHJpbmdUb0J5dGVzKShuKSxhPW5ldyBDb21wcmVzc2lvblN0cmVhbSgiZGVmbGF0ZSIpLGM9YS53cml0YWJsZS5nZXRXcml0ZXIoKTtjLndyaXRlKHQpO2MuY2xvc2UoKTtjb25zdCBsPWF3YWl0IG5ldyBSZXNwb25zZShhLnJlYWRhYmxlKS5hcnJheUJ1ZmZlcigpO249KDAsci5ieXRlc1RvU3RyaW5nKShuZXcgVWludDhBcnJheShsKSk7QXJyYXkuaXNBcnJheShzKT9zLmluY2x1ZGVzKG8pfHxzLnB1c2gobyk6cz9zIGluc3RhbmNlb2YgaS5OYW1lJiZzLm5hbWU9PT1vLm5hbWV8fGUuZGljdC5zZXQoIkZpbHRlciIsW3Msb10pOmUuZGljdC5zZXQoIkZpbHRlciIsbyl9Y2F0Y2goZSl7KDAsci5pbmZvKShgd3JpdGVTdHJlYW0gLSBjYW5ub3QgY29tcHJlc3MgZGF0YTogIiR7ZX0iLmApfWUuZGljdC5zZXQoIkxlbmd0aCIsbi5sZW5ndGgpO2F3YWl0IHdyaXRlRGljdChlLmRpY3QsdCxhKTt0LnB1c2goIiBzdHJlYW1cbiIsbiwiXG5lbmRzdHJlYW0iKX1hc3luYyBmdW5jdGlvbiB3cml0ZVZhbHVlKGUsdCxhKXtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXQucHVzaChgLyR7KDAsbi5lc2NhcGVQREZOYW1lKShlLm5hbWUpfWApO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuUmVmKXQucHVzaChgJHtlLm51bX0gJHtlLmdlbn0gUmApO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSlhd2FpdCBhc3luYyBmdW5jdGlvbiB3cml0ZUFycmF5KGUsdCxhKXt0LnB1c2goIlsiKTtsZXQgcj0hMDtmb3IoY29uc3QgaSBvZiBlKXtyP3I9ITE6dC5wdXNoKCIgIik7YXdhaXQgd3JpdGVWYWx1ZShpLHQsYSl9dC5wdXNoKCJdIil9KGUsdCxhKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl7bnVsbCE9PWEmJihlPWEuZW5jcnlwdFN0cmluZyhlKSk7dC5wdXNoKGAoJHsoMCxuLmVzY2FwZVN0cmluZykoZSl9KWApfWVsc2UibnVtYmVyIj09dHlwZW9mIGU/dC5wdXNoKCgwLG4ubnVtYmVyVG9TdHJpbmcpKGUpKToiYm9vbGVhbiI9PXR5cGVvZiBlP3QucHVzaChlLnRvU3RyaW5nKCkpOmUgaW5zdGFuY2VvZiBpLkRpY3Q/YXdhaXQgd3JpdGVEaWN0KGUsdCxhKTplIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2F3YWl0IHdyaXRlU3RyZWFtKGUsdCxhKTpudWxsPT09ZT90LnB1c2goIm51bGwiKTooMCxyLndhcm4pKGBVbmhhbmRsZWQgdmFsdWUgaW4gd3JpdGVyOiAke3R5cGVvZiBlfSwgcGxlYXNlIGZpbGUgYSBidWcuYCl9ZnVuY3Rpb24gd3JpdGVJbnQoZSx0LGEscil7Zm9yKGxldCBpPXQrYS0xO2k+YS0xO2ktLSl7cltpXT0yNTUmZTtlPj49OH1yZXR1cm4gYSt0fWZ1bmN0aW9uIHdyaXRlU3RyaW5nKGUsdCxhKXtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspYVt0K3JdPTI1NSZlLmNoYXJDb2RlQXQocil9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWE1MUGFyc2VyRXJyb3JDb2RlPXQuWE1MUGFyc2VyQmFzZT10LlNpbXBsZVhNTFBhcnNlcj10LlNpbXBsZURPTU5vZGU9dm9pZCAwO3ZhciByPWEoMyk7Y29uc3QgaT17Tm9FcnJvcjowLEVuZE9mRG9jdW1lbnQ6LTEsVW50ZXJtaW5hdGVkQ2RhdDotMixVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjotMyxVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246LTQsVW50ZXJtaW5hdGVkQ29tbWVudDotNSxNYWxmb3JtZWRFbGVtZW50Oi02LE91dE9mTWVtb3J5Oi03LFVudGVybWluYXRlZEF0dHJpYnV0ZVZhbHVlOi04LFVudGVybWluYXRlZEVsZW1lbnQ6LTksRWxlbWVudE5ldmVyQmVndW46LTEwfTt0LlhNTFBhcnNlckVycm9yQ29kZT1pO2Z1bmN0aW9uIGlzV2hpdGVzcGFjZShlLHQpe2NvbnN0IGE9ZVt0XTtyZXR1cm4iICI9PT1hfHwiXG4iPT09YXx8IlxyIj09PWF8fCJcdCI9PT1hfWNsYXNzIFhNTFBhcnNlckJhc2V7X3Jlc29sdmVFbnRpdGllcyhlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC8mKFteO10rKTsvZywoKGUsdCk9PntpZigiI3giPT09dC5zdWJzdHJpbmcoMCwyKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zdWJzdHJpbmcoMiksMTYpKTtpZigiIyI9PT10LnN1YnN0cmluZygwLDEpKXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnN1YnN0cmluZygxKSwxMCkpO3N3aXRjaCh0KXtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJndCI6cmV0dXJuIj4iO2Nhc2UiYW1wIjpyZXR1cm4iJiI7Y2FzZSJxdW90IjpyZXR1cm4nIic7Y2FzZSJhcG9zIjpyZXR1cm4iJyJ9cmV0dXJuIHRoaXMub25SZXNvbHZlRW50aXR5KHQpfSkpfV9wYXJzZUNvbnRlbnQoZSx0KXtjb25zdCBhPVtdO2xldCByPXQ7ZnVuY3Rpb24gc2tpcFdzKCl7Zm9yKDtyPGUubGVuZ3RoJiZpc1doaXRlc3BhY2UoZSxyKTspKytyfWZvcig7cjxlLmxlbmd0aCYmIWlzV2hpdGVzcGFjZShlLHIpJiYiPiIhPT1lW3JdJiYiLyIhPT1lW3JdOykrK3I7Y29uc3QgaT1lLnN1YnN0cmluZyh0LHIpO3NraXBXcygpO2Zvcig7cjxlLmxlbmd0aCYmIj4iIT09ZVtyXSYmIi8iIT09ZVtyXSYmIj8iIT09ZVtyXTspe3NraXBXcygpO2xldCB0PSIiLGk9IiI7Zm9yKDtyPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUscikmJiI9IiE9PWVbcl07KXt0Kz1lW3JdOysrcn1za2lwV3MoKTtpZigiPSIhPT1lW3JdKXJldHVybiBudWxsOysrcjtza2lwV3MoKTtjb25zdCBuPWVbcl07aWYoJyInIT09biYmIiciIT09bilyZXR1cm4gbnVsbDtjb25zdCBzPWUuaW5kZXhPZihuLCsrcik7aWYoczwwKXJldHVybiBudWxsO2k9ZS5zdWJzdHJpbmcocixzKTthLnB1c2goe25hbWU6dCx2YWx1ZTp0aGlzLl9yZXNvbHZlRW50aXRpZXMoaSl9KTtyPXMrMTtza2lwV3MoKX1yZXR1cm57bmFtZTppLGF0dHJpYnV0ZXM6YSxwYXJzZWQ6ci10fX1fcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZSx0KXtsZXQgYT10O2Zvcig7YTxlLmxlbmd0aCYmIWlzV2hpdGVzcGFjZShlLGEpJiYiPiIhPT1lW2FdJiYiPyIhPT1lW2FdJiYiLyIhPT1lW2FdOykrK2E7Y29uc3Qgcj1lLnN1YnN0cmluZyh0LGEpOyFmdW5jdGlvbiBza2lwV3MoKXtmb3IoO2E8ZS5sZW5ndGgmJmlzV2hpdGVzcGFjZShlLGEpOykrK2F9KCk7Y29uc3QgaT1hO2Zvcig7YTxlLmxlbmd0aCYmKCI/IiE9PWVbYV18fCI+IiE9PWVbYSsxXSk7KSsrYTtyZXR1cm57bmFtZTpyLHZhbHVlOmUuc3Vic3RyaW5nKGksYSkscGFyc2VkOmEtdH19cGFyc2VYbWwoZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGg7KXtsZXQgYT10O2lmKCI8Ij09PWVbdF0peysrYTtsZXQgdDtzd2l0Y2goZVthXSl7Y2FzZSIvIjorK2E7dD1lLmluZGV4T2YoIj4iLGEpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKGkuVW50ZXJtaW5hdGVkRWxlbWVudCk7cmV0dXJufXRoaXMub25FbmRFbGVtZW50KGUuc3Vic3RyaW5nKGEsdCkpO2E9dCsxO2JyZWFrO2Nhc2UiPyI6KythO2NvbnN0IHI9dGhpcy5fcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZSxhKTtpZigiPz4iIT09ZS5zdWJzdHJpbmcoYStyLnBhcnNlZCxhK3IucGFyc2VkKzIpKXt0aGlzLm9uRXJyb3IoaS5VbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbik7cmV0dXJufXRoaXMub25QaShyLm5hbWUsci52YWx1ZSk7YSs9ci5wYXJzZWQrMjticmVhaztjYXNlIiEiOmlmKCItLSI9PT1lLnN1YnN0cmluZyhhKzEsYSszKSl7dD1lLmluZGV4T2YoIi0tXHgzZSIsYSszKTtpZih0PDApe3RoaXMub25FcnJvcihpLlVudGVybWluYXRlZENvbW1lbnQpO3JldHVybn10aGlzLm9uQ29tbWVudChlLnN1YnN0cmluZyhhKzMsdCkpO2E9dCszfWVsc2UgaWYoIltDREFUQVsiPT09ZS5zdWJzdHJpbmcoYSsxLGErOCkpe3Q9ZS5pbmRleE9mKCJdXT4iLGErOCk7aWYodDwwKXt0aGlzLm9uRXJyb3IoaS5VbnRlcm1pbmF0ZWRDZGF0KTtyZXR1cm59dGhpcy5vbkNkYXRhKGUuc3Vic3RyaW5nKGErOCx0KSk7YT10KzN9ZWxzZXtpZigiRE9DVFlQRSIhPT1lLnN1YnN0cmluZyhhKzEsYSs4KSl7dGhpcy5vbkVycm9yKGkuTWFsZm9ybWVkRWxlbWVudCk7cmV0dXJufXtjb25zdCByPWUuaW5kZXhPZigiWyIsYSs4KTtsZXQgbj0hMTt0PWUuaW5kZXhPZigiPiIsYSs4KTtpZih0PDApe3RoaXMub25FcnJvcihpLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7cmV0dXJufWlmKHI+MCYmdD5yKXt0PWUuaW5kZXhPZigiXT4iLGErOCk7aWYodDwwKXt0aGlzLm9uRXJyb3IoaS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO3JldHVybn1uPSEwfWNvbnN0IHM9ZS5zdWJzdHJpbmcoYSs4LHQrKG4/MTowKSk7dGhpcy5vbkRvY3R5cGUocyk7YT10KyhuPzI6MSl9fWJyZWFrO2RlZmF1bHQ6Y29uc3Qgbj10aGlzLl9wYXJzZUNvbnRlbnQoZSxhKTtpZihudWxsPT09bil7dGhpcy5vbkVycm9yKGkuTWFsZm9ybWVkRWxlbWVudCk7cmV0dXJufWxldCBzPSExO2lmKCIvPiI9PT1lLnN1YnN0cmluZyhhK24ucGFyc2VkLGErbi5wYXJzZWQrMikpcz0hMDtlbHNlIGlmKCI+IiE9PWUuc3Vic3RyaW5nKGErbi5wYXJzZWQsYStuLnBhcnNlZCsxKSl7dGhpcy5vbkVycm9yKGkuVW50ZXJtaW5hdGVkRWxlbWVudCk7cmV0dXJufXRoaXMub25CZWdpbkVsZW1lbnQobi5uYW1lLG4uYXR0cmlidXRlcyxzKTthKz1uLnBhcnNlZCsocz8yOjEpfX1lbHNle2Zvcig7YTxlLmxlbmd0aCYmIjwiIT09ZVthXTspYSsrO2NvbnN0IHI9ZS5zdWJzdHJpbmcodCxhKTt0aGlzLm9uVGV4dCh0aGlzLl9yZXNvbHZlRW50aXRpZXMocikpfXQ9YX19b25SZXNvbHZlRW50aXR5KGUpe3JldHVybmAmJHtlfTtgfW9uUGkoZSx0KXt9b25Db21tZW50KGUpe31vbkNkYXRhKGUpe31vbkRvY3R5cGUoZSl7fW9uVGV4dChlKXt9b25CZWdpbkVsZW1lbnQoZSx0LGEpe31vbkVuZEVsZW1lbnQoZSl7fW9uRXJyb3IoZSl7fX10LlhNTFBhcnNlckJhc2U9WE1MUGFyc2VyQmFzZTtjbGFzcyBTaW1wbGVET01Ob2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ub2RlTmFtZT1lO3RoaXMubm9kZVZhbHVlPXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBhcmVudE5vZGUiLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzPy5bMF19Z2V0IG5leHRTaWJsaW5nKCl7Y29uc3QgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZighZSlyZXR1cm47Y29uc3QgdD1lLmluZGV4T2YodGhpcyk7cmV0dXJuLTEhPT10P2VbdCsxXTp2b2lkIDB9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcz90aGlzLmNoaWxkTm9kZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudH0pKS5qb2luKCIiKTp0aGlzLm5vZGVWYWx1ZXx8IiJ9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc3x8W119aGFzQ2hpbGROb2Rlcygpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/Lmxlbmd0aD4wfXNlYXJjaE5vZGUoZSx0KXtpZih0Pj1lLmxlbmd0aClyZXR1cm4gdGhpcztjb25zdCBhPWVbdF0scj1bXTtsZXQgaT10aGlzO2Zvcig7Oyl7aWYoYS5uYW1lPT09aS5ub2RlTmFtZSl7aWYoMCE9PWEucG9zKXtpZigwPT09ci5sZW5ndGgpcmV0dXJuIG51bGw7e2NvbnN0W25dPXIucG9wKCk7bGV0IHM9MDtmb3IoY29uc3QgciBvZiBuLmNoaWxkTm9kZXMpaWYoYS5uYW1lPT09ci5ub2RlTmFtZSl7aWYocz09PWEucG9zKXJldHVybiByLnNlYXJjaE5vZGUoZSx0KzEpO3MrK31yZXR1cm4gaS5zZWFyY2hOb2RlKGUsdCsxKX19e2NvbnN0IGE9aS5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09YSlyZXR1cm4gYX19aWYoaS5jaGlsZE5vZGVzPy5sZW5ndGg+MCl7ci5wdXNoKFtpLDBdKTtpPWkuY2hpbGROb2Rlc1swXX1lbHNle2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IoOzAhPT1yLmxlbmd0aDspe2NvbnN0W2UsdF09ci5wb3AoKSxhPXQrMTtpZihhPGUuY2hpbGROb2Rlcy5sZW5ndGgpe3IucHVzaChbZSxhXSk7aT1lLmNoaWxkTm9kZXNbYV07YnJlYWt9fWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbH19fWR1bXAoZSl7aWYoIiN0ZXh0IiE9PXRoaXMubm9kZU5hbWUpe2UucHVzaChgPCR7dGhpcy5ub2RlTmFtZX1gKTtpZih0aGlzLmF0dHJpYnV0ZXMpZm9yKGNvbnN0IHQgb2YgdGhpcy5hdHRyaWJ1dGVzKWUucHVzaChgICR7dC5uYW1lfT0iJHsoMCxyLmVuY29kZVRvWG1sU3RyaW5nKSh0LnZhbHVlKX0iYCk7aWYodGhpcy5oYXNDaGlsZE5vZGVzKCkpe2UucHVzaCgiPiIpO2Zvcihjb25zdCB0IG9mIHRoaXMuY2hpbGROb2Rlcyl0LmR1bXAoZSk7ZS5wdXNoKGA8LyR7dGhpcy5ub2RlTmFtZX0+YCl9ZWxzZSB0aGlzLm5vZGVWYWx1ZT9lLnB1c2goYD4keygwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKX08LyR7dGhpcy5ub2RlTmFtZX0+YCk6ZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSl9fXQuU2ltcGxlRE9NTm9kZT1TaW1wbGVET01Ob2RlO3QuU2ltcGxlWE1MUGFyc2VyPWNsYXNzIFNpbXBsZVhNTFBhcnNlciBleHRlbmRzIFhNTFBhcnNlckJhc2V7Y29uc3RydWN0b3Ioe2hhc0F0dHJpYnV0ZXM6ZT0hMSxsb3dlckNhc2VOYW1lOnQ9ITF9KXtzdXBlcigpO3RoaXMuX2N1cnJlbnRGcmFnbWVudD1udWxsO3RoaXMuX3N0YWNrPW51bGw7dGhpcy5fZXJyb3JDb2RlPWkuTm9FcnJvcjt0aGlzLl9oYXNBdHRyaWJ1dGVzPWU7dGhpcy5fbG93ZXJDYXNlTmFtZT10fXBhcnNlRnJvbVN0cmluZyhlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W107dGhpcy5fc3RhY2s9W107dGhpcy5fZXJyb3JDb2RlPWkuTm9FcnJvcjt0aGlzLnBhcnNlWG1sKGUpO2lmKHRoaXMuX2Vycm9yQ29kZSE9PWkuTm9FcnJvcilyZXR1cm47Y29uc3RbdF09dGhpcy5fY3VycmVudEZyYWdtZW50O3JldHVybiB0P3tkb2N1bWVudEVsZW1lbnQ6dH06dm9pZCAwfW9uVGV4dChlKXtpZihmdW5jdGlvbiBpc1doaXRlc3BhY2VTdHJpbmcoZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKWlmKCFpc1doaXRlc3BhY2UoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0oZSkpcmV0dXJuO2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkNkYXRhKGUpe2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkJlZ2luRWxlbWVudChlLHQsYSl7dGhpcy5fbG93ZXJDYXNlTmFtZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKTtjb25zdCByPW5ldyBTaW1wbGVET01Ob2RlKGUpO3IuY2hpbGROb2Rlcz1bXTt0aGlzLl9oYXNBdHRyaWJ1dGVzJiYoci5hdHRyaWJ1dGVzPXQpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHIpO2lmKCFhKXt0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCk7dGhpcy5fY3VycmVudEZyYWdtZW50PXIuY2hpbGROb2Rlc319b25FbmRFbGVtZW50KGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107Y29uc3QgdD10aGlzLl9jdXJyZW50RnJhZ21lbnQuYXQoLTEpO2lmKCF0KXJldHVybiBudWxsO2Zvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcyllLnBhcmVudE5vZGU9dDtyZXR1cm4gdH1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jYWxjdWxhdGVTSEEyNTY9dC5jYWxjdWxhdGVNRDU9dC5QREYyMD10LlBERjE3PXQuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeT10LkFSQ0ZvdXJDaXBoZXI9dC5BRVMyNTZDaXBoZXI9dC5BRVMxMjhDaXBoZXI9dm9pZCAwO3QuY2FsY3VsYXRlU0hBMzg0PWNhbGN1bGF0ZVNIQTM4NDt0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIHI9YSgyKSxpPWEoNCksbj1hKDY5KTtjbGFzcyBBUkNGb3VyQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuYT0wO3RoaXMuYj0wO2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxhPWUubGVuZ3RoO2ZvcihsZXQgZT0wO2U8MjU2OysrZSl0W2VdPWU7Zm9yKGxldCByPTAsaT0wO3I8MjU2Oysrcil7Y29uc3Qgbj10W3JdO2k9aStuK2VbciVhXSYyNTU7dFtyXT10W2ldO3RbaV09bn10aGlzLnM9dH1lbmNyeXB0QmxvY2soZSl7bGV0IHQ9dGhpcy5hLGE9dGhpcy5iO2NvbnN0IHI9dGhpcy5zLGk9ZS5sZW5ndGgsbj1uZXcgVWludDhBcnJheShpKTtmb3IobGV0IHM9MDtzPGk7KytzKXt0PXQrMSYyNTU7Y29uc3QgaT1yW3RdO2E9YStpJjI1NTtjb25zdCBvPXJbYV07clt0XT1vO3JbYV09aTtuW3NdPWVbc11ecltpK28mMjU1XX10aGlzLmE9dDt0aGlzLmI9YTtyZXR1cm4gbn1kZWNyeXB0QmxvY2soZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfWVuY3J5cHQoZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfX10LkFSQ0ZvdXJDaXBoZXI9QVJDRm91ckNpcGhlcjtjb25zdCBzPWZ1bmN0aW9uIGNhbGN1bGF0ZU1ENUNsb3N1cmUoKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx0PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pO3JldHVybiBmdW5jdGlvbiBoYXNoKGEscixpKXtsZXQgbj0xNzMyNTg0MTkzLHM9LTI3MTczMzg3OSxvPS0xNzMyNTg0MTk0LGM9MjcxNzMzODc4O2NvbnN0IGw9aSs3MiYtNjQsaD1uZXcgVWludDhBcnJheShsKTtsZXQgdSxkO2Zvcih1PTA7dTxpOysrdSloW3VdPWFbcisrXTtoW3UrK109MTI4O2NvbnN0IGY9bC04O2Zvcig7dTxmOyloW3UrK109MDtoW3UrK109aTw8MyYyNTU7aFt1KytdPWk+PjUmMjU1O2hbdSsrXT1pPj4xMyYyNTU7aFt1KytdPWk+PjIxJjI1NTtoW3UrK109aT4+PjI5JjI1NTtoW3UrK109MDtoW3UrK109MDtoW3UrK109MDtjb25zdCBnPW5ldyBJbnQzMkFycmF5KDE2KTtmb3IodT0wO3U8bDspe2ZvcihkPTA7ZDwxNjsrK2QsdSs9NClnW2RdPWhbdV18aFt1KzFdPDw4fGhbdSsyXTw8MTZ8aFt1KzNdPDwyNDtsZXQgYSxyLGk9bixsPXMsZj1vLHA9Yztmb3IoZD0wO2Q8NjQ7KytkKXtpZihkPDE2KXthPWwmZnx+bCZwO3I9ZH1lbHNlIGlmKGQ8MzIpe2E9cCZsfH5wJmY7cj01KmQrMSYxNX1lbHNlIGlmKGQ8NDgpe2E9bF5mXnA7cj0zKmQrNSYxNX1lbHNle2E9Zl4obHx+cCk7cj03KmQmMTV9Y29uc3Qgbj1wLHM9aSthK3RbZF0rZ1tyXXwwLG89ZVtkXTtwPWY7Zj1sO2w9bCsoczw8b3xzPj4+MzItbyl8MDtpPW59bj1uK2l8MDtzPXMrbHwwO289bytmfDA7Yz1jK3B8MH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzI1NSZuLG4+PjgmMjU1LG4+PjE2JjI1NSxuPj4+MjQmMjU1LDI1NSZzLHM+PjgmMjU1LHM+PjE2JjI1NSxzPj4+MjQmMjU1LDI1NSZvLG8+PjgmMjU1LG8+PjE2JjI1NSxvPj4+MjQmMjU1LDI1NSZjLGM+PjgmMjU1LGM+PjE2JjI1NSxjPj4+MjQmMjU1XSl9fSgpO3QuY2FsY3VsYXRlTUQ1PXM7Y2xhc3MgV29yZDY0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5oaWdoPTB8ZTt0aGlzLmxvdz0wfHR9YW5kKGUpe3RoaXMuaGlnaCY9ZS5oaWdoO3RoaXMubG93Jj1lLmxvd314b3IoZSl7dGhpcy5oaWdoXj1lLmhpZ2g7dGhpcy5sb3dePWUubG93fW9yKGUpe3RoaXMuaGlnaHw9ZS5oaWdoO3RoaXMubG93fD1lLmxvd31zaGlmdFJpZ2h0KGUpe2lmKGU+PTMyKXt0aGlzLmxvdz10aGlzLmhpZ2g+Pj5lLTMyfDA7dGhpcy5oaWdoPTB9ZWxzZXt0aGlzLmxvdz10aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lO3RoaXMuaGlnaD10aGlzLmhpZ2g+Pj5lfDB9fXNoaWZ0TGVmdChlKXtpZihlPj0zMil7dGhpcy5oaWdoPXRoaXMubG93PDxlLTMyO3RoaXMubG93PTB9ZWxzZXt0aGlzLmhpZ2g9dGhpcy5oaWdoPDxlfHRoaXMubG93Pj4+MzItZTt0aGlzLmxvdzw8PWV9fXJvdGF0ZVJpZ2h0KGUpe2xldCB0LGE7aWYoMzImZSl7YT10aGlzLmxvdzt0PXRoaXMuaGlnaH1lbHNle3Q9dGhpcy5sb3c7YT10aGlzLmhpZ2h9ZSY9MzE7dGhpcy5sb3c9dD4+PmV8YTw8MzItZTt0aGlzLmhpZ2g9YT4+PmV8dDw8MzItZX1ub3QoKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaDt0aGlzLmxvdz1+dGhpcy5sb3d9YWRkKGUpe2NvbnN0IHQ9KHRoaXMubG93Pj4+MCkrKGUubG93Pj4+MCk7bGV0IGE9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihhKz0xKTt0aGlzLmxvdz0wfHQ7dGhpcy5oaWdoPTB8YX1jb3B5VG8oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NTtlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTU7ZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTU7ZVt0KzNdPTI1NSZ0aGlzLmhpZ2g7ZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1O2VbdCs1XT10aGlzLmxvdz4+MTYmMjU1O2VbdCs2XT10aGlzLmxvdz4+OCYyNTU7ZVt0KzddPTI1NSZ0aGlzLmxvd31hc3NpZ24oZSl7dGhpcy5oaWdoPWUuaGlnaDt0aGlzLmxvdz1lLmxvd319Y29uc3Qgbz1mdW5jdGlvbiBjYWxjdWxhdGVTSEEyNTZDbG9zdXJlKCl7ZnVuY3Rpb24gcm90cihlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIGNoKGUsdCxhKXtyZXR1cm4gZSZ0Xn5lJmF9ZnVuY3Rpb24gbWFqKGUsdCxhKXtyZXR1cm4gZSZ0XmUmYV50JmF9ZnVuY3Rpb24gc2lnbWEoZSl7cmV0dXJuIHJvdHIoZSwyKV5yb3RyKGUsMTMpXnJvdHIoZSwyMil9ZnVuY3Rpb24gc2lnbWFQcmltZShlKXtyZXR1cm4gcm90cihlLDYpXnJvdHIoZSwxMSlecm90cihlLDI1KX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlKXtyZXR1cm4gcm90cihlLDcpXnJvdHIoZSwxOCleZT4+PjN9Y29uc3QgZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtyZXR1cm4gZnVuY3Rpb24gaGFzaCh0LGEscil7bGV0IGk9MTc3OTAzMzcwMyxuPTMxNDQxMzQyNzcscz0xMDEzOTA0MjQyLG89Mjc3MzQ4MDc2MixjPTEzNTk4OTMxMTksbD0yNjAwODIyOTI0LGg9NTI4NzM0NjM1LHU9MTU0MTQ1OTIyNTtjb25zdCBkPTY0Kk1hdGguY2VpbCgocis5KS82NCksZj1uZXcgVWludDhBcnJheShkKTtsZXQgZyxwO2ZvcihnPTA7ZzxyOysrZylmW2ddPXRbYSsrXTtmW2crK109MTI4O2NvbnN0IG09ZC04O2Zvcig7ZzxtOylmW2crK109MDtmW2crK109MDtmW2crK109MDtmW2crK109MDtmW2crK109cj4+PjI5JjI1NTtmW2crK109cj4+MjEmMjU1O2ZbZysrXT1yPj4xMyYyNTU7ZltnKytdPXI+PjUmMjU1O2ZbZysrXT1yPDwzJjI1NTtjb25zdCBiPW5ldyBVaW50MzJBcnJheSg2NCk7Zm9yKGc9MDtnPGQ7KXtmb3IocD0wO3A8MTY7KytwKXtiW3BdPWZbZ108PDI0fGZbZysxXTw8MTZ8ZltnKzJdPDw4fGZbZyszXTtnKz00fWZvcihwPTE2O3A8NjQ7KytwKWJbcF09KHJvdHIoeT1iW3AtMl0sMTcpXnJvdHIoeSwxOSleeT4+PjEwKStiW3AtN10rbGl0dGxlU2lnbWEoYltwLTE1XSkrYltwLTE2XXwwO2xldCB0LGEscj1pLGQ9bixtPXMsdz1vLFM9Yyx4PWwsQz1oLGs9dTtmb3IocD0wO3A8NjQ7KytwKXt0PWsrc2lnbWFQcmltZShTKStjaChTLHgsQykrZVtwXStiW3BdO2E9c2lnbWEocikrbWFqKHIsZCxtKTtrPUM7Qz14O3g9UztTPXcrdHwwO3c9bTttPWQ7ZD1yO3I9dCthfDB9aT1pK3J8MDtuPW4rZHwwO3M9cyttfDA7bz1vK3d8MDtjPWMrU3wwO2w9bCt4fDA7aD1oK0N8MDt1PXUra3wwfXZhciB5O3JldHVybiBuZXcgVWludDhBcnJheShbaT4+MjQmMjU1LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaSxuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLHM+PjI0JjI1NSxzPj4xNiYyNTUscz4+OCYyNTUsMjU1JnMsbz4+MjQmMjU1LG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxjPj4yNCYyNTUsYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwsaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCx1Pj4yNCYyNTUsdT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1XSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PW87Y29uc3QgYz1mdW5jdGlvbiBjYWxjdWxhdGVTSEE1MTJDbG9zdXJlKCl7ZnVuY3Rpb24gY2goZSx0LGEscixpKXtlLmFzc2lnbih0KTtlLmFuZChhKTtpLmFzc2lnbih0KTtpLm5vdCgpO2kuYW5kKHIpO2UueG9yKGkpfWZ1bmN0aW9uIG1haihlLHQsYSxyLGkpe2UuYXNzaWduKHQpO2UuYW5kKGEpO2kuYXNzaWduKHQpO2kuYW5kKHIpO2UueG9yKGkpO2kuYXNzaWduKGEpO2kuYW5kKHIpO2UueG9yKGkpfWZ1bmN0aW9uIHNpZ21hKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDI4KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDM0KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDM5KTtlLnhvcihhKX1mdW5jdGlvbiBzaWdtYVByaW1lKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE0KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDE4KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDQxKTtlLnhvcihhKX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDgpO2UueG9yKGEpO2EuYXNzaWduKHQpO2Euc2hpZnRSaWdodCg3KTtlLnhvcihhKX1mdW5jdGlvbiBsaXR0bGVTaWdtYVByaW1lKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE5KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDYxKTtlLnhvcihhKTthLmFzc2lnbih0KTthLnNoaWZ0UmlnaHQoNik7ZS54b3IoYSl9Y29uc3QgZT1bbmV3IFdvcmQ2NCgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLG5ldyBXb3JkNjQoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBXb3JkNjQoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxuZXcgV29yZDY0KDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksbmV3IFdvcmQ2NCg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IFdvcmQ2NCgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLG5ldyBXb3JkNjQoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxuZXcgV29yZDY0KDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IFdvcmQ2NCgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLG5ldyBXb3JkNjQoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLG5ldyBXb3JkNjQoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBXb3JkNjQoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxuZXcgV29yZDY0KDE5MjUwNzgzODgsNDA2ODE4MjM4MyksbmV3IFdvcmQ2NCgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IFdvcmQ2NCgyNjE0ODg4MTAzLDYzMzgwMzMxNyksbmV3IFdvcmQ2NCgzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgpLG5ldyBXb3JkNjQoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgV29yZDY0KDQwMjIyMjQ3NzQsOTQ0NzExMTM5KSxuZXcgV29yZDY0KDI2NDM0NzA3OCwyMzQxMjYyNzczKSxuZXcgV29yZDY0KDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgV29yZDY0KDc3MDI1NTk4MywxNDk1OTkwOTAxKSxuZXcgV29yZDY0KDEyNDkxNTAxMjIsMTg1NjQzMTIzNSksbmV3IFdvcmQ2NCgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBXb3JkNjQoMTk5NjA2NDk4NiwyMTk4OTUwODM3KSxuZXcgV29yZDY0KDI1NTQyMjA4ODIsMzk5OTcxOTMzOSksbmV3IFdvcmQ2NCgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IFdvcmQ2NCgyOTUyOTk2ODA4LDI1NjY1OTQ4NzkpLG5ldyBXb3JkNjQoMzIxMDMxMzY3MSwzMjAzMzM3OTU2KSxuZXcgV29yZDY0KDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IFdvcmQ2NCgzNTg0NTI4NzExLDI0NjY5NDg5MDEpLG5ldyBXb3JkNjQoMTEzOTI2OTkzLDM3NTgzMjYzODMpLG5ldyBXb3JkNjQoMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IFdvcmQ2NCg2NjYzMDcyMDUsMTE4ODE3OTk2NCksbmV3IFdvcmQ2NCg3NzM1Mjk5MTIsMTU0NjA0NTczNCksbmV3IFdvcmQ2NCgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBXb3JkNjQoMTM5NjE4MjI5MSwyNjQzODMzODIzKSxuZXcgV29yZDY0KDE2OTUxODM3MDAsMjM0MzUyNzM5MCksbmV3IFdvcmQ2NCgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBXb3JkNjQoMjE3NzAyNjM1MCwxMjA2NzU5MTQyKSxuZXcgV29yZDY0KDI0NTY5NTYwMzcsMzQ0MDc3NjI3KSxuZXcgV29yZDY0KDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IFdvcmQ2NCgyODIwMzAyNDExLDMxNTg0NTQyNzMpLG5ldyBXb3JkNjQoMzI1OTczMDgwMCwzNTA1OTUyNjU3KSxuZXcgV29yZDY0KDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgV29yZDY0KDM1MTYwNjU4MTcsMzYwNjAwODM0NCksbmV3IFdvcmQ2NCgzNjAwMzUyODA0LDE0MzI3MjU3NzYpLG5ldyBXb3JkNjQoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgV29yZDY0KDI3NTQyMzM0NCw4NTExNjk3MjApLG5ldyBXb3JkNjQoNDMwMjI3NzM0LDMxMDA4MjM3NTIpLG5ldyBXb3JkNjQoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBXb3JkNjQoNjU5MDYwNTU2LDM3NTA2ODU1OTMpLG5ldyBXb3JkNjQoODgzOTk3ODc3LDM3ODUwNTAyODApLG5ldyBXb3JkNjQoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBXb3JkNjQoMTMyMjgyMjIxOCwzODEyNzIzNDAzKSxuZXcgV29yZDY0KDE1MzcwMDIwNjMsMjAwMzAzNDk5NSksbmV3IFdvcmQ2NCgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBXb3JkNjQoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxuZXcgV29yZDY0KDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksbmV3IFdvcmQ2NCgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBXb3JkNjQoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLG5ldyBXb3JkNjQoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLG5ldyBXb3JkNjQoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgV29yZDY0KDMyMDQwMzE0NzksMjk5OTM1MTU3MyksbmV3IFdvcmQ2NCgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLG5ldyBXb3JkNjQoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgV29yZDY0KDM1MTUyNjcyNzEsNTY2MjgwNzExKSxuZXcgV29yZDY0KDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksbmV3IFdvcmQ2NCg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBXb3JkNjQoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLG5ldyBXb3JkNjQoMTc0MjkyNDIxLDI3MzEwNTUyNzApLG5ldyBXb3JkNjQoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBXb3JkNjQoNDYwMzkzMjY5LDMyMDYyMDMxNSksbmV3IFdvcmQ2NCg2ODU0NzE3MzMsNTg3NDk2ODM2KSxuZXcgV29yZDY0KDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgV29yZDY0KDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxuZXcgV29yZDY0KDExMjYwMDA1ODAsMjYxODI5NzY3NiksbmV3IFdvcmQ2NCgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBXb3JkNjQoMTUwMTUwNTk0OCw0MjM0NTA5ODY2KSxuZXcgV29yZDY0KDE2MDcxNjc5MTUsOTg3MTY3NDY4KSxuZXcgV29yZDY0KDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbiBoYXNoKHQsYSxyLGk9ITEpe2xldCBuLHMsbyxjLGwsaCx1LGQ7aWYoaSl7bj1uZXcgV29yZDY0KDM0MTgwNzAzNjUsMzIzODM3MTAzMik7cz1uZXcgV29yZDY0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKTtvPW5ldyBXb3JkNjQoMjQzODUyOTM3MCw4MTI3MDI5OTkpO2M9bmV3IFdvcmQ2NCgzNTU0NjIzNjAsNDE0NDkxMjY5Nyk7bD1uZXcgV29yZDY0KDE3MzE0MDU0MTUsNDI5MDc3NTg1Nyk7aD1uZXcgV29yZDY0KDIzOTQxODAyMzEsMTc1MDYwMzAyNSk7dT1uZXcgV29yZDY0KDM2NzUwMDg1MjUsMTY5NDA3NjgzOSk7ZD1uZXcgV29yZDY0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCl9ZWxzZXtuPW5ldyBXb3JkNjQoMTc3OTAzMzcwMyw0MDg5MjM1NzIwKTtzPW5ldyBXb3JkNjQoMzE0NDEzNDI3NywyMjI3ODczNTk1KTtvPW5ldyBXb3JkNjQoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKTtjPW5ldyBXb3JkNjQoMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KTtsPW5ldyBXb3JkNjQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KTtoPW5ldyBXb3JkNjQoMjYwMDgyMjkyNCw3MjU1MTExOTkpO3U9bmV3IFdvcmQ2NCg1Mjg3MzQ2MzUsNDIxNTM4OTU0Nyk7ZD1uZXcgV29yZDY0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KX1jb25zdCBmPTEyOCpNYXRoLmNlaWwoKHIrMTcpLzEyOCksZz1uZXcgVWludDhBcnJheShmKTtsZXQgcCxtO2ZvcihwPTA7cDxyOysrcClnW3BdPXRbYSsrXTtnW3ArK109MTI4O2NvbnN0IGI9Zi0xNjtmb3IoO3A8YjspZ1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPXI+Pj4yOSYyNTU7Z1twKytdPXI+PjIxJjI1NTtnW3ArK109cj4+MTMmMjU1O2dbcCsrXT1yPj41JjI1NTtnW3ArK109cjw8MyYyNTU7Y29uc3QgeT1uZXcgQXJyYXkoODApO2ZvcihwPTA7cDw4MDtwKyspeVtwXT1uZXcgV29yZDY0KDAsMCk7bGV0IHc9bmV3IFdvcmQ2NCgwLDApLFM9bmV3IFdvcmQ2NCgwLDApLHg9bmV3IFdvcmQ2NCgwLDApLEM9bmV3IFdvcmQ2NCgwLDApLGs9bmV3IFdvcmQ2NCgwLDApLHY9bmV3IFdvcmQ2NCgwLDApLEY9bmV3IFdvcmQ2NCgwLDApLE89bmV3IFdvcmQ2NCgwLDApO2NvbnN0IFQ9bmV3IFdvcmQ2NCgwLDApLE09bmV3IFdvcmQ2NCgwLDApLEU9bmV3IFdvcmQ2NCgwLDApLEQ9bmV3IFdvcmQ2NCgwLDApO2xldCBOLFI7Zm9yKHA9MDtwPGY7KXtmb3IobT0wO208MTY7KyttKXt5W21dLmhpZ2g9Z1twXTw8MjR8Z1twKzFdPDwxNnxnW3ArMl08PDh8Z1twKzNdO3lbbV0ubG93PWdbcCs0XTw8MjR8Z1twKzVdPDwxNnxnW3ArNl08PDh8Z1twKzddO3ArPTh9Zm9yKG09MTY7bTw4MDsrK20pe049eVttXTtsaXR0bGVTaWdtYVByaW1lKE4seVttLTJdLEQpO04uYWRkKHlbbS03XSk7bGl0dGxlU2lnbWEoRSx5W20tMTVdLEQpO04uYWRkKEUpO04uYWRkKHlbbS0xNl0pfXcuYXNzaWduKG4pO1MuYXNzaWduKHMpO3guYXNzaWduKG8pO0MuYXNzaWduKGMpO2suYXNzaWduKGwpO3YuYXNzaWduKGgpO0YuYXNzaWduKHUpO08uYXNzaWduKGQpO2ZvcihtPTA7bTw4MDsrK20pe1QuYXNzaWduKE8pO3NpZ21hUHJpbWUoRSxrLEQpO1QuYWRkKEUpO2NoKEUsayx2LEYsRCk7VC5hZGQoRSk7VC5hZGQoZVttXSk7VC5hZGQoeVttXSk7c2lnbWEoTSx3LEQpO21haihFLHcsUyx4LEQpO00uYWRkKEUpO049TztPPUY7Rj12O3Y9aztDLmFkZChUKTtrPUM7Qz14O3g9UztTPXc7Ti5hc3NpZ24oVCk7Ti5hZGQoTSk7dz1OfW4uYWRkKHcpO3MuYWRkKFMpO28uYWRkKHgpO2MuYWRkKEMpO2wuYWRkKGspO2guYWRkKHYpO3UuYWRkKEYpO2QuYWRkKE8pfWlmKGkpe1I9bmV3IFVpbnQ4QXJyYXkoNDgpO24uY29weVRvKFIsMCk7cy5jb3B5VG8oUiw4KTtvLmNvcHlUbyhSLDE2KTtjLmNvcHlUbyhSLDI0KTtsLmNvcHlUbyhSLDMyKTtoLmNvcHlUbyhSLDQwKX1lbHNle1I9bmV3IFVpbnQ4QXJyYXkoNjQpO24uY29weVRvKFIsMCk7cy5jb3B5VG8oUiw4KTtvLmNvcHlUbyhSLDE2KTtjLmNvcHlUbyhSLDI0KTtsLmNvcHlUbyhSLDMyKTtoLmNvcHlUbyhSLDQwKTt1LmNvcHlUbyhSLDQ4KTtkLmNvcHlUbyhSLDU2KX1yZXR1cm4gUn19KCk7dC5jYWxjdWxhdGVTSEE1MTI9YztmdW5jdGlvbiBjYWxjdWxhdGVTSEEzODQoZSx0LGEpe3JldHVybiBjKGUsdCxhLCEwKX1jbGFzcyBOdWxsQ2lwaGVye2RlY3J5cHRCbG9jayhlKXtyZXR1cm4gZX1lbmNyeXB0KGUpe3JldHVybiBlfX1jbGFzcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUFFU0Jhc2VDaXBoZXImJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBRVNCYXNlQ2lwaGVyLiIpO3RoaXMuX3M9bmV3IFVpbnQ4QXJyYXkoWzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdKTt0aGlzLl9pbnZfcz1uZXcgVWludDhBcnJheShbODIsOSwxMDYsMjEzLDQ4LDU0LDE2NSw1NiwxOTEsNjQsMTYzLDE1OCwxMjksMjQzLDIxNSwyNTEsMTI0LDIyNyw1NywxMzAsMTU1LDQ3LDI1NSwxMzUsNTIsMTQyLDY3LDY4LDE5NiwyMjIsMjMzLDIwMyw4NCwxMjMsMTQ4LDUwLDE2NiwxOTQsMzUsNjEsMjM4LDc2LDE0OSwxMSw2NiwyNTAsMTk1LDc4LDgsNDYsMTYxLDEwMiw0MCwyMTcsMzYsMTc4LDExOCw5MSwxNjIsNzMsMTA5LDEzOSwyMDksMzcsMTE0LDI0OCwyNDYsMTAwLDEzNCwxMDQsMTUyLDIyLDIxMiwxNjQsOTIsMjA0LDkzLDEwMSwxODIsMTQ2LDEwOCwxMTIsNzIsODAsMjUzLDIzNywxODUsMjE4LDk0LDIxLDcwLDg3LDE2NywxNDEsMTU3LDEzMiwxNDQsMjE2LDE3MSwwLDE0MCwxODgsMjExLDEwLDI0NywyMjgsODgsNSwxODQsMTc5LDY5LDYsMjA4LDQ0LDMwLDE0MywyMDIsNjMsMTUsMiwxOTMsMTc1LDE4OSwzLDEsMTksMTM4LDEwNyw1OCwxNDUsMTcsNjUsNzksMTAzLDIyMCwyMzQsMTUxLDI0MiwyMDcsMjA2LDI0MCwxODAsMjMwLDExNSwxNTAsMTcyLDExNiwzNCwyMzEsMTczLDUzLDEzMywyMjYsMjQ5LDU1LDIzMiwyOCwxMTcsMjIzLDExMCw3MSwyNDEsMjYsMTEzLDI5LDQxLDE5NywxMzcsMTExLDE4Myw5OCwxNCwxNzAsMjQsMTkwLDI3LDI1Miw4Niw2Miw3NSwxOTgsMjEwLDEyMSwzMiwxNTQsMjE5LDE5MiwyNTQsMTIwLDIwNSw5MCwyNDQsMzEsMjIxLDE2OCw1MSwxMzYsNywxOTksNDksMTc3LDE4LDE2LDg5LDM5LDEyOCwyMzYsOTUsOTYsODEsMTI3LDE2OSwyNSwxODEsNzQsMTMsNDUsMjI5LDEyMiwxNTksMTQ3LDIwMSwxNTYsMjM5LDE2MCwyMjQsNTksNzcsMTc0LDQyLDI0NSwxNzYsMjAwLDIzNSwxODcsNjAsMTMxLDgzLDE1Myw5NywyMyw0Myw0LDEyNiwxODYsMTE5LDIxNCwzOCwyMjUsMTA1LDIwLDk5LDg1LDMzLDEyLDEyNV0pO3RoaXMuX21peD1uZXcgVWludDMyQXJyYXkoWzAsMjM1NDc0MTg3LDQ3MDk0ODM3NCwzMDM3NjUyNzcsOTQxODk2NzQ4LDkwODkzMzQxNSw2MDc1MzA1NTQsNzA4NzgwODQ5LDE4ODM3OTM0OTYsMjExODIxNDk5NSwxODE3ODY2ODMwLDE2NDk2MzkyMzcsMTIxNTA2MTEwOCwxMTgxMDQ1MTE5LDE0MTc1NjE2OTgsMTUxNzc2NzUyOSwzNzY3NTg2OTkyLDQwMDMwNjExNzksNDIzNjQyOTk5MCw0MDY5MjQ2ODkzLDM2MzU3MzM2NjAsMzYwMjc3MDMyNywzMjk5Mjc4NDc0LDM0MDA1Mjg3NjksMjQzMDEyMjIxNiwyNjY0NTQzNzE1LDIzNjIwOTAyMzgsMjE5Mzg2MjY0NSwyODM1MTIzMzk2LDI4MDExMDc0MDcsMzAzNTUzNTA1OCwzMTM1NzQwODg5LDM2NzgxMjQ5MjMsMzU3Njg3MDUxMiwzMzQxMzk0Mjg1LDMzNzQzNjE3MDIsMzgxMDQ5NjM0MywzOTc3Njc1MzU2LDQyNzkwODAyNTcsNDA0MzYxMDE4NiwyODc2NDk0NjI3LDI3NzYyOTI5MDQsMzA3NjYzOTAyOSwzMTEwNjUwOTQyLDI0NzIwMTE1MzUsMjY0MDI0MzIwNCwyNDAzNzI4NjY1LDIxNjkzMDMwNTgsMTAwMTA4OTk5NSw4OTk4MzU1ODQsNjY2NDY0NzMzLDY5OTQzMjE1MCw1OTcyNzg0NywyMjY5MDY4NjAsNTMwNDAwNzUzLDI5NDkzMDY4MiwxMjczMTY4Nzg3LDExNzI5NjcwNjQsMTQ3NTQxODUwMSwxNTA5NDMwNDE0LDE5NDI0MzU3NzUsMjExMDY2NzQ0NCwxODc2MjQxODMzLDE2NDE4MTYyMjYsMjkxMDIxOTc2NiwyNzQzMDM0MTA5LDI5NzYxNTE1MjAsMzIxMTYyMzE0NywyNTA1MjAyMTM4LDI2MDY0NTM5NjksMjMwMjY5MDI1MiwyMjY5NzI4NDU1LDM3MTE4Mjk0MjIsMzU0MzU5OTI2OSwzMjQwODk0MzkyLDM0NzUzMTMzMzEsMzg0MzY5OTA3NCwzOTQzOTA2NDQxLDQxNzgwNjIyMjgsNDE0NDA0Nzc3NSwxMzA2OTY3MzY2LDExMzk3ODE3MDksMTM3NDk4ODExMiwxNjEwNDU5NzM5LDE5NzU2ODM0MzQsMjA3NjkzNTI2NSwxNzc1Mjc2OTI0LDE3NDIzMTUxMjcsMTAzNDg2Nzk5OCw4NjY2Mzc4NDUsNTY2MDIxODk2LDgwMDQ0MDgzNSw5Mjk4NzY5OCwxOTMxOTUwNjUsNDI5NDU2MTY0LDM5NTQ0MTcxMSwxOTg0ODEyNjg1LDIwMTc3Nzg1NjYsMTc4NDY2MzE5NSwxNjgzNDA3MjQ4LDEzMTU1NjIxNDUsMTA4MDA5NDYzNCwxMzgzODU2MzExLDE1NTEwMzc4ODQsMTAxMDM5ODI5LDEzNTA1MDIwNiw0Mzc3NTcxMjMsMzM3NTUzODY0LDEwNDIzODU2NTcsODA3OTYyNjEwLDU3MzgwNDc4Myw3NDIwMzkwMTIsMjUzMTA2NzQ1MywyNTY0MDMzMzM0LDIzMjg4Mjg5NzEsMjIyNzU3MzAyNCwyOTM1NTY2ODY1LDI3MDAwOTkzNTQsMzAwMTc1NTY1NSwzMTY4OTM3MjI4LDM4Njg1NTI4MDUsMzkwMjU2MzE4Miw0MjAzMTgxMTcxLDQxMDI5Nzc5MTIsMzczNjE2NDkzNywzNTAxNzQxODkwLDMyNjU0Nzg3NTEsMzQzMzcxMjk4MCwxMTA2MDQxNTkxLDEzNDA0NjMxMDAsMTU3Njk3NjYwOSwxNDA4NzQ5MDM0LDIwNDMyMTE0ODMsMjAwOTE5NTQ3MiwxNzA4ODQ4MzMzLDE4MDkwNTQxNTAsODMyODc3MjMxLDEwNjgzNTEzOTYsNzY2OTQ1NDY1LDU5OTc2MjM1NCwxNTk0MTc5ODcsMTI2NDU0NjY0LDM2MTkyOTg3Nyw0NjMxODAxOTAsMjcwOTI2MDg3MSwyOTQzNjgyMzgwLDMxNzgxMDY5NjEsMzAwOTg3OTM4NiwyNTcyNjk3MTk1LDI1Mzg2ODExODQsMjIzNjIyODczMywyMzM2NDM0NTUwLDM1MDk4NzExMzUsMzc0NTM0NTMwMCwzNDQxODUwMzc3LDMyNzQ2NjcyNjYsMzkxMDE2MTk3MSwzODc3MTk4NjQ4LDQxMTA1Njg0ODUsNDIxMTgxODc5OCwyNTk3ODA2NDc2LDI0OTc2MDQ3NDMsMjI2MTA4OTE3OCwyMjk1MTAxMDczLDI3MzM4NTYxNjAsMjkwMjA4Nzg1MSwzMjAyNDM3MDQ2LDI5NjgwMTE0NTMsMzkzNjI5MTI4NCwzODM1MDM2ODk1LDQxMzY0NDA3NzAsNDE2OTQwODIwMSwzNTM1NDg2NDU2LDM3MDI2NjU0NTksMzQ2NzE5MjMwMiwzMjMxNzIyMjEzLDIwNTE1MTg3ODAsMTk1MTMxNzA0NywxNzE2ODkwNDEwLDE3NTA5MDIzMDUsMTExMzgxODM4NCwxMjgyMDUwMDc1LDE1ODQ1MDQ1ODIsMTM1MDA3ODk4OSwxNjg4MTA4NTIsNjc1NTY0NjMsMzcxMDQ5MzMwLDQwNDAxNjc2MSw4NDE3Mzk1OTIsMTAwODkxODU5NSw3NzU1NTA4MTQsNTQwMDgwNzI1LDM5Njk1NjIzNjksMzgwMTMzMjIzNCw0MDM1NDg5MDQ3LDQyNjk5MDc5OTYsMzU2OTI1NTIxMywzNjY5NDYyNTY2LDMzNjY3NTQ2MTksMzMzMjc0MDE0NCwyNjMxMDY1NDMzLDI0NjM4Nzk3NjIsMjE2MDExNzA3MSwyMzk1NTg4Njc2LDI3Njc2NDU1NTcsMjg2ODg5NzQwNiwzMTAyMDExNzQ3LDMwNjkwNDk5NjAsMjAyMDA4NDk3LDMzNzc4MzYyLDI3MDA0MDQ4Nyw1MDQ0NTk0MzYsODc1NDUxMjkzLDk3NTY1ODY0Niw2NzUwMzk2MjcsNjQxMDI1MTUyLDIwODQ3MDQyMzMsMTkxNzUxODU2MiwxNjE1ODYxMjQ3LDE4NTEzMzI4NTIsMTE0NzU1MDY2MSwxMjQ4ODAyNTEwLDE0ODQwMDU4NDMsMTQ1MTA0NDA1Niw5MzMzMDEzNzAsOTY3MzExNzI5LDczMzE1Njk3Miw2MzI5NTM3MDMsMjYwMzg4OTUwLDI1OTY1OTE3LDMyODY3MTgwOCw0OTY5MDYwNTksMTIwNjQ3Nzg1OCwxMjM5NDQzNzUzLDE1NDMyMDg1MDAsMTQ0MTk1MjU3NSwyMTQ0MTYxODA2LDE5MDg2OTQyNzcsMTY3NTU3Nzg4MCwxODQyNzU5NDQzLDM2MTAzNjkyMjYsMzY0NDM3OTU4NSwzNDA4MTE5NTE2LDMzMDc5MTYyNDcsNDAxMTE5MDUwMiwzNzc2NzY3NDY5LDQwNzczODQ0MzIsNDI0NTYxODY4MywyODA5NzcxMTU0LDI4NDI3MzcwNDksMzE0NDM5NjQyMCwzMDQzMTQwNDk1LDI2NzM3MDUxNTAsMjQzODIzNzYyMSwyMjAzMDMyMjMyLDIzNzAyMTM3OTVdKTt0aGlzLl9taXhDb2w9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjtlKyspdGhpcy5fbWl4Q29sW2VdPWU8MTI4P2U8PDE6ZTw8MV4yNzt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJQb3NpdGlvbj0wfV9leHBhbmRLZXkoZSl7KDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfV9kZWNyeXB0KGUsdCl7bGV0IGEscixpO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMTYpO24uc2V0KGUpO2ZvcihsZXQgZT0wLGE9dGhpcy5fa2V5U2l6ZTtlPDE2OysrZSwrK2EpbltlXV49dFthXTtmb3IobGV0IGU9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7ZT49MTstLWUpe2E9blsxM107blsxM109bls5XTtuWzldPW5bNV07bls1XT1uWzFdO25bMV09YTthPW5bMTRdO3I9blsxMF07blsxNF09bls2XTtuWzEwXT1uWzJdO25bNl09YTtuWzJdPXI7YT1uWzE1XTtyPW5bMTFdO2k9bls3XTtuWzE1XT1uWzNdO25bMTFdPWE7bls3XT1yO25bM109aTtmb3IobGV0IGU9MDtlPDE2OysrZSluW2VdPXRoaXMuX2ludl9zW25bZV1dO2ZvcihsZXQgYT0wLHI9MTYqZTthPDE2OysrYSwrK3IpblthXV49dFtyXTtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9dGhpcy5fbWl4W25bZV1dLHI9dGhpcy5fbWl4W25bZSsxXV0saT10aGlzLl9taXhbbltlKzJdXSxzPXRoaXMuX21peFtuW2UrM11dO2E9dF5yPj4+OF5yPDwyNF5pPj4+MTZeaTw8MTZecz4+PjI0XnM8PDg7bltlXT1hPj4+MjQmMjU1O25bZSsxXT1hPj4xNiYyNTU7bltlKzJdPWE+PjgmMjU1O25bZSszXT0yNTUmYX19YT1uWzEzXTtuWzEzXT1uWzldO25bOV09bls1XTtuWzVdPW5bMV07blsxXT1hO2E9blsxNF07cj1uWzEwXTtuWzE0XT1uWzZdO25bMTBdPW5bMl07bls2XT1hO25bMl09cjthPW5bMTVdO3I9blsxMV07aT1uWzddO25bMTVdPW5bM107blsxMV09YTtuWzddPXI7blszXT1pO2ZvcihsZXQgZT0wO2U8MTY7KytlKXtuW2VdPXRoaXMuX2ludl9zW25bZV1dO25bZV1ePXRbZV19cmV0dXJuIG59X2VuY3J5cHQoZSx0KXtjb25zdCBhPXRoaXMuX3M7bGV0IHIsaSxuO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYpO3Muc2V0KGUpO2ZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV1ePXRbZV07Zm9yKGxldCBlPTE7ZTx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247ZSsrKXtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdPWFbc1tlXV07bj1zWzFdO3NbMV09c1s1XTtzWzVdPXNbOV07c1s5XT1zWzEzXTtzWzEzXT1uO249c1syXTtpPXNbNl07c1syXT1zWzEwXTtzWzZdPXNbMTRdO3NbMTBdPW47c1sxNF09aTtuPXNbM107aT1zWzddO3I9c1sxMV07c1szXT1zWzE1XTtzWzddPW47c1sxMV09aTtzWzE1XT1yO2ZvcihsZXQgZT0wO2U8MTY7ZSs9NCl7Y29uc3QgdD1zW2UrMF0sYT1zW2UrMV0saT1zW2UrMl0sbj1zW2UrM107cj10XmFeaV5uO3NbZSswXV49cl50aGlzLl9taXhDb2xbdF5hXTtzW2UrMV1ePXJedGhpcy5fbWl4Q29sW2FeaV07c1tlKzJdXj1yXnRoaXMuX21peENvbFtpXm5dO3NbZSszXV49cl50aGlzLl9taXhDb2xbbl50XX1mb3IobGV0IGE9MCxyPTE2KmU7YTwxNjsrK2EsKytyKXNbYV1ePXRbcl19Zm9yKGxldCBlPTA7ZTwxNjsrK2Upc1tlXT1hW3NbZV1dO249c1sxXTtzWzFdPXNbNV07c1s1XT1zWzldO3NbOV09c1sxM107c1sxM109bjtuPXNbMl07aT1zWzZdO3NbMl09c1sxMF07c1s2XT1zWzE0XTtzWzEwXT1uO3NbMTRdPWk7bj1zWzNdO2k9c1s3XTtyPXNbMTFdO3NbM109c1sxNV07c1s3XT1uO3NbMTFdPWk7c1sxNV09cjtmb3IobGV0IGU9MCxhPXRoaXMuX2tleVNpemU7ZTwxNjsrK2UsKythKXNbZV1ePXRbYV07cmV0dXJuIHN9X2RlY3J5cHRCbG9jazIoZSx0KXtjb25zdCBhPWUubGVuZ3RoO2xldCByPXRoaXMuYnVmZmVyLGk9dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBuPVtdO2xldCBzPXRoaXMuaXY7Zm9yKGxldCB0PTA7dDxhOysrdCl7cltpXT1lW3RdOysraTtpZihpPDE2KWNvbnRpbnVlO2NvbnN0IGE9dGhpcy5fZGVjcnlwdChyLHRoaXMuX2tleSk7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpYVtlXV49c1tlXTtzPXI7bi5wdXNoKGEpO3I9bmV3IFVpbnQ4QXJyYXkoMTYpO2k9MH10aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPWk7dGhpcy5pdj1zO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bGV0IG89MTYqbi5sZW5ndGg7aWYodCl7Y29uc3QgZT1uLmF0KC0xKTtsZXQgdD1lWzE1XTtpZih0PD0xNil7Zm9yKGxldCBhPTE1LHI9MTYtdDthPj1yOy0tYSlpZihlW2FdIT09dCl7dD0wO2JyZWFrfW8tPXQ7bltuLmxlbmd0aC0xXT1lLnN1YmFycmF5KDAsMTYtdCl9fWNvbnN0IGM9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCBlPTAsdD0wLGE9bi5sZW5ndGg7ZTxhOysrZSx0Kz0xNiljLnNldChuW2VdLHQpO3JldHVybiBjfWRlY3J5cHRCbG9jayhlLHQsYT1udWxsKXtjb25zdCByPWUubGVuZ3RoLGk9dGhpcy5idWZmZXI7bGV0IG49dGhpcy5idWZmZXJQb3NpdGlvbjtpZihhKXRoaXMuaXY9YTtlbHNle2ZvcihsZXQgdD0wO248MTYmJnQ8cjsrK3QsKytuKWlbbl09ZVt0XTtpZihuPDE2KXt0aGlzLmJ1ZmZlckxlbmd0aD1uO3JldHVybiBuZXcgVWludDhBcnJheSgwKX10aGlzLml2PWk7ZT1lLnN1YmFycmF5KDE2KX10aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syO3JldHVybiB0aGlzLmRlY3J5cHRCbG9jayhlLHQpfWVuY3J5cHQoZSx0KXtjb25zdCBhPWUubGVuZ3RoO2xldCByPXRoaXMuYnVmZmVyLGk9dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBuPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKGxldCBzPTA7czxhOysrcyl7cltpXT1lW3NdOysraTtpZihpPDE2KWNvbnRpbnVlO2ZvcihsZXQgZT0wO2U8MTY7KytlKXJbZV1ePXRbZV07Y29uc3QgYT10aGlzLl9lbmNyeXB0KHIsdGhpcy5fa2V5KTt0PWE7bi5wdXNoKGEpO3I9bmV3IFVpbnQ4QXJyYXkoMTYpO2k9MH10aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPWk7dGhpcy5pdj10O2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7Y29uc3Qgcz0xNipuLmxlbmd0aCxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihsZXQgZT0wLHQ9MCxhPW4ubGVuZ3RoO2U8YTsrK2UsdCs9MTYpby5zZXQobltlXSx0KTtyZXR1cm4gb319Y2xhc3MgQUVTMTI4Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMDt0aGlzLl9rZXlTaXplPTE2MDt0aGlzLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSk7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxhPXRoaXMuX3Jjb24scj1uZXcgVWludDhBcnJheSgxNzYpO3Iuc2V0KGUpO2ZvcihsZXQgZT0xNixpPTE7ZTwxNzY7KytpKXtsZXQgbj1yW2UtM10scz1yW2UtMl0sbz1yW2UtMV0sYz1yW2UtNF07bj10W25dO3M9dFtzXTtvPXRbb107Yz10W2NdO25ePWFbaV07Zm9yKGxldCB0PTA7dDw0OysrdCl7cltlXT1uXj1yW2UtMTZdO2UrKztyW2VdPXNePXJbZS0xNl07ZSsrO3JbZV09b149cltlLTE2XTtlKys7cltlXT1jXj1yW2UtMTZdO2UrK319cmV0dXJuIHJ9fXQuQUVTMTI4Q2lwaGVyPUFFUzEyOENpcGhlcjtjbGFzcyBBRVMyNTZDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0O3RoaXMuX2tleVNpemU9MjI0O3RoaXMuX2tleT10aGlzLl9leHBhbmRLZXkoZSl9X2V4cGFuZEtleShlKXtjb25zdCB0PXRoaXMuX3MsYT1uZXcgVWludDhBcnJheSgyNDApO2Euc2V0KGUpO2xldCByLGksbixzLG89MTtmb3IobGV0IGU9MzIsYz0xO2U8MjQwOysrYyl7aWYoZSUzMj09MTYpe3I9dFtyXTtpPXRbaV07bj10W25dO3M9dFtzXX1lbHNlIGlmKGUlMzI9PTApe3I9YVtlLTNdO2k9YVtlLTJdO249YVtlLTFdO3M9YVtlLTRdO3I9dFtyXTtpPXRbaV07bj10W25dO3M9dFtzXTtyXj1vOyhvPDw9MSk+PTI1NiYmKG89MjU1JigyN15vKSl9Zm9yKGxldCB0PTA7dDw0OysrdCl7YVtlXT1yXj1hW2UtMzJdO2UrKzthW2VdPWlePWFbZS0zMl07ZSsrO2FbZV09bl49YVtlLTMyXTtlKys7YVtlXT1zXj1hW2UtMzJdO2UrK319cmV0dXJuIGF9fXQuQUVTMjU2Q2lwaGVyPUFFUzI1NkNpcGhlcjtjbGFzcyBQREYxN3tjaGVja093bmVyUGFzc3dvcmQoZSx0LGEsaSl7Y29uc3Qgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7bi5zZXQoZSwwKTtuLnNldCh0LGUubGVuZ3RoKTtuLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBzPW8obiwwLG4ubGVuZ3RoKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkocyxpKX1jaGVja1VzZXJQYXNzd29yZChlLHQsYSl7Y29uc3QgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtpLnNldChlLDApO2kuc2V0KHQsZS5sZW5ndGgpO2NvbnN0IG49byhpLDAsaS5sZW5ndGgpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShuLGEpfWdldE93bmVyS2V5KGUsdCxhLHIpe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2kuc2V0KGUsMCk7aS5zZXQodCxlLmxlbmd0aCk7aS5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgbj1vKGksMCxpLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIobikuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxhKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7Y29uc3QgaT1vKHIsMCxyLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIoaSkuZGVjcnlwdEJsb2NrKGEsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19dC5QREYxNz1QREYxNztjbGFzcyBQREYyMHtfaGFzaChlLHQsYSl7bGV0IHI9byh0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLGk9WzBdLG49MDtmb3IoO248NjR8fGkuYXQoLTEpPm4tMzI7KXtjb25zdCB0PWUubGVuZ3RoK3IubGVuZ3RoK2EubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkodCk7bGV0IGw9MDtzLnNldChlLGwpO2wrPWUubGVuZ3RoO3Muc2V0KHIsbCk7bCs9ci5sZW5ndGg7cy5zZXQoYSxsKTtjb25zdCBoPW5ldyBVaW50OEFycmF5KDY0KnQpO2ZvcihsZXQgZT0wLGE9MDtlPDY0O2UrKyxhKz10KWguc2V0KHMsYSk7aT1uZXcgQUVTMTI4Q2lwaGVyKHIuc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQoaCxyLnN1YmFycmF5KDE2LDMyKSk7Y29uc3QgdT1pLnNsaWNlKDAsMTYpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCklMzswPT09dT9yPW8oaSwwLGkubGVuZ3RoKToxPT09dT9yPWNhbGN1bGF0ZVNIQTM4NChpLDAsaS5sZW5ndGgpOjI9PT11JiYocj1jKGksMCxpLmxlbmd0aCkpO24rK31yZXR1cm4gci5zdWJhcnJheSgwLDMyKX1jaGVja093bmVyUGFzc3dvcmQoZSx0LGEsaSl7Y29uc3Qgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7bi5zZXQoZSwwKTtuLnNldCh0LGUubGVuZ3RoKTtuLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBzPXRoaXMuX2hhc2goZSxuLGEpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShzLGkpfWNoZWNrVXNlclBhc3N3b3JkKGUsdCxhKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2kuc2V0KGUsMCk7aS5zZXQodCxlLmxlbmd0aCk7Y29uc3Qgbj10aGlzLl9oYXNoKGUsaSxbXSk7cmV0dXJuKDAsci5pc0FycmF5RXF1YWwpKG4sYSl9Z2V0T3duZXJLZXkoZSx0LGEscil7Y29uc3QgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKTtpLnNldCh0LGUubGVuZ3RoKTtpLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBuPXRoaXMuX2hhc2goZSxpLGEpO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKG4pLmRlY3J5cHRCbG9jayhyLCExLG5ldyBVaW50OEFycmF5KDE2KSl9Z2V0VXNlcktleShlLHQsYSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtyLnNldChlLDApO3Iuc2V0KHQsZS5sZW5ndGgpO2NvbnN0IGk9dGhpcy5faGFzaChlLHIsW10pO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGkpLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fXQuUERGMjA9UERGMjA7Y2xhc3MgQ2lwaGVyVHJhbnNmb3Jte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvcj1lO3RoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I9dH1jcmVhdGVTdHJlYW0oZSx0KXtjb25zdCBhPW5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yO3JldHVybiBuZXcgbi5EZWNyeXB0U3RyZWFtKGUsdCwoZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShlLHQpe3JldHVybiBhLmRlY3J5cHRCbG9jayhlLHQpfSkpfWRlY3J5cHRTdHJpbmcoZSl7Y29uc3QgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtsZXQgYT0oMCxyLnN0cmluZ1RvQnl0ZXMpKGUpO2E9dC5kZWNyeXB0QmxvY2soYSwhMCk7cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKShhKX1lbmNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7aWYodCBpbnN0YW5jZW9mIEFFU0Jhc2VDaXBoZXIpe2NvbnN0IGE9MTYtZS5sZW5ndGglMTY7ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKS5yZXBlYXQoYSk7Y29uc3QgaT1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhpKTtlbHNlIGZvcihsZXQgZT0wO2U8MTY7ZSsrKWlbZV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7bGV0IG49KDAsci5zdHJpbmdUb0J5dGVzKShlKTtuPXQuZW5jcnlwdChuLGkpO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYrbi5sZW5ndGgpO3Muc2V0KGkpO3Muc2V0KG4sMTYpO3JldHVybigwLHIuYnl0ZXNUb1N0cmluZykocyl9bGV0IGE9KDAsci5zdHJpbmdUb0J5dGVzKShlKTthPXQuZW5jcnlwdChhKTtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKGEpfX1jb25zdCBsPWZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnlDbG9zdXJlKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHByZXBhcmVLZXlEYXRhKHQsYSxyLGksbixvLGMsbCl7Y29uc3QgaD00MCtyLmxlbmd0aCt0Lmxlbmd0aCx1PW5ldyBVaW50OEFycmF5KGgpO2xldCBkLGYsZz0wO2lmKGEpe2Y9TWF0aC5taW4oMzIsYS5sZW5ndGgpO2Zvcig7ZzxmOysrZyl1W2ddPWFbZ119ZD0wO2Zvcig7ZzwzMjspdVtnKytdPWVbZCsrXTtmb3IoZD0wLGY9ci5sZW5ndGg7ZDxmOysrZCl1W2crK109cltkXTt1W2crK109MjU1Jm47dVtnKytdPW4+PjgmMjU1O3VbZysrXT1uPj4xNiYyNTU7dVtnKytdPW4+Pj4yNCYyNTU7Zm9yKGQ9MCxmPXQubGVuZ3RoO2Q8ZjsrK2QpdVtnKytdPXRbZF07aWYobz49NCYmIWwpe3VbZysrXT0yNTU7dVtnKytdPTI1NTt1W2crK109MjU1O3VbZysrXT0yNTV9bGV0IHA9cyh1LDAsZyk7Y29uc3QgbT1jPj4zO2lmKG8+PTMpZm9yKGQ9MDtkPDUwOysrZClwPXMocCwwLG0pO2NvbnN0IGI9cC5zdWJhcnJheSgwLG0pO2xldCB5LHc7aWYobz49Myl7Zm9yKGc9MDtnPDMyOysrZyl1W2ddPWVbZ107Zm9yKGQ9MCxmPXQubGVuZ3RoO2Q8ZjsrK2QpdVtnKytdPXRbZF07eT1uZXcgQVJDRm91ckNpcGhlcihiKTt3PXkuZW5jcnlwdEJsb2NrKHModSwwLGcpKTtmPWIubGVuZ3RoO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZik7Zm9yKGQ9MTtkPD0xOTsrK2Qpe2ZvcihsZXQgZT0wO2U8ZjsrK2UpYVtlXT1iW2VdXmQ7eT1uZXcgQVJDRm91ckNpcGhlcihhKTt3PXkuZW5jcnlwdEJsb2NrKHcpfWZvcihkPTAsZj13Lmxlbmd0aDtkPGY7KytkKWlmKGlbZF0hPT13W2RdKXJldHVybiBudWxsfWVsc2V7eT1uZXcgQVJDRm91ckNpcGhlcihiKTt3PXkuZW5jcnlwdEJsb2NrKGUpO2ZvcihkPTAsZj13Lmxlbmd0aDtkPGY7KytkKWlmKGlbZF0hPT13W2RdKXJldHVybiBudWxsfXJldHVybiBifWNvbnN0IHQ9aS5OYW1lLmdldCgiSWRlbnRpdHkiKTtmdW5jdGlvbiBidWlsZE9iamVjdEtleShlLHQsYSxyPSExKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzkpLG49YS5sZW5ndGg7bGV0IG87Zm9yKG89MDtvPG47KytvKWlbb109YVtvXTtpW28rK109MjU1JmU7aVtvKytdPWU+PjgmMjU1O2lbbysrXT1lPj4xNiYyNTU7aVtvKytdPTI1NSZ0O2lbbysrXT10Pj44JjI1NTtpZihyKXtpW28rK109MTE1O2lbbysrXT02NTtpW28rK109MTA4O2lbbysrXT04NH1yZXR1cm4gcyhpLDAsbykuc3ViYXJyYXkoMCxNYXRoLm1pbihhLmxlbmd0aCs1LDE2KSl9ZnVuY3Rpb24gYnVpbGRDaXBoZXJDb25zdHJ1Y3RvcihlLHQsYSxuLHMpe2lmKCEodCBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuIik7Y29uc3Qgbz1lLmdldCh0Lm5hbWUpO2xldCBjO251bGwhPW8mJihjPW8uZ2V0KCJDRk0iKSk7aWYoIWN8fCJOb25lIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JOb25lKCl7cmV0dXJuIG5ldyBOdWxsQ2lwaGVyfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvclYyKCl7cmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGJ1aWxkT2JqZWN0S2V5KGEsbixzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjIoKXtyZXR1cm4gbmV3IEFFUzEyOENpcGhlcihidWlsZE9iamVjdEtleShhLG4scywhMCkpfTtpZigiQUVTVjMiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvckFFU1YzKCl7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIocyl9O3Rocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX1yZXR1cm4gY2xhc3MgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeXtjb25zdHJ1Y3RvcihhLG4sbyl7Y29uc3QgYz1hLmdldCgiRmlsdGVyIik7aWYoISgwLGkuaXNOYW1lKShjLCJTdGFuZGFyZCIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPWMubmFtZTt0aGlzLmRpY3Q9YTtjb25zdCBsPWEuZ2V0KCJWIik7aWYoIU51bWJlci5pc0ludGVnZXIobCl8fDEhPT1sJiYyIT09bCYmNCE9PWwmJjUhPT1sKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobSIpO3RoaXMuYWxnb3JpdGhtPWw7bGV0IGg9YS5nZXQoIkxlbmd0aCIpO2lmKCFoKWlmKGw8PTMpaD00MDtlbHNle2NvbnN0IGU9YS5nZXQoIkNGIiksdD1hLmdldCgiU3RtRiIpO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJnQgaW5zdGFuY2VvZiBpLk5hbWUpe2Uuc3VwcHJlc3NFbmNyeXB0aW9uPSEwO2NvbnN0IGE9ZS5nZXQodC5uYW1lKTtoPWE/LmdldCgiTGVuZ3RoIil8fDEyODtoPDQwJiYoaDw8PTMpfX1pZighTnVtYmVyLmlzSW50ZWdlcihoKXx8aDw0MHx8aCU4IT0wKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGgiKTtjb25zdCB1PSgwLHIuc3RyaW5nVG9CeXRlcykoYS5nZXQoIk8iKSksZD0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJVIikpLGY9dS5zdWJhcnJheSgwLDMyKSxnPWQuc3ViYXJyYXkoMCwzMikscD1hLmdldCgiUCIpLG09YS5nZXQoIlIiKSxiPSg0PT09bHx8NT09PWwpJiYhMSE9PWEuZ2V0KCJFbmNyeXB0TWV0YWRhdGEiKTt0aGlzLmVuY3J5cHRNZXRhZGF0YT1iO2NvbnN0IHk9KDAsci5zdHJpbmdUb0J5dGVzKShuKTtsZXQgdyxTO2lmKG8pe2lmKDY9PT1tKXRyeXtvPSgwLHIudXRmOFN0cmluZ1RvU3RyaW5nKShvKX1jYXRjaChlKXsoMCxyLndhcm4pKCJDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiBVbmFibGUgdG8gY29udmVydCBVVEY4IGVuY29kZWQgcGFzc3dvcmQuIil9dz0oMCxyLnN0cmluZ1RvQnl0ZXMpKG8pfWlmKDUhPT1sKVM9cHJlcGFyZUtleURhdGEoeSx3LGYsZyxwLG0saCxiKTtlbHNle2NvbnN0IGU9dS5zdWJhcnJheSgzMiw0MCksdD11LnN1YmFycmF5KDQwLDQ4KSxpPWQuc3ViYXJyYXkoMCw0OCksbj1kLnN1YmFycmF5KDMyLDQwKSxzPWQuc3ViYXJyYXkoNDAsNDgpLG89KDAsci5zdHJpbmdUb0J5dGVzKShhLmdldCgiT0UiKSksYz0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJVRSIpKTsoMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJQZXJtcyIpKTtTPWZ1bmN0aW9uIGNyZWF0ZUVuY3J5cHRpb25LZXkyMChlLHQsYSxyLGksbixzLG8sYyxsLGgsdSl7aWYodCl7Y29uc3QgZT1NYXRoLm1pbigxMjcsdC5sZW5ndGgpO3Q9dC5zdWJhcnJheSgwLGUpfWVsc2UgdD1bXTtsZXQgZDtkPTY9PT1lP25ldyBQREYyMDpuZXcgUERGMTc7cmV0dXJuIGQuY2hlY2tVc2VyUGFzc3dvcmQodCxvLHMpP2QuZ2V0VXNlcktleSh0LGMsaCk6dC5sZW5ndGgmJmQuY2hlY2tPd25lclBhc3N3b3JkKHQscixuLGEpP2QuZ2V0T3duZXJLZXkodCxpLG4sbCk6bnVsbH0obSx3LGYsZSx0LGksZyxuLHMsbyxjKX1pZighUyYmIW8pdGhyb3cgbmV3IHIuUGFzc3dvcmRFeGNlcHRpb24oIk5vIHBhc3N3b3JkIGdpdmVuIixyLlBhc3N3b3JkUmVzcG9uc2VzLk5FRURfUEFTU1dPUkQpO2lmKCFTJiZvKXtjb25zdCB0PWZ1bmN0aW9uIGRlY29kZVVzZXJQYXNzd29yZCh0LGEscixpKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KDMyKTtsZXQgbz0wO2NvbnN0IGM9TWF0aC5taW4oMzIsdC5sZW5ndGgpO2Zvcig7bzxjOysrbyluW29dPXRbb107bGV0IGw9MDtmb3IoO288MzI7KW5bbysrXT1lW2wrK107bGV0IGg9cyhuLDAsbyk7Y29uc3QgdT1pPj4zO2lmKHI+PTMpZm9yKGw9MDtsPDUwOysrbCloPXMoaCwwLGgubGVuZ3RoKTtsZXQgZCxmO2lmKHI+PTMpe2Y9YTtjb25zdCBlPW5ldyBVaW50OEFycmF5KHUpO2ZvcihsPTE5O2w+PTA7bC0tKXtmb3IobGV0IHQ9MDt0PHU7Kyt0KWVbdF09aFt0XV5sO2Q9bmV3IEFSQ0ZvdXJDaXBoZXIoZSk7Zj1kLmVuY3J5cHRCbG9jayhmKX19ZWxzZXtkPW5ldyBBUkNGb3VyQ2lwaGVyKGguc3ViYXJyYXkoMCx1KSk7Zj1kLmVuY3J5cHRCbG9jayhhKX1yZXR1cm4gZn0odyxmLG0saCk7Uz1wcmVwYXJlS2V5RGF0YSh5LHQsZixnLHAsbSxoLGIpfWlmKCFTKXRocm93IG5ldyByLlBhc3N3b3JkRXhjZXB0aW9uKCJJbmNvcnJlY3QgUGFzc3dvcmQiLHIuUGFzc3dvcmRSZXNwb25zZXMuSU5DT1JSRUNUX1BBU1NXT1JEKTt0aGlzLmVuY3J5cHRpb25LZXk9UztpZihsPj00KXtjb25zdCBlPWEuZ2V0KCJDRiIpO2UgaW5zdGFuY2VvZiBpLkRpY3QmJihlLnN1cHByZXNzRW5jcnlwdGlvbj0hMCk7dGhpcy5jZj1lO3RoaXMuc3RtZj1hLmdldCgiU3RtRiIpfHx0O3RoaXMuc3RyZj1hLmdldCgiU3RyRiIpfHx0O3RoaXMuZWZmPWEuZ2V0KCJFRkYiKXx8dGhpcy5zdG1mfX1jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oZSx0KXtpZig0PT09dGhpcy5hbGdvcml0aG18fDU9PT10aGlzLmFsZ29yaXRobSlyZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShidWlsZENpcGhlckNvbnN0cnVjdG9yKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpLGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZix0aGlzLnN0bWYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSkpO2NvbnN0IGE9YnVpbGRPYmplY3RLZXkoZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSkscj1mdW5jdGlvbiBidWlsZENpcGhlckNpcGhlckNvbnN0cnVjdG9yKCl7cmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGEpfTtyZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShyLHIpfX19KCk7dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PWx9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE4KTtjbGFzcyBEZWNyeXB0U3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmRlY3J5cHQ9YTt0aGlzLm5leHRDaHVuaz1udWxsO3RoaXMuaW5pdGlhbGl6ZWQ9ITF9cmVhZEJsb2NrKCl7bGV0IGU7aWYodGhpcy5pbml0aWFsaXplZCllPXRoaXMubmV4dENodW5rO2Vsc2V7ZT10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO3RoaXMuaW5pdGlhbGl6ZWQ9ITB9aWYoIWV8fDA9PT1lLmxlbmd0aCl7dGhpcy5lb2Y9ITA7cmV0dXJufXRoaXMubmV4dENodW5rPXRoaXMuc3RyLmdldEJ5dGVzKDUxMik7Y29uc3QgdD10aGlzLm5leHRDaHVuaz8ubGVuZ3RoPjA7ZT0oMCx0aGlzLmRlY3J5cHQpKGUsIXQpO2NvbnN0IGE9dGhpcy5idWZmZXJMZW5ndGgscj1hK2UubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKHIpLnNldChlLGEpO3RoaXMuYnVmZmVyTGVuZ3RoPXJ9fXQuRGVjcnlwdFN0cmVhbT1EZWNyeXB0U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2F0YWxvZz12b2lkIDA7dmFyIHI9YSgzKSxpPWEoMiksbj1hKDQpLHM9YSg3MSksbz1hKDUpLGM9YSg3MiksbD1hKDEyKSxoPWEoNzMpLHU9YSg1OSksZD1hKDc0KSxmPWEoNzUpO2Z1bmN0aW9uIGZldGNoRGVzdGluYXRpb24oZSl7ZSBpbnN0YW5jZW9mIG4uRGljdCYmKGU9ZS5nZXQoIkQiKSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpudWxsfWNsYXNzIENhdGFsb2d7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnhyZWY9dDt0aGlzLl9jYXREaWN0PXQuZ2V0Q2F0YWxvZ09iaigpO2lmKCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsO3RoaXMuZm9udENhY2hlPW5ldyBuLlJlZlNldENhY2hlO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXA7dGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyB1Lkdsb2JhbEltYWdlQ2FjaGU7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IG4uUmVmU2V0Q2FjaGU7dGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgbi5SZWZTZXRDYWNoZTt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IG4uUmVmU2V0O3RoaXMuc3lzdGVtRm9udENhY2hlPW5ldyBNYXB9Z2V0IHZlcnNpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWZXJzaW9uIik7aWYoZSBpbnN0YW5jZW9mIG4uTmFtZSl7aWYoci5QREZfVkVSU0lPTl9SRUdFWFAudGVzdChlLm5hbWUpKXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJ2ZXJzaW9uIixlLm5hbWUpOygwLGkud2FybikoYEludmFsaWQgUERGIGNhdGFsb2cgdmVyc2lvbjogJHtlLm5hbWV9YCl9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInZlcnNpb24iLG51bGwpfWdldCBsYW5nKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9Z2V0IG5lZWRzUmVuZGVyaW5nKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmVlZHNSZW5kZXJpbmciKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywibmVlZHNSZW5kZXJpbmciLCJib29sZWFuIj09dHlwZW9mIGUmJmUpfWdldCBjb2xsZWN0aW9uKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiQ29sbGVjdGlvbiIpO3QgaW5zdGFuY2VvZiBuLkRpY3QmJnQuc2l6ZT4wJiYoZT10KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkuaW5mbykoIkNhbm5vdCBmZXRjaCBDb2xsZWN0aW9uIGVudHJ5OyBhc3N1bWluZyBubyBjb2xsZWN0aW9uIGlzIHByZXNlbnQuIil9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImNvbGxlY3Rpb24iLGUpfWdldCBhY3JvRm9ybSgpe2xldCBlPW51bGw7dHJ5e2NvbnN0IHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIG4uRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsaS5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfWdldCBhY3JvRm9ybVJlZigpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIkFjcm9Gb3JtIik7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImFjcm9Gb3JtUmVmIixlIGluc3RhbmNlb2Ygbi5SZWY/ZTpudWxsKX1nZXQgbWV0YWRhdGEoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJNZXRhZGF0YSIpO2lmKCEoZSBpbnN0YW5jZW9mIG4uUmVmKSlyZXR1cm4oMCxpLnNoYWRvdykodGhpcywibWV0YWRhdGEiLG51bGwpO2xldCB0PW51bGw7dHJ5e2NvbnN0IGE9dGhpcy54cmVmLmZldGNoKGUsIXRoaXMueHJlZi5lbmNyeXB0Py5lbmNyeXB0TWV0YWRhdGEpO2lmKGEgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJmEuZGljdCBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3QgZT1hLmRpY3QuZ2V0KCJUeXBlIikscj1hLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoKDAsbi5pc05hbWUpKGUsIk1ldGFkYXRhIikmJigwLG4uaXNOYW1lKShyLCJYTUwiKSl7Y29uc3QgZT0oMCxpLnN0cmluZ1RvVVRGOFN0cmluZykoYS5nZXRTdHJpbmcoKSk7ZSYmKHQ9bmV3IGQuTWV0YWRhdGFQYXJzZXIoZSkuc2VyaWFsaXphYmxlKX19fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsaS5pbmZvKShgU2tpcHBpbmcgaW52YWxpZCBNZXRhZGF0YTogIiR7ZX0iLmApfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsdCl9Z2V0IG1hcmtJbmZvKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkTWFya0luZm8oKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIG1hcmsgaW5mby4iKX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywibWFya0luZm8iLGUpfV9yZWFkTWFya0luZm8oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIG4uRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgdD17TWFya2VkOiExLFVzZXJQcm9wZXJ0aWVzOiExLFN1c3BlY3RzOiExfTtmb3IoY29uc3QgYSBpbiB0KXtjb25zdCByPWUuZ2V0KGEpOyJib29sZWFuIj09dHlwZW9mIHImJih0W2FdPXIpfXJldHVybiB0fWdldCBzdHJ1Y3RUcmVlUm9vdCgpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxpLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9X3JlYWRTdHJ1Y3RUcmVlUm9vdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlN0cnVjdFRyZWVSb290Iik7aWYoIShlIGluc3RhbmNlb2Ygbi5EaWN0KSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBmLlN0cnVjdFRyZWVSb290KGUpO3QuaW5pdCgpO3JldHVybiB0fWdldCB0b3BsZXZlbFBhZ2VzRGljdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2Ygbi5EaWN0KSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfWdldCBkb2N1bWVudE91dGxpbmUoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9X3JlYWREb2N1bWVudE91dGxpbmUoKXtsZXQgZT10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKGUgaW5zdGFuY2VvZiBuLkRpY3QpKXJldHVybiBudWxsO2U9ZS5nZXRSYXcoIkZpcnN0Iik7aWYoIShlIGluc3RhbmNlb2Ygbi5SZWYpKXJldHVybiBudWxsO2NvbnN0IHQ9e2l0ZW1zOltdfSxhPVt7b2JqOmUscGFyZW50OnR9XSxyPW5ldyBuLlJlZlNldDtyLnB1dChlKTtjb25zdCBzPXRoaXMueHJlZixvPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtmb3IoO2EubGVuZ3RoPjA7KXtjb25zdCB0PWEuc2hpZnQoKSxjPXMuZmV0Y2hJZlJlZih0Lm9iaik7aWYobnVsbD09PWMpY29udGludWU7aWYoIWMuaGFzKCJUaXRsZSIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTtjb25zdCBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YyxyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTtjb25zdCB1PWMuZ2V0KCJUaXRsZSIpLGQ9Yy5nZXQoIkYiKXx8MCxmPWMuZ2V0QXJyYXkoIkMiKSxnPWMuZ2V0KCJDb3VudCIpO2xldCBwPW87IUFycmF5LmlzQXJyYXkoZil8fDMhPT1mLmxlbmd0aHx8MD09PWZbMF0mJjA9PT1mWzFdJiYwPT09ZlsyXXx8KHA9bC5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihmLDApKTtjb25zdCBtPXthY3Rpb246aC5hY3Rpb24sYXR0YWNobWVudDpoLmF0dGFjaG1lbnQsZGVzdDpoLmRlc3QsdXJsOmgudXJsLHVuc2FmZVVybDpoLnVuc2FmZVVybCxuZXdXaW5kb3c6aC5uZXdXaW5kb3csc2V0T0NHU3RhdGU6aC5zZXRPQ0dTdGF0ZSx0aXRsZTooMCxpLnN0cmluZ1RvUERGU3RyaW5nKSh1KSxjb2xvcjpwLGNvdW50Ok51bWJlci5pc0ludGVnZXIoZyk/Zzp2b2lkIDAsYm9sZDohISgyJmQpLGl0YWxpYzohISgxJmQpLGl0ZW1zOltdfTt0LnBhcmVudC5pdGVtcy5wdXNoKG0pO2U9Yy5nZXRSYXcoIkZpcnN0Iik7aWYoZSBpbnN0YW5jZW9mIG4uUmVmJiYhci5oYXMoZSkpe2EucHVzaCh7b2JqOmUscGFyZW50Om19KTtyLnB1dChlKX1lPWMuZ2V0UmF3KCJOZXh0Iik7aWYoZSBpbnN0YW5jZW9mIG4uUmVmJiYhci5oYXMoZSkpe2EucHVzaCh7b2JqOmUscGFyZW50OnQucGFyZW50fSk7ci5wdXQoZSl9fXJldHVybiB0Lml0ZW1zLmxlbmd0aD4wP3QuaXRlbXM6bnVsbH1nZXQgcGVybWlzc2lvbnMoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsaS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX1fcmVhZFBlcm1pc3Npb25zKCl7Y29uc3QgZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkVuY3J5cHQiKTtpZighKGUgaW5zdGFuY2VvZiBuLkRpY3QpKXJldHVybiBudWxsO2xldCB0PWUuZ2V0KCJQIik7aWYoIm51bWJlciIhPXR5cGVvZiB0KXJldHVybiBudWxsO3QrPTIqKjMyO2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgaW4gaS5QZXJtaXNzaW9uRmxhZyl7Y29uc3Qgcj1pLlBlcm1pc3Npb25GbGFnW2VdO3QmciYmYS5wdXNoKHIpfXJldHVybiBhfWdldCBvcHRpb25hbENvbnRlbnRDb25maWcoKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuX2NhdERpY3QuZ2V0KCJPQ1Byb3BlcnRpZXMiKTtpZighdClyZXR1cm4oMCxpLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBhPXQuZ2V0KCJEIik7aWYoIWEpcmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3Qgcj10LmdldCgiT0NHcyIpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IHM9W10sbz1bXTtmb3IoY29uc3QgZSBvZiByKXtpZighKGUgaW5zdGFuY2VvZiBuLlJlZikpY29udGludWU7by5wdXNoKGUpO2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7cy5wdXNoKHtpZDplLnRvU3RyaW5nKCksbmFtZToic3RyaW5nIj09dHlwZW9mIHQuZ2V0KCJOYW1lIik/KDAsaS5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIk5hbWUiKSk6bnVsbCxpbnRlbnQ6InN0cmluZyI9PXR5cGVvZiB0LmdldCgiSW50ZW50Iik/KDAsaS5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIkludGVudCIpKTpudWxsfSl9ZT10aGlzLl9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGEsbyk7ZS5ncm91cHM9c31jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoYFVuYWJsZSB0byByZWFkIG9wdGlvbmFsIGNvbnRlbnQgY29uZmlnOiAke2V9YCl9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsZSl9X3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoZSx0KXtmdW5jdGlvbiBwYXJzZU9uT2ZmKGUpe2NvbnN0IGE9W107aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgciBvZiBlKXIgaW5zdGFuY2VvZiBuLlJlZiYmdC5pbmNsdWRlcyhyKSYmYS5wdXNoKHIudG9TdHJpbmcoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gcGFyc2VPcmRlcihlLGE9MCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3QgaT1bXTtmb3IoY29uc3QgcyBvZiBlKXtpZihzIGluc3RhbmNlb2Ygbi5SZWYmJnQuaW5jbHVkZXMocykpe3IucHV0KHMpO2kucHVzaChzLnRvU3RyaW5nKCkpO2NvbnRpbnVlfWNvbnN0IGU9cGFyc2VOZXN0ZWRPcmRlcihzLGEpO2UmJmkucHVzaChlKX1pZihhPjApcmV0dXJuIGk7Y29uc3Qgcz1bXTtmb3IoY29uc3QgZSBvZiB0KXIuaGFzKGUpfHxzLnB1c2goZS50b1N0cmluZygpKTtzLmxlbmd0aCYmaS5wdXNoKHtuYW1lOm51bGwsb3JkZXI6c30pO3JldHVybiBpfWZ1bmN0aW9uIHBhcnNlTmVzdGVkT3JkZXIoZSx0KXtpZigrK3Q+cyl7KDAsaS53YXJuKSgicGFyc2VOZXN0ZWRPcmRlciAtIHJlYWNoZWQgTUFYX05FU1RFRF9MRVZFTFMuIik7cmV0dXJuIG51bGx9Y29uc3Qgcj1hLmZldGNoSWZSZWYoZSk7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuIG51bGw7Y29uc3Qgbj1hLmZldGNoSWZSZWYoclswXSk7aWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybiBudWxsO2NvbnN0IG89cGFyc2VPcmRlcihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxpLnN0cmluZ1RvUERGU3RyaW5nKShuKSxvcmRlcjpvfTpudWxsfWNvbnN0IGE9dGhpcy54cmVmLHI9bmV3IG4uUmVmU2V0LHM9MTA7cmV0dXJue25hbWU6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiTmFtZSIpPygwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJOYW1lIikpOm51bGwsY3JlYXRvcjoic3RyaW5nIj09dHlwZW9mIGUuZ2V0KCJDcmVhdG9yIik/KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIkNyZWF0b3IiKSk6bnVsbCxiYXNlU3RhdGU6ZS5nZXQoIkJhc2VTdGF0ZSIpaW5zdGFuY2VvZiBuLk5hbWU/ZS5nZXQoIkJhc2VTdGF0ZSIpLm5hbWU6bnVsbCxvbjpwYXJzZU9uT2ZmKGUuZ2V0KCJPTiIpKSxvZmY6cGFyc2VPbk9mZihlLmdldCgiT0ZGIikpLG9yZGVyOnBhcnNlT3JkZXIoZS5nZXQoIk9yZGVyIikpLGdyb3VwczpudWxsfX1zZXRBY3R1YWxOdW1QYWdlcyhlPW51bGwpe3RoaXMuX2FjdHVhbE51bVBhZ2VzPWV9Z2V0IGhhc0FjdHVhbE51bVBhZ2VzKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hY3R1YWxOdW1QYWdlc31nZXQgX3BhZ2VzQ291bnQoKXtjb25zdCBlPXRoaXMudG9wbGV2ZWxQYWdlc0RpY3QuZ2V0KCJDb3VudCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGluIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJfcGFnZXNDb3VudCIsZSl9Z2V0IG51bVBhZ2VzKCl7cmV0dXJuIHRoaXMuaGFzQWN0dWFsTnVtUGFnZXM/dGhpcy5fYWN0dWFsTnVtUGFnZXM6dGhpcy5fcGFnZXNDb3VudH1nZXQgZGVzdGluYXRpb25zKCl7Y29uc3QgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIHMuTmFtZVRyZWUpZm9yKGNvbnN0W2Escl1vZiBlLmdldEFsbCgpKXtjb25zdCBlPWZldGNoRGVzdGluYXRpb24ocik7ZSYmKHRbKDAsaS5zdHJpbmdUb1BERlN0cmluZykoYSldPWUpfWVsc2UgZSBpbnN0YW5jZW9mIG4uRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLGEpe2NvbnN0IHI9ZmV0Y2hEZXN0aW5hdGlvbihhKTtyJiYodFtlXT1yKX0pKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiZGVzdGluYXRpb25zIix0KX1nZXREZXN0aW5hdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWREZXN0cygpO2lmKHQgaW5zdGFuY2VvZiBzLk5hbWVUcmVlKXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGE7Y29uc3Qgcj10aGlzLmRlc3RpbmF0aW9uc1tlXTtpZihyKXsoMCxpLndhcm4pKGBGb3VuZCAiJHtlfSIgYXQgYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGluIHRoZSBOYW1lVHJlZS5gKTtyZXR1cm4gcn19ZWxzZSBpZih0IGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9X3JlYWREZXN0cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGU/LmhhcygiRGVzdHMiKT9uZXcgcy5OYW1lVHJlZShlLmdldFJhdygiRGVzdHMiKSx0aGlzLnhyZWYpOnRoaXMuX2NhdERpY3QuaGFzKCJEZXN0cyIpP3RoaXMuX2NhdERpY3QuZ2V0KCJEZXN0cyIpOnZvaWQgMH1nZXQgcGFnZUxhYmVscygpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFBhZ2VMYWJlbHMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIHBhZ2UgbGFiZWxzLiIpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJwYWdlTGFiZWxzIixlKX1fcmVhZFBhZ2VMYWJlbHMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7bGV0IGE9bnVsbCxvPSIiO2NvbnN0IGM9bmV3IHMuTnVtYmVyVHJlZShlLHRoaXMueHJlZikuZ2V0QWxsKCk7bGV0IGw9IiIsaD0xO2ZvcihsZXQgZT0wLHM9dGhpcy5udW1QYWdlcztlPHM7ZSsrKXtjb25zdCBzPWMuZ2V0KGUpO2lmKHZvaWQgMCE9PXMpe2lmKCEocyBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhZ2VMYWJlbCBpcyBub3QgYSBkaWN0aW9uYXJ5LiIpO2lmKHMuaGFzKCJUeXBlIikmJiEoMCxuLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiUGFnZUxhYmVsIikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtpZihzLmhhcygiUyIpKXtjb25zdCBlPXMuZ2V0KCJTIik7aWYoIShlIGluc3RhbmNlb2Ygbi5OYW1lKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTthPWUubmFtZX1lbHNlIGE9bnVsbDtpZihzLmhhcygiUCIpKXtjb25zdCBlPXMuZ2V0KCJQIik7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtvPSgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGUpfWVsc2Ugbz0iIjtpZihzLmhhcygiU3QiKSl7Y29uc3QgZT1zLmdldCgiU3QiKTtpZighKE51bWJlci5pc0ludGVnZXIoZSkmJmU+PTEpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHN0YXJ0IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2g9ZX1lbHNlIGg9MX1zd2l0Y2goYSl7Y2FzZSJEIjpsPWg7YnJlYWs7Y2FzZSJSIjpjYXNlInIiOmw9KDAsci50b1JvbWFuTnVtZXJhbHMpKGgsInIiPT09YSk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNvbnN0IGU9MjYsdD0iYSI9PT1hPzk3OjY1LG49aC0xO2w9U3RyaW5nLmZyb21DaGFyQ29kZSh0K24lZSkucmVwZWF0KE1hdGguZmxvb3Iobi9lKSsxKTticmVhaztkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoYEludmFsaWQgc3R5bGUgIiR7YX0iIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LmApO2w9IiJ9dFtlXT1vK2w7aCsrfXJldHVybiB0fWdldCBwYWdlTGF5b3V0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiUGFnZUxheW91dCIpO2xldCB0PSIiO2lmKGUgaW5zdGFuY2VvZiBuLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfWdldCBwYWdlTW9kZSgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VNb2RlIik7bGV0IHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBuLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfWdldCB2aWV3ZXJQcmVmZXJlbmNlcygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlZpZXdlclByZWZlcmVuY2VzIik7aWYoIShlIGluc3RhbmNlb2Ygbi5EaWN0KSlyZXR1cm4oMCxpLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG51bGwpO2xldCB0PW51bGw7Zm9yKGNvbnN0IGEgb2YgZS5nZXRLZXlzKCkpe2NvbnN0IHI9ZS5nZXQoYSk7bGV0IHM7c3dpdGNoKGEpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiByJiYocz1yKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYociBpbnN0YW5jZW9mIG4uTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihyIGluc3RhbmNlb2Ygbi5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYociBpbnN0YW5jZW9mIG4uTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnM9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKHIgaW5zdGFuY2VvZiBuLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnM9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKHIgaW5zdGFuY2VvZiBuLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOmlmKEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoJTI9PTApe3IuZXZlcnkoKChlLHQsYSk9Pk51bWJlci5pc0ludGVnZXIoZSkmJmU+MCYmKDA9PT10fHxlPj1hW3QtMV0pJiZlPD10aGlzLm51bVBhZ2VzKSkmJihzPXIpfWJyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKHIpJiZyPjAmJihzPXIpO2JyZWFrO2RlZmF1bHQ6KDAsaS53YXJuKShgSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogJHthfS5gKTtjb250aW51ZX1pZih2b2lkIDAhPT1zKXt0fHwodD1PYmplY3QuY3JlYXRlKG51bGwpKTt0W2FdPXN9ZWxzZSgwLGkud2FybikoYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHthfSIsIGluIFZpZXdlclByZWZlcmVuY2VzOiAke3J9LmApfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsdCl9Z2V0IG9wZW5BY3Rpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJPcGVuQWN0aW9uIiksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IGE9bmV3IG4uRGljdCh0aGlzLnhyZWYpO2Euc2V0KCJBIixlKTtjb25zdCByPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YSxyZXN1bHRPYmo6cn0pO0FycmF5LmlzQXJyYXkoci5kZXN0KT90LmRlc3Q9ci5kZXN0OnIuYWN0aW9uJiYodC5hY3Rpb249ci5hY3Rpb24pfWVsc2UgQXJyYXkuaXNBcnJheShlKSYmKHQuZGVzdD1lKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywib3BlbkFjdGlvbiIsKDAsaS5vYmplY3RTaXplKSh0KT4wP3Q6bnVsbCl9Z2V0IGF0dGFjaG1lbnRzKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBuLkRpY3QmJmUuaGFzKCJFbWJlZGRlZEZpbGVzIikpe2NvbnN0IGE9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLHJdb2YgYS5nZXRBbGwoKSl7Y29uc3QgYT1uZXcgaC5GaWxlU3BlYyhyLHRoaXMueHJlZik7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dFsoMCxpLnN0cmluZ1RvUERGU3RyaW5nKShlKV09YS5zZXJpYWxpemFibGV9fXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJhdHRhY2htZW50cyIsdCl9Z2V0IHhmYUltYWdlcygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2Ygbi5EaWN0JiZlLmhhcygiWEZBSW1hZ2VzIikpe2NvbnN0IGE9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIlhGQUltYWdlcyIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2Uscl1vZiBhLmdldEFsbCgpKXt0fHwodD1uZXcgbi5EaWN0KHRoaXMueHJlZikpO3Quc2V0KCgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGUpLHIpfX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywieGZhSW1hZ2VzIix0KX1fY29sbGVjdEphdmFTY3JpcHQoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7ZnVuY3Rpb24gYXBwZW5kSWZKYXZhU2NyaXB0RGljdChlLGEpe2lmKCEoYSBpbnN0YW5jZW9mIG4uRGljdCkpcmV0dXJuO2lmKCEoMCxuLmlzTmFtZSkoYS5nZXQoIlMiKSwiSmF2YVNjcmlwdCIpKXJldHVybjtsZXQgcj1hLmdldCgiSlMiKTtpZihyIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKXI9ci5nZXRTdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgcilyZXR1cm47cj0oMCxpLnN0cmluZ1RvUERGU3RyaW5nKShyKS5yZXBsYWNlQWxsKCJcMCIsIiIpOyh0fHw9bmV3IE1hcCkuc2V0KGUscil9aWYoZSBpbnN0YW5jZW9mIG4uRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1uZXcgcy5OYW1lVHJlZShlLmdldFJhdygiSmF2YVNjcmlwdCIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2UsYV1vZiB0LmdldEFsbCgpKWFwcGVuZElmSmF2YVNjcmlwdERpY3QoKDAsaS5zdHJpbmdUb1BERlN0cmluZykoZSksYSl9Y29uc3QgYT10aGlzLl9jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpO2EmJmFwcGVuZElmSmF2YVNjcmlwdERpY3QoIk9wZW5BY3Rpb24iLGEpO3JldHVybiB0fWdldCBqYXZhU2NyaXB0KCl7Y29uc3QgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJqYXZhU2NyaXB0IixlP1suLi5lLnZhbHVlcygpXTpudWxsKX1nZXQganNBY3Rpb25zKCl7Y29uc3QgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO2xldCB0PSgwLHIuY29sbGVjdEFjdGlvbnMpKHRoaXMueHJlZix0aGlzLl9jYXREaWN0LGkuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUpO2lmKGUpe3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpO2Zvcihjb25zdFthLHJdb2YgZSlhIGluIHQ/dFthXS5wdXNoKHIpOnRbYV09W3JdfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLHQpfWFzeW5jIGZvbnRGYWxsYmFjayhlLHQpe2NvbnN0IGE9YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Zvcihjb25zdCByIG9mIGEpaWYoci5sb2FkZWROYW1lPT09ZSl7ci5mYWxsYmFjayh0KTtyZXR1cm59fWFzeW5jIGNsZWFudXAoZT0hMSl7KDAsYy5jbGVhckdsb2JhbENhY2hlcykoKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIoZSk7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTt0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCk7dGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCk7Y29uc3QgdD1hd2FpdCBQcm9taXNlLmFsbCh0aGlzLmZvbnRDYWNoZSk7Zm9yKGNvbnN0e2RpY3Q6ZX1vZiB0KWRlbGV0ZSBlLmNhY2hlS2V5O3RoaXMuZm9udENhY2hlLmNsZWFyKCk7dGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuY2xlYXIoKTt0aGlzLnN5c3RlbUZvbnRDYWNoZS5jbGVhcigpfWFzeW5jIGdldFBhZ2VEaWN0KGUpe2NvbnN0IHQ9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLGE9bmV3IG4uUmVmU2V0LHI9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIik7ciBpbnN0YW5jZW9mIG4uUmVmJiZhLnB1dChyKTtjb25zdCBzPXRoaXMueHJlZixvPXRoaXMucGFnZUtpZHNDb3VudENhY2hlLGM9dGhpcy5wYWdlSW5kZXhDYWNoZTtsZXQgbD0wO2Zvcig7dC5sZW5ndGg7KXtjb25zdCByPXQucG9wKCk7aWYociBpbnN0YW5jZW9mIG4uUmVmKXtjb25zdCBoPW8uZ2V0KHIpO2lmKGg+PTAmJmwraDw9ZSl7bCs9aDtjb250aW51ZX1pZihhLmhhcyhyKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIik7YS5wdXQocik7Y29uc3QgdT1hd2FpdCBzLmZldGNoQXN5bmMocik7aWYodSBpbnN0YW5jZW9mIG4uRGljdCl7bGV0IHQ9dS5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2Ygbi5SZWYmJih0PWF3YWl0IHMuZmV0Y2hBc3luYyh0KSk7aWYoKDAsbi5pc05hbWUpKHQsIlBhZ2UiKXx8IXUuaGFzKCJLaWRzIikpe28uaGFzKHIpfHxvLnB1dChyLDEpO2MuaGFzKHIpfHxjLnB1dChyLGwpO2lmKGw9PT1lKXJldHVyblt1LHJdO2wrKztjb250aW51ZX19dC5wdXNoKHUpO2NvbnRpbnVlfWlmKCEociBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjb25zdHtvYmpJZDpofT1yO2xldCB1PXIuZ2V0UmF3KCJDb3VudCIpO3UgaW5zdGFuY2VvZiBuLlJlZiYmKHU9YXdhaXQgcy5mZXRjaEFzeW5jKHUpKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHUpJiZ1Pj0wKXtoJiYhby5oYXMoaCkmJm8ucHV0KGgsdSk7aWYobCt1PD1lKXtsKz11O2NvbnRpbnVlfX1sZXQgZD1yLmdldFJhdygiS2lkcyIpO2QgaW5zdGFuY2VvZiBuLlJlZiYmKGQ9YXdhaXQgcy5mZXRjaEFzeW5jKGQpKTtpZighQXJyYXkuaXNBcnJheShkKSl7bGV0IHQ9ci5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2Ygbi5SZWYmJih0PWF3YWl0IHMuZmV0Y2hBc3luYyh0KSk7aWYoKDAsbi5pc05hbWUpKHQsIlBhZ2UiKXx8IXIuaGFzKCJLaWRzIikpe2lmKGw9PT1lKXJldHVybltyLG51bGxdO2wrKztjb250aW51ZX10aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKX1mb3IobGV0IGU9ZC5sZW5ndGgtMTtlPj0wO2UtLSl0LnB1c2goZFtlXSl9dGhyb3cgbmV3IEVycm9yKGBQYWdlIGluZGV4ICR7ZX0gbm90IGZvdW5kLmApfWFzeW5jIGdldEFsbFBhZ2VEaWN0cyhlPSExKXtjb25zdHtpZ25vcmVFcnJvcnM6dH09dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMsYT1be2N1cnJlbnROb2RlOnRoaXMudG9wbGV2ZWxQYWdlc0RpY3QscG9zSW5LaWRzOjB9XSxzPW5ldyBuLlJlZlNldCxvPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpO28gaW5zdGFuY2VvZiBuLlJlZiYmcy5wdXQobyk7Y29uc3QgYz1uZXcgTWFwLGw9dGhpcy54cmVmLGg9dGhpcy5wYWdlSW5kZXhDYWNoZTtsZXQgdT0wO2Z1bmN0aW9uIGFkZFBhZ2VEaWN0KGUsdCl7dCYmIWguaGFzKHQpJiZoLnB1dCh0LHUpO2Muc2V0KHUrKyxbZSx0XSl9ZnVuY3Rpb24gYWRkUGFnZUVycm9yKGEpe2lmKGEgaW5zdGFuY2VvZiByLlhSZWZFbnRyeUV4Y2VwdGlvbiYmIWUpdGhyb3cgYTtpZihlJiZ0JiYwPT09dSl7KDAsaS53YXJuKShgZ2V0QWxsUGFnZURpY3RzIC0gU2tpcHBpbmcgaW52YWxpZCBmaXJzdCBwYWdlOiAiJHthfSIuYCk7YT1uLkRpY3QuZW1wdHl9Yy5zZXQodSsrLFthLG51bGxdKX1mb3IoO2EubGVuZ3RoPjA7KXtjb25zdCBlPWEuYXQoLTEpLHtjdXJyZW50Tm9kZTp0LHBvc0luS2lkczpyfT1lO2xldCBvPXQuZ2V0UmF3KCJLaWRzIik7aWYobyBpbnN0YW5jZW9mIG4uUmVmKXRyeXtvPWF3YWl0IGwuZmV0Y2hBc3luYyhvKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9aWYoIUFycmF5LmlzQXJyYXkobykpe2FkZFBhZ2VFcnJvcihuZXcgaS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSk7YnJlYWt9aWYocj49by5sZW5ndGgpe2EucG9wKCk7Y29udGludWV9Y29uc3QgYz1vW3JdO2xldCBoO2lmKGMgaW5zdGFuY2VvZiBuLlJlZil7aWYocy5oYXMoYykpe2FkZFBhZ2VFcnJvcihuZXcgaS5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpO2JyZWFrfXMucHV0KGMpO3RyeXtoPWF3YWl0IGwuZmV0Y2hBc3luYyhjKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9fWVsc2UgaD1jO2lmKCEoaCBpbnN0YW5jZW9mIG4uRGljdCkpe2FkZFBhZ2VFcnJvcihuZXcgaS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKTticmVha31sZXQgdT1oLmdldFJhdygiVHlwZSIpO2lmKHUgaW5zdGFuY2VvZiBuLlJlZil0cnl7dT1hd2FpdCBsLmZldGNoQXN5bmModSl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfSgwLG4uaXNOYW1lKSh1LCJQYWdlIil8fCFoLmhhcygiS2lkcyIpP2FkZFBhZ2VEaWN0KGgsYyBpbnN0YW5jZW9mIG4uUmVmP2M6bnVsbCk6YS5wdXNoKHtjdXJyZW50Tm9kZTpoLHBvc0luS2lkczowfSk7ZS5wb3NJbktpZHMrK31yZXR1cm4gY31nZXRQYWdlSW5kZXgoZSl7Y29uc3QgdD10aGlzLnBhZ2VJbmRleENhY2hlLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7Y29uc3QgYT10aGlzLnhyZWY7bGV0IHI9MDtjb25zdCBuZXh0PXQ9PmZ1bmN0aW9uIHBhZ2VzQmVmb3JlUmVmKHQpe2xldCByLHM9MDtyZXR1cm4gYS5mZXRjaEFzeW5jKHQpLnRoZW4oKGZ1bmN0aW9uKGEpe2lmKCgwLG4uaXNSZWZzRXF1YWwpKHQsZSkmJiEoMCxuLmlzRGljdCkoYSwiUGFnZSIpJiYhKGEgaW5zdGFuY2VvZiBuLkRpY3QmJiFhLmhhcygiVHlwZSIpJiZhLmhhcygiQ29udGVudHMiKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpO2lmKCFhKXJldHVybiBudWxsO2lmKCEoYSBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cj1hLmdldFJhdygiUGFyZW50Iik7cmV0dXJuIGEuZ2V0QXN5bmMoIlBhcmVudCIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCEoZSBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm4gZS5nZXRBc3luYygiS2lkcyIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2NvbnN0IG89W107bGV0IGM9ITE7Zm9yKGNvbnN0IHIgb2YgZSl7aWYoIShyIGluc3RhbmNlb2Ygbi5SZWYpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4iKTtpZigoMCxuLmlzUmVmc0VxdWFsKShyLHQpKXtjPSEwO2JyZWFrfW8ucHVzaChhLmZldGNoQXN5bmMocikudGhlbigoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2Ygbi5EaWN0KSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7ZS5oYXMoIkNvdW50Iik/cys9ZS5nZXQoIkNvdW50Iik6cysrfSkpKX1pZighYyl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwobykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bcyxyXX0pKX0pKX0odCkudGhlbigodD0+e2lmKCF0KXt0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChlLHIpO3JldHVybiByfWNvbnN0W2EsaV09dDtyKz1hO3JldHVybiBuZXh0KGkpfSkpO3JldHVybiBuZXh0KGUpfWdldCBiYXNlVXJsKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiVVJJIik7aWYoZSBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3QgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3QgZT0oMCxpLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHQsbnVsbCx7dHJ5Q29udmVydEVuY29kaW5nOiEwfSk7aWYoZSlyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYmFzZVVybCIsZS5ocmVmKX19cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLG51bGwpfXN0YXRpYyBwYXJzZURlc3REaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9ZS5kZXN0RGljdDtpZighKHQgaW5zdGFuY2VvZiBuLkRpY3QpKXsoMCxpLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybn1jb25zdCBhPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiIT10eXBlb2YgYSl7KDAsaS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIik7cmV0dXJufWNvbnN0IHM9ZS5kb2NCYXNlVXJsfHxudWxsLGM9ZS5kb2NBdHRhY2htZW50c3x8bnVsbDtsZXQgbCxoLHU9dC5nZXQoIkEiKTtpZighKHUgaW5zdGFuY2VvZiBuLkRpY3QpKWlmKHQuaGFzKCJEZXN0IikpdT10LmdldCgiRGVzdCIpO2Vsc2V7dT10LmdldCgiQUEiKTt1IGluc3RhbmNlb2Ygbi5EaWN0JiYodS5oYXMoIkQiKT91PXUuZ2V0KCJEIik6dS5oYXMoIlUiKSYmKHU9dS5nZXQoIlUiKSkpfWlmKHUgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IGU9dS5nZXQoIlMiKTtpZighKGUgaW5zdGFuY2VvZiBuLk5hbWUpKXsoMCxpLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuIik7cmV0dXJufWNvbnN0IHQ9ZS5uYW1lO3N3aXRjaCh0KXtjYXNlIlJlc2V0Rm9ybSI6Y29uc3QgZT11LmdldCgiRmxhZ3MiKSxzPTA9PSgxJigibnVtYmVyIj09dHlwZW9mIGU/ZTowKSksZD1bXSxmPVtdO2Zvcihjb25zdCBlIG9mIHUuZ2V0KCJGaWVsZHMiKXx8W10pZSBpbnN0YW5jZW9mIG4uUmVmP2YucHVzaChlLnRvU3RyaW5nKCkpOiJzdHJpbmciPT10eXBlb2YgZSYmZC5wdXNoKCgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGUpKTthLnJlc2V0Rm9ybT17ZmllbGRzOmQscmVmczpmLGluY2x1ZGU6c307YnJlYWs7Y2FzZSJVUkkiOmw9dS5nZXQoIlVSSSIpO2wgaW5zdGFuY2VvZiBuLk5hbWUmJihsPSIvIitsLm5hbWUpO2JyZWFrO2Nhc2UiR29UbyI6aD11LmdldCgiRCIpO2JyZWFrO2Nhc2UiTGF1bmNoIjpjYXNlIkdvVG9SIjpjb25zdCBnPXUuZ2V0KCJGIik7ZyBpbnN0YW5jZW9mIG4uRGljdD9sPWcuZ2V0KCJGIil8fG51bGw6InN0cmluZyI9PXR5cGVvZiBnJiYobD1nKTtsZXQgcD11LmdldCgiRCIpO2lmKHApe3AgaW5zdGFuY2VvZiBuLk5hbWUmJihwPXAubmFtZSk7aWYoInN0cmluZyI9PXR5cGVvZiBsKXtjb25zdCBlPWwuc3BsaXQoIiMiKVswXTsic3RyaW5nIj09dHlwZW9mIHA/bD1lKyIjIitwOkFycmF5LmlzQXJyYXkocCkmJihsPWUrIiMiK0pTT04uc3RyaW5naWZ5KHApKX19Y29uc3QgbT11LmdldCgiTmV3V2luZG93Iik7ImJvb2xlYW4iPT10eXBlb2YgbSYmKGEubmV3V2luZG93PW0pO2JyZWFrO2Nhc2UiR29Ub0UiOmNvbnN0IGI9dS5nZXQoIlQiKTtsZXQgeTtpZihjJiZiIGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCBlPWIuZ2V0KCJSIiksdD1iLmdldCgiTiIpOygwLG4uaXNOYW1lKShlLCJDIikmJiJzdHJpbmciPT10eXBlb2YgdCYmKHk9Y1soMCxpLnN0cmluZ1RvUERGU3RyaW5nKSh0KV0pfXk/YS5hdHRhY2htZW50PXk6KDAsaS53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6Y29uc3Qgdz11LmdldCgiTiIpO3cgaW5zdGFuY2VvZiBuLk5hbWUmJihhLmFjdGlvbj13Lm5hbWUpO2JyZWFrO2Nhc2UiU2V0T0NHU3RhdGUiOmNvbnN0IFM9dS5nZXQoIlN0YXRlIikseD11LmdldCgiUHJlc2VydmVSQiIpO2lmKCFBcnJheS5pc0FycmF5KFMpfHwwPT09Uy5sZW5ndGgpYnJlYWs7Y29uc3QgQz1bXTtmb3IoY29uc3QgZSBvZiBTKWlmKGUgaW5zdGFuY2VvZiBuLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOmNhc2UiVG9nZ2xlIjpDLnB1c2goZS5uYW1lKX1lbHNlIGUgaW5zdGFuY2VvZiBuLlJlZiYmQy5wdXNoKGUudG9TdHJpbmcoKSk7aWYoQy5sZW5ndGghPT1TLmxlbmd0aClicmVhazthLnNldE9DR1N0YXRlPXtzdGF0ZTpDLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgeHx8eH07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijpjb25zdCBrPXUuZ2V0KCJKUyIpO2xldCB2O2sgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0/dj1rLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgayYmKHY9ayk7Y29uc3QgRj12JiYoMCxyLnJlY292ZXJKc1VSTCkoKDAsaS5zdHJpbmdUb1BERlN0cmluZykodikpO2lmKEYpe2w9Ri51cmw7YS5uZXdXaW5kb3c9Ri5uZXdXaW5kb3c7YnJlYWt9ZGVmYXVsdDppZigiSmF2YVNjcmlwdCI9PT10fHwiU3VibWl0Rm9ybSI9PT10KWJyZWFrOygwLGkud2FybikoYHBhcnNlRGVzdERpY3Rpb25hcnkgLSB1bnN1cHBvcnRlZCBhY3Rpb246ICIke3R9Ii5gKX19ZWxzZSB0LmhhcygiRGVzdCIpJiYoaD10LmdldCgiRGVzdCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2NvbnN0IGU9KDAsaS5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShsLHMse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtlJiYoYS51cmw9ZS5ocmVmKTthLnVuc2FmZVVybD1sfWlmKGgpe2ggaW5zdGFuY2VvZiBuLk5hbWUmJihoPWgubmFtZSk7InN0cmluZyI9PXR5cGVvZiBoP2EuZGVzdD0oMCxpLnN0cmluZ1RvUERGU3RyaW5nKShoKTpBcnJheS5pc0FycmF5KGgpJiYoYS5kZXN0PWgpfX19dC5DYXRhbG9nPUNhdGFsb2d9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OdW1iZXJUcmVlPXQuTmFtZVRyZWU9dm9pZCAwO3ZhciByPWEoNCksaT1hKDIpO2NsYXNzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuY29uc3RydWN0b3I9PT1OYW1lT3JOdW1iZXJUcmVlJiYoMCxpLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgTmFtZU9yTnVtYmVyVHJlZS4iKTt0aGlzLnJvb3Q9ZTt0aGlzLnhyZWY9dDt0aGlzLl90eXBlPWF9Z2V0QWxsKCl7Y29uc3QgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7Y29uc3QgdD10aGlzLnhyZWYsYT1uZXcgci5SZWZTZXQ7YS5wdXQodGhpcy5yb290KTtjb25zdCBuPVt0aGlzLnJvb3RdO2Zvcig7bi5sZW5ndGg+MDspe2NvbnN0IHM9dC5mZXRjaElmUmVmKG4uc2hpZnQoKSk7aWYoIShzIGluc3RhbmNlb2Ygci5EaWN0KSljb250aW51ZTtpZihzLmhhcygiS2lkcyIpKXtjb25zdCBlPXMuZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkoZSkpY29udGludWU7Zm9yKGNvbnN0IHQgb2YgZSl7aWYoYS5oYXModCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoYER1cGxpY2F0ZSBlbnRyeSBpbiAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTtuLnB1c2godCk7YS5wdXQodCl9Y29udGludWV9Y29uc3Qgbz1zLmdldCh0aGlzLl90eXBlKTtpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgYT0wLHI9by5sZW5ndGg7YTxyO2ErPTIpZS5zZXQodC5mZXRjaElmUmVmKG9bYV0pLHQuZmV0Y2hJZlJlZihvW2ErMV0pKX1yZXR1cm4gZX1nZXQoZSl7aWYoIXRoaXMucm9vdClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMueHJlZjtsZXQgYT10LmZldGNoSWZSZWYodGhpcy5yb290KSxyPTA7Zm9yKDthLmhhcygiS2lkcyIpOyl7aWYoKytyPjEwKXsoMCxpLndhcm4pKGBTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIiR7dGhpcy5fdHlwZX0iIHRyZWUuYCk7cmV0dXJuIG51bGx9Y29uc3Qgbj1hLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KG4pKXJldHVybiBudWxsO2xldCBzPTAsbz1uLmxlbmd0aC0xO2Zvcig7czw9bzspe2NvbnN0IHI9cytvPj4xLGk9dC5mZXRjaElmUmVmKG5bcl0pLGM9aS5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGNbMF0pKW89ci0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihjWzFdKSkpe2E9aTticmVha31zPXIrMX19aWYocz5vKXJldHVybiBudWxsfWNvbnN0IG49YS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShuKSl7bGV0IGE9MCxyPW4ubGVuZ3RoLTI7Zm9yKDthPD1yOyl7Y29uc3QgaT1hK3I+PjEscz1pKygxJmkpLG89dC5mZXRjaElmUmVmKG5bc10pO2lmKGU8bylyPXMtMjtlbHNle2lmKCEoZT5vKSlyZXR1cm4gdC5mZXRjaElmUmVmKG5bcysxXSk7YT1zKzJ9fX1yZXR1cm4gbnVsbH19dC5OYW1lVHJlZT1jbGFzcyBOYW1lVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk5hbWVzIil9fTt0Lk51bWJlclRyZWU9Y2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk51bXMiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24gY2xlYXJHbG9iYWxDYWNoZXMoKXsoMCxyLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpOygwLGkuY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgcj1hKDQpLGk9YSg0MCl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5GaWxlU3BlYz12b2lkIDA7dmFyIHI9YSgyKSxpPWEoNSksbj1hKDQpO2Z1bmN0aW9uIHBpY2tQbGF0Zm9ybUl0ZW0oZSl7cmV0dXJuIGUuaGFzKCJVRiIpP2UuZ2V0KCJVRiIpOmUuaGFzKCJGIik/ZS5nZXQoIkYiKTplLmhhcygiVW5peCIpP2UuZ2V0KCJVbml4Iik6ZS5oYXMoIk1hYyIpP2UuZ2V0KCJNYWMiKTplLmhhcygiRE9TIik/ZS5nZXQoIkRPUyIpOm51bGx9dC5GaWxlU3BlYz1jbGFzcyBGaWxlU3BlY3tjb25zdHJ1Y3RvcihlLHQpe2lmKGUgaW5zdGFuY2VvZiBuLkRpY3Qpe3RoaXMueHJlZj10O3RoaXMucm9vdD1lO2UuaGFzKCJGUyIpJiYodGhpcy5mcz1lLmdldCgiRlMiKSk7dGhpcy5kZXNjcmlwdGlvbj1lLmhhcygiRGVzYyIpPygwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJEZXNjIikpOiIiO2UuaGFzKCJSRiIpJiYoMCxyLndhcm4pKCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITA7aWYoIWUuaGFzKCJFRiIpKXt0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITE7KDAsci53YXJuKSgiTm9uLWVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKX19fWdldCBmaWxlbmFtZSgpe2lmKCF0aGlzLl9maWxlbmFtZSYmdGhpcy5yb290KXtjb25zdCBlPXBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290KXx8InVubmFtZWQiO3RoaXMuX2ZpbGVuYW1lPSgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpLnJlcGxhY2VBbGwoIlxcXFwiLCJcXCIpLnJlcGxhY2VBbGwoIlxcLyIsIi8iKS5yZXBsYWNlQWxsKCJcXCIsIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9Z2V0IGNvbnRlbnQoKXtpZighdGhpcy5jb250ZW50QXZhaWxhYmxlKXJldHVybiBudWxsOyF0aGlzLmNvbnRlbnRSZWYmJnRoaXMucm9vdCYmKHRoaXMuY29udGVudFJlZj1waWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdC5nZXQoIkVGIikpKTtsZXQgZT1udWxsO2lmKHRoaXMuY29udGVudFJlZil7Y29uc3QgdD10aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLmNvbnRlbnRSZWYpO3QgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0/ZT10LmdldEJ5dGVzKCk6KDAsci53YXJuKSgiRW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9uIHBvaW50cyB0byBub24tZXhpc3RpbmcvaW52YWxpZCBjb250ZW50Iil9ZWxzZSgwLHIud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgY29udGVudCIpO3JldHVybiBlfWdldCBzZXJpYWxpemFibGUoKXtyZXR1cm57ZmlsZW5hbWU6dGhpcy5maWxlbmFtZSxjb250ZW50OnRoaXMuY29udGVudH19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk1ldGFkYXRhUGFyc2VyPXZvaWQgMDt2YXIgcj1hKDY3KTt0Lk1ldGFkYXRhUGFyc2VyPWNsYXNzIE1ldGFkYXRhUGFyc2Vye2NvbnN0cnVjdG9yKGUpe2U9dGhpcy5fcmVwYWlyKGUpO2NvbnN0IHQ9bmV3IHIuU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXA7dGhpcy5fZGF0YT1lO3QmJnRoaXMuX3BhcnNlKHQpfV9yZXBhaXIoZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZUFsbCgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT10LnJlcGxhY2VBbGwoL1xcKFswLTNdKShbMC03XSkoWzAtN10pL2csKGZ1bmN0aW9uKGUsdCxhLHIpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0KnQrOCphKzEqcil9KSkucmVwbGFjZUFsbCgvJihhbXB8YXBvc3xndHxsdHxxdW90KTsvZywoZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlImFwb3MiOnJldHVybiInIjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UicXVvdCI6cmV0dXJuJyInfXRocm93IG5ldyBFcnJvcihgX3JlcGFpcjogJHt0fSBpc24ndCBkZWZpbmVkLmApfSkpLHI9WyI+Il07Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7ZSs9Mil7Y29uc3QgdD0yNTYqYS5jaGFyQ29kZUF0KGUpK2EuY2hhckNvZGVBdChlKzEpO3Q+PTMyJiZ0PDEyNyYmNjAhPT10JiY2MiE9PXQmJjM4IT09dD9yLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk6ci5wdXNoKCImI3giKyg2NTUzNit0KS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpKyI7Iil9cmV0dXJuIHIuam9pbigiIil9KSl9X2dldFNlcXVlbmNlKGUpe2NvbnN0IHQ9ZS5ub2RlTmFtZTtyZXR1cm4icmRmOmJhZyIhPT10JiYicmRmOnNlcSIhPT10JiYicmRmOmFsdCIhPT10P251bGw6ZS5jaGlsZE5vZGVzLmZpbHRlcigoZT0+InJkZjpsaSI9PT1lLm5vZGVOYW1lKSl9X3BhcnNlQXJyYXkoZSl7aWYoIWUuaGFzQ2hpbGROb2RlcygpKXJldHVybjtjb25zdFt0XT1lLmNoaWxkTm9kZXMsYT10aGlzLl9nZXRTZXF1ZW5jZSh0KXx8W107dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUubm9kZU5hbWUsYS5tYXAoKGU9PmUudGV4dENvbnRlbnQudHJpbSgpKSkpfV9wYXJzZShlKXtsZXQgdD1lLmRvY3VtZW50RWxlbWVudDtpZigicmRmOnJkZiIhPT10Lm5vZGVOYW1lKXt0PXQuZmlyc3RDaGlsZDtmb3IoO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZ31pZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSlmb3IoY29uc3QgZSBvZiB0LmNoaWxkTm9kZXMpaWYoInJkZjpkZXNjcmlwdGlvbiI9PT1lLm5vZGVOYW1lKWZvcihjb25zdCB0IG9mIGUuY2hpbGROb2Rlcyl7Y29uc3QgZT10Lm5vZGVOYW1lO3N3aXRjaChlKXtjYXNlIiN0ZXh0Ijpjb250aW51ZTtjYXNlImRjOmNyZWF0b3IiOmNhc2UiZGM6c3ViamVjdCI6dGhpcy5fcGFyc2VBcnJheSh0KTtjb250aW51ZX10aGlzLl9tZXRhZGF0YU1hcC5zZXQoZSx0LnRleHRDb250ZW50LnRyaW0oKSl9fWdldCBzZXJpYWxpemFibGUoKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TdHJ1Y3RUcmVlUm9vdD10LlN0cnVjdFRyZWVQYWdlPXZvaWQgMDt2YXIgcj1hKDQpLGk9YSgyKSxuPWEoNzEpO2NvbnN0IHM9IlBBR0VfQ09OVEVOVCIsbz0iU1RSRUFNX0NPTlRFTlQiLGM9Ik9CSkVDVCIsbD0iRUxFTUVOVCI7dC5TdHJ1Y3RUcmVlUm9vdD1jbGFzcyBTdHJ1Y3RUcmVlUm9vdHtjb25zdHJ1Y3RvcihlKXt0aGlzLmRpY3Q9ZTt0aGlzLnJvbGVNYXA9bmV3IE1hcH1pbml0KCl7dGhpcy5yZWFkUm9sZU1hcCgpfXJlYWRSb2xlTWFwKCl7Y29uc3QgZT10aGlzLmRpY3QuZ2V0KCJSb2xlTWFwIik7ZSBpbnN0YW5jZW9mIHIuRGljdCYmZS5mb3JFYWNoKCgoZSx0KT0+e3QgaW5zdGFuY2VvZiByLk5hbWUmJnRoaXMucm9sZU1hcC5zZXQoZSx0Lm5hbWUpfSkpfX07Y2xhc3MgU3RydWN0RWxlbWVudE5vZGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnRyZWU9ZTt0aGlzLmRpY3Q9dDt0aGlzLmtpZHM9W107dGhpcy5wYXJzZUtpZHMoKX1nZXQgcm9sZSgpe2NvbnN0IGU9dGhpcy5kaWN0LmdldCgiUyIpLHQ9ZSBpbnN0YW5jZW9mIHIuTmFtZT9lLm5hbWU6IiIse3Jvb3Q6YX09dGhpcy50cmVlO3JldHVybiBhLnJvbGVNYXAuaGFzKHQpP2Eucm9sZU1hcC5nZXQodCk6dH1wYXJzZUtpZHMoKXtsZXQgZT1udWxsO2NvbnN0IHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2Ygci5SZWYmJihlPXQudG9TdHJpbmcoKSk7Y29uc3QgYT10aGlzLmRpY3QuZ2V0KCJLIik7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IoY29uc3QgdCBvZiBhKXtjb25zdCBhPXRoaXMucGFyc2VLaWQoZSx0KTthJiZ0aGlzLmtpZHMucHVzaChhKX1lbHNle2NvbnN0IHQ9dGhpcy5wYXJzZUtpZChlLGEpO3QmJnRoaXMua2lkcy5wdXNoKHQpfX1wYXJzZUtpZChlLHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHRoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpzLG1jaWQ6dCxwYWdlT2JqSWQ6ZX0pO2xldCBhPW51bGw7dCBpbnN0YW5jZW9mIHIuUmVmP2E9dGhpcy5kaWN0LnhyZWYuZmV0Y2godCk6dCBpbnN0YW5jZW9mIHIuRGljdCYmKGE9dCk7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgaT1hLmdldFJhdygiUGciKTtpIGluc3RhbmNlb2Ygci5SZWYmJihlPWkudG9TdHJpbmcoKSk7Y29uc3Qgbj1hLmdldCgiVHlwZSIpaW5zdGFuY2VvZiByLk5hbWU/YS5nZXQoIlR5cGUiKS5uYW1lOm51bGw7cmV0dXJuIk1DUiI9PT1uP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpvLHJlZk9iaklkOmEuZ2V0UmF3KCJTdG0iKWluc3RhbmNlb2Ygci5SZWY/YS5nZXRSYXcoIlN0bSIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZSxtY2lkOmEuZ2V0KCJNQ0lEIil9KToiT0JKUiI9PT1uP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpjLHJlZk9iaklkOmEuZ2V0UmF3KCJPYmoiKWluc3RhbmNlb2Ygci5SZWY/YS5nZXRSYXcoIk9iaiIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pOm5ldyBTdHJ1Y3RFbGVtZW50KHt0eXBlOmwsZGljdDphfSl9fWNsYXNzIFN0cnVjdEVsZW1lbnR7Y29uc3RydWN0b3Ioe3R5cGU6ZSxkaWN0OnQ9bnVsbCxtY2lkOmE9bnVsbCxwYWdlT2JqSWQ6cj1udWxsLHJlZk9iaklkOmk9bnVsbH0pe3RoaXMudHlwZT1lO3RoaXMuZGljdD10O3RoaXMubWNpZD1hO3RoaXMucGFnZU9iaklkPXI7dGhpcy5yZWZPYmpJZD1pO3RoaXMucGFyZW50Tm9kZT1udWxsfX10LlN0cnVjdFRyZWVQYWdlPWNsYXNzIFN0cnVjdFRyZWVQYWdle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5yb290PWU7dGhpcy5yb290RGljdD1lP2UuZGljdDpudWxsO3RoaXMucGFnZURpY3Q9dDt0aGlzLm5vZGVzPVtdfXBhcnNlKCl7aWYoIXRoaXMucm9vdHx8IXRoaXMucm9vdERpY3QpcmV0dXJuO2NvbnN0IGU9dGhpcy5yb290RGljdC5nZXQoIlBhcmVudFRyZWUiKTtpZighZSlyZXR1cm47Y29uc3QgdD10aGlzLnBhZ2VEaWN0LmdldCgiU3RydWN0UGFyZW50cyIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybjtjb25zdCBhPW5ldyBuLk51bWJlclRyZWUoZSx0aGlzLnJvb3REaWN0LnhyZWYpLmdldCh0KTtpZighQXJyYXkuaXNBcnJheShhKSlyZXR1cm47Y29uc3QgaT1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIGEpZSBpbnN0YW5jZW9mIHIuUmVmJiZ0aGlzLmFkZE5vZGUodGhpcy5yb290RGljdC54cmVmLmZldGNoKGUpLGkpfWFkZE5vZGUoZSx0LGE9MCl7aWYoYT40MCl7KDAsaS53YXJuKSgiU3RydWN0VHJlZSBNQVhfREVQVEggcmVhY2hlZC4iKTtyZXR1cm4gbnVsbH1pZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7Y29uc3Qgbj1uZXcgU3RydWN0RWxlbWVudE5vZGUodGhpcyxlKTt0LnNldChlLG4pO2NvbnN0IHM9ZS5nZXQoIlAiKTtpZighc3x8KDAsci5pc05hbWUpKHMuZ2V0KCJUeXBlIiksIlN0cnVjdFRyZWVSb290Iikpe3RoaXMuYWRkVG9wTGV2ZWxOb2RlKGUsbil8fHQuZGVsZXRlKGUpO3JldHVybiBufWNvbnN0IG89dGhpcy5hZGROb2RlKHMsdCxhKzEpO2lmKCFvKXJldHVybiBuO2xldCBjPSExO2Zvcihjb25zdCB0IG9mIG8ua2lkcylpZih0LnR5cGU9PT1sJiZ0LmRpY3Q9PT1lKXt0LnBhcmVudE5vZGU9bjtjPSEwfWN8fHQuZGVsZXRlKGUpO3JldHVybiBufWFkZFRvcExldmVsTm9kZShlLHQpe2NvbnN0IGE9dGhpcy5yb290RGljdC5nZXQoIksiKTtpZighYSlyZXR1cm4hMTtpZihhIGluc3RhbmNlb2Ygci5EaWN0KXtpZihhLm9iaklkIT09ZS5vYmpJZClyZXR1cm4hMTt0aGlzLm5vZGVzWzBdPXQ7cmV0dXJuITB9aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuITA7bGV0IGk9ITE7Zm9yKGxldCByPTA7cjxhLmxlbmd0aDtyKyspe2NvbnN0IG49YVtyXTtpZihuPy50b1N0cmluZygpPT09ZS5vYmpJZCl7dGhpcy5ub2Rlc1tyXT10O2k9ITB9fXJldHVybiBpfWdldCBzZXJpYWxpemFibGUoKXtmdW5jdGlvbiBub2RlVG9TZXJpYWxpemFibGUoZSx0LGE9MCl7aWYoYT40MCl7KDAsaS53YXJuKSgiU3RydWN0VHJlZSB0b28gZGVlcCB0byBiZSBmdWxseSBzZXJpYWxpemVkLiIpO3JldHVybn1jb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCk7ci5yb2xlPWUucm9sZTtyLmNoaWxkcmVuPVtdO3QuY2hpbGRyZW4ucHVzaChyKTtjb25zdCBuPWUuZGljdC5nZXQoIkFsdCIpOyJzdHJpbmciPT10eXBlb2YgbiYmKHIuYWx0PSgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKG4pKTtjb25zdCBoPWUuZGljdC5nZXQoIkxhbmciKTsic3RyaW5nIj09dHlwZW9mIGgmJihyLmxhbmc9KDAsaS5zdHJpbmdUb1BERlN0cmluZykoaCkpO2Zvcihjb25zdCB0IG9mIGUua2lkcyl7Y29uc3QgZT10LnR5cGU9PT1sP3QucGFyZW50Tm9kZTpudWxsO2U/bm9kZVRvU2VyaWFsaXphYmxlKGUscixhKzEpOnQudHlwZT09PXN8fHQudHlwZT09PW8/ci5jaGlsZHJlbi5wdXNoKHt0eXBlOiJjb250ZW50IixpZDpgcCR7dC5wYWdlT2JqSWR9X21jJHt0Lm1jaWR9YH0pOnQudHlwZT09PWMmJnIuY2hpbGRyZW4ucHVzaCh7dHlwZToib2JqZWN0IixpZDp0LnJlZk9iaklkfSl9fWNvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmNoaWxkcmVuPVtdO2Uucm9sZT0iUm9vdCI7Zm9yKGNvbnN0IHQgb2YgdGhpcy5ub2Rlcyl0JiZub2RlVG9TZXJpYWxpemFibGUodCxlKTtyZXR1cm4gZX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuT2JqZWN0TG9hZGVyPXZvaWQgMDt2YXIgcj1hKDQpLGk9YSg1KSxuPWEoMykscz1hKDIpO2Z1bmN0aW9uIGFkZENoaWxkcmVuKGUsdCl7aWYoZSBpbnN0YW5jZW9mIHIuRGljdCllPWUuZ2V0UmF3VmFsdWVzKCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtKWU9ZS5kaWN0LmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuO2Zvcihjb25zdCBuIG9mIGUpKChhPW4paW5zdGFuY2VvZiByLlJlZnx8YSBpbnN0YW5jZW9mIHIuRGljdHx8YSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShhKSkmJnQucHVzaChuKTt2YXIgYX10Lk9iamVjdExvYWRlcj1jbGFzcyBPYmplY3RMb2FkZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuZGljdD1lO3RoaXMua2V5cz10O3RoaXMueHJlZj1hO3RoaXMucmVmU2V0PW51bGx9YXN5bmMgbG9hZCgpe2lmKHRoaXMueHJlZi5zdHJlYW0uaXNEYXRhTG9hZGVkKXJldHVybjtjb25zdHtrZXlzOmUsZGljdDp0fT10aGlzO3RoaXMucmVmU2V0PW5ldyByLlJlZlNldDtjb25zdCBhPVtdO2Zvcihjb25zdCByIG9mIGUpe2NvbnN0IGU9dC5nZXRSYXcocik7dm9pZCAwIT09ZSYmYS5wdXNoKGUpfXJldHVybiB0aGlzLl93YWxrKGEpfWFzeW5jIF93YWxrKGUpe2NvbnN0IHQ9W10sYT1bXTtmb3IoO2UubGVuZ3RoOyl7bGV0IG89ZS5wb3AoKTtpZihvIGluc3RhbmNlb2Ygci5SZWYpe2lmKHRoaXMucmVmU2V0LmhhcyhvKSljb250aW51ZTt0cnl7dGhpcy5yZWZTZXQucHV0KG8pO289dGhpcy54cmVmLmZldGNoKG8pfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pKXsoMCxzLndhcm4pKGBPYmplY3RMb2FkZXIuX3dhbGsgLSByZXF1ZXN0aW5nIGFsbCBkYXRhOiAiJHtlfSIuYCk7dGhpcy5yZWZTZXQ9bnVsbDtjb25zdHttYW5hZ2VyOnR9PXRoaXMueHJlZi5zdHJlYW07cmV0dXJuIHQucmVxdWVzdEFsbENodW5rcygpfXQucHVzaChvKTthLnB1c2goe2JlZ2luOmUuYmVnaW4sZW5kOmUuZW5kfSl9fWlmKG8gaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2NvbnN0IGU9by5nZXRCYXNlU3RyZWFtcygpO2lmKGUpe2xldCByPSExO2Zvcihjb25zdCB0IG9mIGUpaWYoIXQuaXNEYXRhTG9hZGVkKXtyPSEwO2EucHVzaCh7YmVnaW46dC5zdGFydCxlbmQ6dC5lbmR9KX1yJiZ0LnB1c2gobyl9fWFkZENoaWxkcmVuKG8sZSl9aWYoYS5sZW5ndGgpe2F3YWl0IHRoaXMueHJlZi5zdHJlYW0ubWFuYWdlci5yZXF1ZXN0UmFuZ2VzKGEpO2Zvcihjb25zdCBlIG9mIHQpZSBpbnN0YW5jZW9mIHIuUmVmJiZ0aGlzLnJlZlNldC5yZW1vdmUoZSk7cmV0dXJuIHRoaXMuX3dhbGsodCl9dGhpcy5yZWZTZXQ9bnVsbH19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWEZBRmFjdG9yeT12b2lkIDA7dmFyIHI9YSg3OCksaT1hKDgyKSxuPWEoODgpLHM9YSg4Niksbz1hKDc5KSxjPWEoMiksbD1hKDg5KSxoPWEoOTkpO2NsYXNzIFhGQUZhY3Rvcnl7Y29uc3RydWN0b3IoZSl7dHJ5e3RoaXMucm9vdD0obmV3IGwuWEZBUGFyc2VyKS5wYXJzZShYRkFGYWN0b3J5Ll9jcmVhdGVEb2N1bWVudChlKSk7Y29uc3QgdD1uZXcgaS5CaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09dC5iaW5kKCk7dGhpcy5kYXRhSGFuZGxlcj1uZXcgbi5EYXRhSGFuZGxlcih0aGlzLnJvb3QsdC5nZXREYXRhKCkpO3RoaXMuZm9ybVtyLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZT10aGlzLmZvcm19Y2F0Y2goZSl7KDAsYy53YXJuKShgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgYW5kIGJpbmRpbmc6ICR7ZX1gKX19aXNWYWxpZCgpe3JldHVybiB0aGlzLnJvb3QmJnRoaXMuZm9ybX1fY3JlYXRlUGFnZXNIZWxwZXIoKXtjb25zdCBlPXRoaXMuZm9ybVtyLiR0b1BhZ2VzXSgpO3JldHVybiBuZXcgUHJvbWlzZSgoKHQsYSk9Pntjb25zdCBuZXh0SXRlcmF0aW9uPSgpPT57dHJ5e2NvbnN0IGE9ZS5uZXh0KCk7YS5kb25lP3QoYS52YWx1ZSk6c2V0VGltZW91dChuZXh0SXRlcmF0aW9uLDApfWNhdGNoKGUpe2EoZSl9fTtzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9KSl9YXN5bmMgX2NyZWF0ZVBhZ2VzKCl7dHJ5e3RoaXMucGFnZXM9YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXNIZWxwZXIoKTt0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGU9Pntjb25zdHt3aWR0aDp0LGhlaWdodDphfT1lLmF0dHJpYnV0ZXMuc3R5bGU7cmV0dXJuWzAsMCxwYXJzZUludCh0KSxwYXJzZUludChhKV19KSl9Y2F0Y2goZSl7KDAsYy53YXJuKShgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGxheW91dDogJHtlfWApfX1nZXRCb3VuZGluZ0JveChlKXtyZXR1cm4gdGhpcy5kaW1zW2VdfWFzeW5jIGdldE51bVBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtyZXR1cm4gdGhpcy5kaW1zLmxlbmd0aH1zZXRJbWFnZXMoZSl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmltYWdlcz1lfXNldEZvbnRzKGUpe3RoaXMuZm9ybVtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyPW5ldyBzLkZvbnRGaW5kZXIoZSk7Y29uc3QgdD1bXTtmb3IobGV0IGUgb2YgdGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMpe2U9KDAsby5zdHJpcFF1b3RlcykoZSk7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZChlKXx8dC5wdXNoKGUpfXJldHVybiB0Lmxlbmd0aD4wP3Q6bnVsbH1hcHBlbmRGb250cyhlLHQpe3RoaXMuZm9ybVtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmFkZChlLHQpfWFzeW5jIGdldFBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtjb25zdCBlPXRoaXMucGFnZXM7dGhpcy5wYWdlcz1udWxsO3JldHVybiBlfXNlcmlhbGl6ZURhdGEoZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfXN0YXRpYyBfY3JlYXRlRG9jdW1lbnQoZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19c3RhdGljIGdldFJpY2hUZXh0QXNIdG1sKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e2xldCB0PW5ldyBsLlhGQVBhcnNlcihoLlhodG1sTmFtZXNwYWNlLCEwKS5wYXJzZShlKTtpZighWyJib2R5IiwieGh0bWwiXS5pbmNsdWRlcyh0W3IuJG5vZGVOYW1lXSkpe2NvbnN0IGU9aC5YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtlW3IuJGFwcGVuZENoaWxkXSh0KTt0PWV9Y29uc3QgYT10W3IuJHRvSFRNTF0oKTtpZighYS5zdWNjZXNzKXJldHVybiBudWxsO2NvbnN0e2h0bWw6aX09YSx7YXR0cmlidXRlczpufT1pO2lmKG4pe24uY2xhc3MmJihuLmNsYXNzPW4uY2xhc3MuZmlsdGVyKChlPT4hZS5zdGFydHNXaXRoKCJ4ZmEiKSkpKTtuLmRpcj0iYXV0byJ9cmV0dXJue2h0bWw6aSxzdHI6dFtyLiR0ZXh0XSgpfX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICR7ZX1gKX1yZXR1cm4gbnVsbH19dC5YRkFGYWN0b3J5PVhGQUZhY3Rvcnl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YbWxPYmplY3Q9dC5YRkFPYmplY3RBcnJheT10LlhGQU9iamVjdD10LlhGQUF0dHJpYnV0ZT10LlN0cmluZ09iamVjdD10Lk9wdGlvbk9iamVjdD10Lk9wdGlvbjEwPXQuT3B0aW9uMDE9dC5JbnRlZ2VyT2JqZWN0PXQuQ29udGVudE9iamVjdD10LiR1aWQ9dC4kdG9TdHlsZT10LiR0b1N0cmluZz10LiR0b1BhZ2VzPXQuJHRvSFRNTD10LiR0ZXh0PXQuJHRhYkluZGV4PXQuJHNldFZhbHVlPXQuJHNldFNldEF0dHJpYnV0ZXM9dC4kc2V0SWQ9dC4kc2VhcmNoTm9kZT10LiRyb290PXQuJHJlc29sdmVQcm90b3R5cGVzPXQuJHJlbW92ZUNoaWxkPXQuJHB1c2hQYXJhPXQuJHB1c2hHbHlwaHM9dC4kcG9wUGFyYT10LiRvblRleHQ9dC4kb25DaGlsZENoZWNrPXQuJG9uQ2hpbGQ9dC4kbnNBdHRyaWJ1dGVzPXQuJG5vZGVOYW1lPXQuJG5hbWVzcGFjZUlkPXQuJGlzVXNhYmxlPXQuJGlzVHJhbnNwYXJlbnQ9dC4kaXNUaGVyZU1vcmVXaWR0aD10LiRpc1NwbGl0dGFibGU9dC4kaXNOc0Fnbm9zdGljPXQuJGlzRGVzY2VuZGVudD10LiRpc0RhdGFWYWx1ZT10LiRpc0NEQVRBWG1sPXQuJGlzQmluZGFibGU9dC4kaW5zZXJ0QXQ9dC4kaW5kZXhPZj10LiRpZHM9dC4kaGFzU2V0dGFibGVWYWx1ZT10LiRnbG9iYWxEYXRhPXQuJGdldFRlbXBsYXRlUm9vdD10LiRnZXRTdWJmb3JtUGFyZW50PXQuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0PXQuJGdldFBhcmVudD10LiRnZXROZXh0UGFnZT10LiRnZXRFeHRyYT10LiRnZXREYXRhVmFsdWU9dC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW49dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD10LiRnZXRDaGlsZHJlbkJ5TmFtZT10LiRnZXRDaGlsZHJlbkJ5Q2xhc3M9dC4kZ2V0Q2hpbGRyZW49dC4kZ2V0QXZhaWxhYmxlU3BhY2U9dC4kZ2V0QXR0cmlidXRlcz10LiRnZXRBdHRyaWJ1dGVJdD10LiRmbHVzaEhUTUw9dC4kZmluYWxpemU9dC4kZXh0cmE9dC4kZHVtcD10LiRkYXRhPXQuJGNvbnRlbnQ9dC4kY29uc3VtZWQ9dC4kY2xvbmU9dC4kY2xlYW51cD10LiRjbGVhblBhZ2U9dC4kY2xlYW49dC4kY2hpbGRyZW5Ub0hUTUw9dC4kYXBwZW5kQ2hpbGQ9dC4kYWRkSFRNTD10LiRhY2NlcHRXaGl0ZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDc5KSxpPWEoMiksbj1hKDMpLHM9YSg4MCksbz1hKDgxKTtjb25zdCBjPVN5bWJvbCgpO3QuJGFjY2VwdFdoaXRlc3BhY2U9Yztjb25zdCBsPVN5bWJvbCgpO3QuJGFkZEhUTUw9bDtjb25zdCBoPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPWg7Y29uc3QgdT1TeW1ib2woKTt0LiRjaGlsZHJlblRvSFRNTD11O2NvbnN0IGQ9U3ltYm9sKCk7dC4kY2xlYW49ZDtjb25zdCBmPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1mO2NvbnN0IGc9U3ltYm9sKCk7dC4kY2xlYW51cD1nO2NvbnN0IHA9U3ltYm9sKCk7dC4kY2xvbmU9cDtjb25zdCBtPVN5bWJvbCgpO3QuJGNvbnN1bWVkPW07Y29uc3QgYj1TeW1ib2woImNvbnRlbnQiKTt0LiRjb250ZW50PWI7Y29uc3QgeT1TeW1ib2woImRhdGEiKTt0LiRkYXRhPXk7Y29uc3Qgdz1TeW1ib2woKTt0LiRkdW1wPXc7Y29uc3QgUz1TeW1ib2woImV4dHJhIik7dC4kZXh0cmE9Uztjb25zdCB4PVN5bWJvbCgpO3QuJGZpbmFsaXplPXg7Y29uc3QgQz1TeW1ib2woKTt0LiRmbHVzaEhUTUw9Qztjb25zdCBrPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZUl0PWs7Y29uc3Qgdj1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVzPXY7Y29uc3QgRj1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT1GO2NvbnN0IE89U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPU87Y29uc3QgVD1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbkJ5TmFtZT1UO2NvbnN0IE09U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1NO2NvbnN0IEU9U3ltYm9sKCk7dC4kZ2V0RGF0YVZhbHVlPUU7Y29uc3QgRD1TeW1ib2woKTt0LiRnZXRFeHRyYT1EO2NvbnN0IE49U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9Tjtjb25zdCBSPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuPVI7Y29uc3QgTD1TeW1ib2woKTt0LiRnZXRDb250YWluZWRDaGlsZHJlbj1MO2NvbnN0IF89U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9Xztjb25zdCAkPVN5bWJvbCgpO3QuJGdldFN1YmZvcm1QYXJlbnQ9JDtjb25zdCBqPVN5bWJvbCgpO3QuJGdldFBhcmVudD1qO2NvbnN0IFU9U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PVU7Y29uc3QgWD1TeW1ib2woKTt0LiRnbG9iYWxEYXRhPVg7Y29uc3QgSD1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPUg7Y29uc3QgcT1TeW1ib2woKTt0LiRpZHM9cTtjb25zdCB6PVN5bWJvbCgpO3QuJGluZGV4T2Y9ejtjb25zdCBXPVN5bWJvbCgpO3QuJGluc2VydEF0PVc7Y29uc3QgRz1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPUc7Y29uc3QgVj1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPVY7Y29uc3QgSz1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1LO2NvbnN0IEo9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PUo7Y29uc3QgWT1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9WTtjb25zdCBaPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT1aO2NvbnN0IFE9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1RO2NvbnN0IGVlPVN5bWJvbCgpO3QuJGlzVHJhbnNwYXJlbnQ9ZWU7Y29uc3QgdGU9U3ltYm9sKCk7dC4kaXNVc2FibGU9dGU7Y29uc3QgYWU9U3ltYm9sKCkscmU9U3ltYm9sKCJuYW1lc3BhY2VJZCIpO3QuJG5hbWVzcGFjZUlkPXJlO2NvbnN0IGllPVN5bWJvbCgibm9kZU5hbWUiKTt0LiRub2RlTmFtZT1pZTtjb25zdCBuZT1TeW1ib2woKTt0LiRuc0F0dHJpYnV0ZXM9bmU7Y29uc3Qgc2U9U3ltYm9sKCk7dC4kb25DaGlsZD1zZTtjb25zdCBvZT1TeW1ib2woKTt0LiRvbkNoaWxkQ2hlY2s9b2U7Y29uc3QgY2U9U3ltYm9sKCk7dC4kb25UZXh0PWNlO2NvbnN0IGxlPVN5bWJvbCgpO3QuJHB1c2hHbHlwaHM9bGU7Y29uc3QgaGU9U3ltYm9sKCk7dC4kcG9wUGFyYT1oZTtjb25zdCB1ZT1TeW1ib2woKTt0LiRwdXNoUGFyYT11ZTtjb25zdCBkZT1TeW1ib2woKTt0LiRyZW1vdmVDaGlsZD1kZTtjb25zdCBmZT1TeW1ib2woInJvb3QiKTt0LiRyb290PWZlO2NvbnN0IGdlPVN5bWJvbCgpO3QuJHJlc29sdmVQcm90b3R5cGVzPWdlO2NvbnN0IHBlPVN5bWJvbCgpO3QuJHNlYXJjaE5vZGU9cGU7Y29uc3QgbWU9U3ltYm9sKCk7dC4kc2V0SWQ9bWU7Y29uc3QgYmU9U3ltYm9sKCk7dC4kc2V0U2V0QXR0cmlidXRlcz1iZTtjb25zdCB5ZT1TeW1ib2woKTt0LiRzZXRWYWx1ZT15ZTtjb25zdCB3ZT1TeW1ib2woKTt0LiR0YWJJbmRleD13ZTtjb25zdCBTZT1TeW1ib2woKTt0LiR0ZXh0PVNlO2NvbnN0IHhlPVN5bWJvbCgpO3QuJHRvUGFnZXM9eGU7Y29uc3QgQWU9U3ltYm9sKCk7dC4kdG9IVE1MPUFlO2NvbnN0IENlPVN5bWJvbCgpO3QuJHRvU3RyaW5nPUNlO2NvbnN0IGtlPVN5bWJvbCgpO3QuJHRvU3R5bGU9a2U7Y29uc3QgdmU9U3ltYm9sKCJ1aWQiKTt0LiR1aWQ9dmU7Y29uc3QgRmU9U3ltYm9sKCksT2U9U3ltYm9sKCksSWU9U3ltYm9sKCksVGU9U3ltYm9sKCJfY2hpbGRyZW4iKSxNZT1TeW1ib2woKSxQZT1TeW1ib2woKSxFZT1TeW1ib2woKSxCZT1TeW1ib2woKSxEZT1TeW1ib2woKSxOZT1TeW1ib2woKSxSZT1TeW1ib2woKSxMZT1TeW1ib2woKSxfZT1TeW1ib2woKSwkZT1TeW1ib2woInBhcmVudCIpLGplPVN5bWJvbCgpLFVlPVN5bWJvbCgpLFhlPVN5bWJvbCgpO2xldCBIZT0wO2NvbnN0IHFlPXMuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2NsYXNzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQsYT0hMSl7dGhpc1tyZV09ZTt0aGlzW2llXT10O3RoaXNbUmVdPWE7dGhpc1skZV09bnVsbDt0aGlzW1RlXT1bXTt0aGlzW3ZlXT1gJHt0fSR7SGUrK31gO3RoaXNbWF09bnVsbH1bc2VdKGUpe2lmKCF0aGlzW1JlXXx8IXRoaXNbb2VdKGUpKXJldHVybiExO2NvbnN0IHQ9ZVtpZV0sYT10aGlzW3RdO2lmKCEoYSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KSl7bnVsbCE9PWEmJnRoaXNbZGVdKGEpO3RoaXNbdF09ZTt0aGlzW2hdKGUpO3JldHVybiEwfWlmKGEucHVzaChlKSl7dGhpc1toXShlKTtyZXR1cm4hMH1sZXQgcj0iIjt0aGlzLmlkP3I9YCAoaWQ6ICR7dGhpcy5pZH0pYDp0aGlzLm5hbWUmJihyPWAgKG5hbWU6ICR7dGhpcy5uYW1lfSAke3RoaXMuaC52YWx1ZX0pYCk7KDAsaS53YXJuKShgWEZBIC0gbm9kZSAiJHt0aGlzW2llXX0iJHtyfSBoYXMgYWxyZWFkeSBlbm91Z2ggIiR7dH0iIWApO3JldHVybiExfVtvZV0oZSl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoZVtpZV0pJiZlW3JlXT09PXRoaXNbcmVdfVtZXSgpe3JldHVybiExfVtjXSgpe3JldHVybiExfVtHXSgpe3JldHVybiExfVtWXSgpe3JldHVybiExfVtoZV0oKXt0aGlzLnBhcmEmJnRoaXNbVV0oKVtTXS5wYXJhU3RhY2sucG9wKCl9W3VlXSgpe3RoaXNbVV0oKVtTXS5wYXJhU3RhY2sucHVzaCh0aGlzLnBhcmEpfVttZV0oZSl7dGhpcy5pZCYmdGhpc1tyZV09PT1zLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCYmZS5zZXQodGhpcy5pZCx0aGlzKX1bVV0oKXtyZXR1cm4gdGhpc1tYXS50ZW1wbGF0ZX1bWl0oKXtyZXR1cm4hMX1bUV0oKXtyZXR1cm4hMX1baF0oZSl7ZVskZV09dGhpczt0aGlzW1RlXS5wdXNoKGUpOyFlW1hdJiZ0aGlzW1hdJiYoZVtYXT10aGlzW1hdKX1bZGVdKGUpe2NvbnN0IHQ9dGhpc1tUZV0uaW5kZXhPZihlKTt0aGlzW1RlXS5zcGxpY2UodCwxKX1bSF0oKXtyZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKX1beWVdKGUpe31bY2VdKGUpe31beF0oKXt9W2RdKGUpe2RlbGV0ZSB0aGlzW1JlXTtpZih0aGlzW2ddKXtlLmNsZWFuKHRoaXNbZ10pO2RlbGV0ZSB0aGlzW2ddfX1bel0oZSl7cmV0dXJuIHRoaXNbVGVdLmluZGV4T2YoZSl9W1ddKGUsdCl7dFskZV09dGhpczt0aGlzW1RlXS5zcGxpY2UoZSwwLHQpOyF0W1hdJiZ0aGlzW1hdJiYodFtYXT10aGlzW1hdKX1bZWVdKCl7cmV0dXJuIXRoaXMubmFtZX1bYWVdKCl7cmV0dXJuIiJ9W1NlXSgpe3JldHVybiAwPT09dGhpc1tUZV0ubGVuZ3RoP3RoaXNbYl06dGhpc1tUZV0ubWFwKChlPT5lW1NlXSgpKSkuam9pbigiIil9Z2V0W0llXSgpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKCFlLl9hdHRyaWJ1dGVzKXtjb25zdCB0PWUuX2F0dHJpYnV0ZXM9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYobnVsbD09PXRoaXNbZV18fHRoaXNbZV1pbnN0YW5jZW9mIFhGQU9iamVjdHx8dGhpc1tlXWluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpYnJlYWs7dC5hZGQoZSl9fXJldHVybigwLGkuc2hhZG93KSh0aGlzLEllLGUuX2F0dHJpYnV0ZXMpfVtKXShlKXtsZXQgdD10aGlzO2Zvcig7dDspe2lmKHQ9PT1lKXJldHVybiEwO3Q9dFtqXSgpfXJldHVybiExfVtqXSgpe3JldHVybiB0aGlzWyRlXX1bJF0oKXtyZXR1cm4gdGhpc1tqXSgpfVtSXShlPW51bGwpe3JldHVybiBlP3RoaXNbZV06dGhpc1tUZV19W3ddKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXNbYl0mJihlLiRjb250ZW50PXRoaXNbYl0pO2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtjb25zdCBhPXRoaXNbdF07bnVsbCE9PWEmJihhIGluc3RhbmNlb2YgWEZBT2JqZWN0P2VbdF09YVt3XSgpOmEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9hLmlzRW1wdHkoKXx8KGVbdF09YS5kdW1wKCkpOmVbdF09YSl9cmV0dXJuIGV9W2tlXSgpe3JldHVybiBudWxsfVtBZV0oKXtyZXR1cm4gci5IVE1MUmVzdWx0LkVNUFRZfSpbTF0oKXtmb3IoY29uc3QgZSBvZiB0aGlzW1JdKCkpeWllbGQgZX0qW0JlXShlLHQpe2Zvcihjb25zdCBhIG9mIHRoaXNbTF0oKSlpZighZXx8dD09PWUuaGFzKGFbaWVdKSl7Y29uc3QgZT10aGlzW0ZdKCksdD1hW0FlXShlKTt0LnN1Y2Nlc3N8fCh0aGlzW1NdLmZhaWxpbmdOb2RlPWEpO3lpZWxkIHR9fVtDXSgpe3JldHVybiBudWxsfVtsXShlLHQpe3RoaXNbU10uY2hpbGRyZW4ucHVzaChlKX1bRl0oKXt9W3VdKHtmaWx0ZXI6ZT1udWxsLGluY2x1ZGU6dD0hMH0pe2lmKHRoaXNbU10uZ2VuZXJhdG9yKXtjb25zdCBlPXRoaXNbRl0oKSx0PXRoaXNbU10uZmFpbGluZ05vZGVbQWVdKGUpO2lmKCF0LnN1Y2Nlc3MpcmV0dXJuIHQ7dC5odG1sJiZ0aGlzW2xdKHQuaHRtbCx0LmJib3gpO2RlbGV0ZSB0aGlzW1NdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tTXS5nZW5lcmF0b3I9dGhpc1tCZV0oZSx0KTtmb3IoOzspe2NvbnN0IGU9dGhpc1tTXS5nZW5lcmF0b3IubmV4dCgpO2lmKGUuZG9uZSlicmVhaztjb25zdCB0PWUudmFsdWU7aWYoIXQuc3VjY2VzcylyZXR1cm4gdDt0Lmh0bWwmJnRoaXNbbF0odC5odG1sLHQuYmJveCl9dGhpc1tTXS5nZW5lcmF0b3I9bnVsbDtyZXR1cm4gci5IVE1MUmVzdWx0LkVNUFRZfVtiZV0oZSl7dGhpc1tVZV09bmV3IFNldChPYmplY3Qua2V5cyhlKSl9W05lXShlKXtjb25zdCB0PXRoaXNbSWVdLGE9dGhpc1tVZV07cmV0dXJuWy4uLmVdLmZpbHRlcigoZT0+dC5oYXMoZSkmJiFhLmhhcyhlKSkpfVtnZV0oZSx0PW5ldyBTZXQpe2Zvcihjb25zdCBhIG9mIHRoaXNbVGVdKWFbamVdKGUsdCl9W2plXShlLHQpe2NvbnN0IGE9dGhpc1tEZV0oZSx0KTthP3RoaXNbRmVdKGEsZSx0KTp0aGlzW2dlXShlLHQpfVtEZV0oZSx0KXtjb25zdHt1c2U6YSx1c2VocmVmOnJ9PXRoaXM7aWYoIWEmJiFyKXJldHVybiBudWxsO2xldCBuPW51bGwscz1udWxsLGM9bnVsbCxsPWE7aWYocil7bD1yO3Iuc3RhcnRzV2l0aCgiI3NvbSgiKSYmci5lbmRzV2l0aCgiKSIpP3M9ci5zbGljZSg1LC0xKTpyLnN0YXJ0c1dpdGgoIi4jc29tKCIpJiZyLmVuZHNXaXRoKCIpIik/cz1yLnNsaWNlKDYsLTEpOnIuc3RhcnRzV2l0aCgiIyIpP2M9ci5zbGljZSgxKTpyLnN0YXJ0c1dpdGgoIi4jIikmJihjPXIuc2xpY2UoMikpfWVsc2UgYS5zdGFydHNXaXRoKCIjIik/Yz1hLnNsaWNlKDEpOnM9YTt0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiI7aWYoYyluPWUuZ2V0KGMpO2Vsc2V7bj0oMCxvLnNlYXJjaE5vZGUpKGUuZ2V0KGZlKSx0aGlzLHMsITAsITEpO24mJihuPW5bMF0pfWlmKCFuKXsoMCxpLndhcm4pKGBYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICR7bH0uYCk7cmV0dXJuIG51bGx9aWYobltpZV0hPT10aGlzW2llXSl7KDAsaS53YXJuKShgWEZBIC0gSW5jb21wYXRpYmxlIHByb3RvdHlwZTogJHtuW2llXX0gIT09ICR7dGhpc1tpZV19LmApO3JldHVybiBudWxsfWlmKHQuaGFzKG4pKXsoMCxpLndhcm4pKCJYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS4iKTtyZXR1cm4gbnVsbH10LmFkZChuKTtjb25zdCBoPW5bRGVdKGUsdCk7aCYmbltGZV0oaCxlLHQpO25bZ2VdKGUsdCk7dC5kZWxldGUobik7cmV0dXJuIG59W0ZlXShlLHQsYSl7aWYoYS5oYXMoZSkpeygwLGkud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO3JldHVybn0hdGhpc1tiXSYmZVtiXSYmKHRoaXNbYl09ZVtiXSk7bmV3IFNldChhKS5hZGQoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpc1tOZV0oZVtVZV0pKXt0aGlzW3RdPWVbdF07dGhpc1tVZV0mJnRoaXNbVWVdLmFkZCh0KX1mb3IoY29uc3QgciBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYodGhpc1tJZV0uaGFzKHIpKWNvbnRpbnVlO2NvbnN0IGk9dGhpc1tyXSxuPWVbcl07aWYoaSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KXtmb3IoY29uc3QgZSBvZiBpW1RlXSllW2plXSh0LGEpO2ZvcihsZXQgcj1pW1RlXS5sZW5ndGgscz1uW1RlXS5sZW5ndGg7cjxzO3IrKyl7Y29uc3Qgbj1lW1RlXVtyXVtwXSgpO2lmKCFpLnB1c2gobikpYnJlYWs7blskZV09dGhpczt0aGlzW1RlXS5wdXNoKG4pO25bamVdKHQsYSl9fWVsc2UgaWYobnVsbD09PWkpe2lmKG51bGwhPT1uKXtjb25zdCBlPW5bcF0oKTtlWyRlXT10aGlzO3RoaXNbcl09ZTt0aGlzW1RlXS5wdXNoKGUpO2VbamVdKHQsYSl9fWVsc2V7aVtnZV0odCxhKTtuJiZpW0ZlXShuLHQsYSl9fX1zdGF0aWNbTWVdKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubWFwKChlPT5YRkFPYmplY3RbTWVdKGUpKSk6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZT9PYmplY3QuYXNzaWduKHt9LGUpOmV9W3BdKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSl0cnl7ZVt0XT10aGlzW3RdfWNhdGNoKGEpeygwLGkuc2hhZG93KShlLHQsdGhpc1t0XSl9ZVt2ZV09YCR7ZVtpZV19JHtIZSsrfWA7ZVtUZV09W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbSWVdLmhhcyh0KSl7ZVt0XT1YRkFPYmplY3RbTWVdKHRoaXNbdF0pO2NvbnRpbnVlfWNvbnN0IGE9dGhpc1t0XTtlW3RdPWEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9uZXcgWEZBT2JqZWN0QXJyYXkoYVtMZV0pOm51bGx9Zm9yKGNvbnN0IHQgb2YgdGhpc1tUZV0pe2NvbnN0IGE9dFtpZV0scj10W3BdKCk7ZVtUZV0ucHVzaChyKTtyWyRlXT1lO251bGw9PT1lW2FdP2VbYV09cjplW2FdW1RlXS5wdXNoKHIpfXJldHVybiBlfVtSXShlPW51bGwpe3JldHVybiBlP3RoaXNbVGVdLmZpbHRlcigodD0+dFtpZV09PT1lKSk6dGhpc1tUZV19W09dKGUpe3JldHVybiB0aGlzW2VdfVtUXShlLHQsYT0hMCl7cmV0dXJuIEFycmF5LmZyb20odGhpc1tNXShlLHQsYSkpfSpbTV0oZSx0LGE9ITApe2lmKCJwYXJlbnQiIT09ZSl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tUZV0pe2FbaWVdPT09ZSYmKHlpZWxkIGEpO2EubmFtZT09PWUmJih5aWVsZCBhKTsodHx8YVtlZV0oKSkmJih5aWVsZCphW01dKGUsdCwhMSkpfWEmJnRoaXNbSWVdLmhhcyhlKSYmKHlpZWxkIG5ldyBYRkFBdHRyaWJ1dGUodGhpcyxlLHRoaXNbZV0pKX1lbHNlIHlpZWxkIHRoaXNbJGVdfX10LlhGQU9iamVjdD1YRkFPYmplY3Q7Y2xhc3MgWEZBT2JqZWN0QXJyYXl7Y29uc3RydWN0b3IoZT0xLzApe3RoaXNbTGVdPWU7dGhpc1tUZV09W119cHVzaChlKXtpZih0aGlzW1RlXS5sZW5ndGg8PXRoaXNbTGVdKXt0aGlzW1RlXS5wdXNoKGUpO3JldHVybiEwfSgwLGkud2FybikoYFhGQSAtIG5vZGUgIiR7ZVtpZV19IiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAke3RoaXNbTGVdfSBjaGlsZHJlbmApO3JldHVybiExfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXNbVGVdLmxlbmd0aH1kdW1wKCl7cmV0dXJuIDE9PT10aGlzW1RlXS5sZW5ndGg/dGhpc1tUZV1bMF1bd10oKTp0aGlzW1RlXS5tYXAoKGU9PmVbd10oKSkpfVtwXSgpe2NvbnN0IGU9bmV3IFhGQU9iamVjdEFycmF5KHRoaXNbTGVdKTtlW1RlXT10aGlzW1RlXS5tYXAoKGU9PmVbcF0oKSkpO3JldHVybiBlfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzW1RlXX1jbGVhcigpe3RoaXNbVGVdLmxlbmd0aD0wfX10LlhGQU9iamVjdEFycmF5PVhGQU9iamVjdEFycmF5O2NsYXNzIFhGQUF0dHJpYnV0ZXtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpc1skZV09ZTt0aGlzW2llXT10O3RoaXNbYl09YTt0aGlzW21dPSExO3RoaXNbdmVdPSJhdHRyaWJ1dGUiK0hlKyt9W2pdKCl7cmV0dXJuIHRoaXNbJGVdfVtLXSgpe3JldHVybiEwfVtFXSgpe3JldHVybiB0aGlzW2JdLnRyaW0oKX1beWVdKGUpe2U9ZS52YWx1ZXx8IiI7dGhpc1tiXT1lLnRvU3RyaW5nKCl9W1NlXSgpe3JldHVybiB0aGlzW2JdfVtKXShlKXtyZXR1cm4gdGhpc1skZV09PT1lfHx0aGlzWyRlXVtKXShlKX19dC5YRkFBdHRyaWJ1dGU9WEZBQXR0cmlidXRlO2NsYXNzIFhtbE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQsYT17fSl7c3VwZXIoZSx0KTt0aGlzW2JdPSIiO3RoaXNbUGVdPW51bGw7aWYoIiN0ZXh0IiE9PXQpe2NvbnN0IGU9bmV3IE1hcDt0aGlzW09lXT1lO2Zvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJpZXMoYSkpZS5zZXQodCxuZXcgWEZBQXR0cmlidXRlKHRoaXMsdCxyKSk7aWYoYS5oYXNPd25Qcm9wZXJ0eShuZSkpe2NvbnN0IGU9YVtuZV0ueGZhLmRhdGFOb2RlO3ZvaWQgMCE9PWUmJigiZGF0YUdyb3VwIj09PWU/dGhpc1tQZV09ITE6ImRhdGFWYWx1ZSI9PT1lJiYodGhpc1tQZV09ITApKX19dGhpc1ttXT0hMX1bQ2VdKGUpe2NvbnN0IHQ9dGhpc1tpZV07aWYoIiN0ZXh0Ij09PXQpe2UucHVzaCgoMCxuLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2JdKSk7cmV0dXJufWNvbnN0IGE9KDAsaS51dGY4U3RyaW5nVG9TdHJpbmcpKHQpLHI9dGhpc1tyZV09PT1xZT8ieGZhOiI6IiI7ZS5wdXNoKGA8JHtyfSR7YX1gKTtmb3IoY29uc3RbdCxhXW9mIHRoaXNbT2VdLmVudHJpZXMoKSl7Y29uc3Qgcj0oMCxpLnV0ZjhTdHJpbmdUb1N0cmluZykodCk7ZS5wdXNoKGAgJHtyfT0iJHsoMCxuLmVuY29kZVRvWG1sU3RyaW5nKShhW2JdKX0iYCl9bnVsbCE9PXRoaXNbUGVdJiYodGhpc1tQZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpO2lmKHRoaXNbYl18fDAhPT10aGlzW1RlXS5sZW5ndGgpe2UucHVzaCgiPiIpO2lmKHRoaXNbYl0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2JdP2UucHVzaCgoMCxuLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2JdKSk6dGhpc1tiXVtDZV0oZSk7ZWxzZSBmb3IoY29uc3QgdCBvZiB0aGlzW1RlXSl0W0NlXShlKTtlLnB1c2goYDwvJHtyfSR7YX0+YCl9ZWxzZSBlLnB1c2goIi8+Iil9W3NlXShlKXtpZih0aGlzW2JdKXtjb25zdCBlPW5ldyBYbWxPYmplY3QodGhpc1tyZV0sIiN0ZXh0Iik7dGhpc1toXShlKTtlW2JdPXRoaXNbYl07dGhpc1tiXT0iIn10aGlzW2hdKGUpO3JldHVybiEwfVtjZV0oZSl7dGhpc1tiXSs9ZX1beF0oKXtpZih0aGlzW2JdJiZ0aGlzW1RlXS5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgWG1sT2JqZWN0KHRoaXNbcmVdLCIjdGV4dCIpO3RoaXNbaF0oZSk7ZVtiXT10aGlzW2JdO2RlbGV0ZSB0aGlzW2JdfX1bQWVdKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbaWVdP3IuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tiXX0pOnIuSFRNTFJlc3VsdC5FTVBUWX1bUl0oZT1udWxsKXtyZXR1cm4gZT90aGlzW1RlXS5maWx0ZXIoKHQ9PnRbaWVdPT09ZSkpOnRoaXNbVGVdfVt2XSgpe3JldHVybiB0aGlzW09lXX1bT10oZSl7Y29uc3QgdD10aGlzW09lXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1JdKGUpfSpbTV0oZSx0KXtjb25zdCBhPXRoaXNbT2VdLmdldChlKTthJiYoeWllbGQgYSk7Zm9yKGNvbnN0IGEgb2YgdGhpc1tUZV0pe2FbaWVdPT09ZSYmKHlpZWxkIGEpO3QmJih5aWVsZCphW01dKGUsdCkpfX0qW2tdKGUsdCl7Y29uc3QgYT10aGlzW09lXS5nZXQoZSk7IWF8fHQmJmFbbV18fCh5aWVsZCBhKTtmb3IoY29uc3QgYSBvZiB0aGlzW1RlXSl5aWVsZCphW2tdKGUsdCl9KltOXShlLHQsYSl7Zm9yKGNvbnN0IHIgb2YgdGhpc1tUZV0pe3JbaWVdIT09ZXx8YSYmclttXXx8KHlpZWxkIHIpO3QmJih5aWVsZCpyW05dKGUsdCxhKSl9fVtLXSgpe3JldHVybiBudWxsPT09dGhpc1tQZV0/MD09PXRoaXNbVGVdLmxlbmd0aHx8dGhpc1tUZV1bMF1bcmVdPT09cy5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tQZV19W0VdKCl7cmV0dXJuIG51bGw9PT10aGlzW1BlXT8wPT09dGhpc1tUZV0ubGVuZ3RoP3RoaXNbYl0udHJpbSgpOnRoaXNbVGVdWzBdW3JlXT09PXMuTmFtZXNwYWNlSWRzLnhodG1sLmlkP3RoaXNbVGVdWzBdW1NlXSgpLnRyaW0oKTpudWxsOnRoaXNbYl0udHJpbSgpfVt5ZV0oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW2JdPWUudG9TdHJpbmcoKX1bd10oZT0hMSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3JlXSk7dGhpc1tiXSYmKHQuJGNvbnRlbnQ9dGhpc1tiXSk7dC4kbmFtZT10aGlzW2llXTt0LmNoaWxkcmVuPVtdO2Zvcihjb25zdCBhIG9mIHRoaXNbVGVdKXQuY2hpbGRyZW4ucHVzaChhW3ddKGUpKTt0LmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbZSxhXW9mIHRoaXNbT2VdKXQuYXR0cmlidXRlc1tlXT1hW2JdO3JldHVybiB0fX10LlhtbE9iamVjdD1YbWxPYmplY3Q7Y2xhc3MgQ29udGVudE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCk7dGhpc1tiXT0iIn1bY2VdKGUpe3RoaXNbYl0rPWV9W3hdKCl7fX10LkNvbnRlbnRPYmplY3Q9Q29udGVudE9iamVjdDt0Lk9wdGlvbk9iamVjdD1jbGFzcyBPcHRpb25PYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlLHQpO3RoaXNbX2VdPWF9W3hdKCl7dGhpc1tiXT0oMCxyLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbYl0sZGVmYXVsdFZhbHVlOnRoaXNbX2VdWzBdLHZhbGlkYXRlOmU9PnRoaXNbX2VdLmluY2x1ZGVzKGUpfSl9W2RdKGUpe3N1cGVyW2RdKGUpO2RlbGV0ZSB0aGlzW19lXX19O3QuU3RyaW5nT2JqZWN0PWNsYXNzIFN0cmluZ09iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7W3hdKCl7dGhpc1tiXT10aGlzW2JdLnRyaW0oKX19O2NsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGUsdCk7dGhpc1tFZV09YTt0aGlzW1hlXT1yfVt4XSgpe3RoaXNbYl09KDAsci5nZXRJbnRlZ2VyKSh7ZGF0YTp0aGlzW2JdLGRlZmF1bHRWYWx1ZTp0aGlzW0VlXSx2YWxpZGF0ZTp0aGlzW1hlXX0pfVtkXShlKXtzdXBlcltkXShlKTtkZWxldGUgdGhpc1tFZV07ZGVsZXRlIHRoaXNbWGVdfX10LkludGVnZXJPYmplY3Q9SW50ZWdlck9iamVjdDt0Lk9wdGlvbjAxPWNsYXNzIE9wdGlvbjAxIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwwLChlPT4xPT09ZSkpfX07dC5PcHRpb24xMD1jbGFzcyBPcHRpb24xMCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsMSwoZT0+MD09PWUpKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSFRNTFJlc3VsdD12b2lkIDA7dC5nZXRCQm94PWZ1bmN0aW9uIGdldEJCb3goZSl7Y29uc3QgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTtjb25zdCBhPWUudHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChlPT5nZXRNZWFzdXJlbWVudChlLCItMSIpKSk7aWYoYS5sZW5ndGg8NHx8YVsyXTwwfHxhWzNdPDApcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3RbcixpLG4sc109YTtyZXR1cm57eDpyLHk6aSx3aWR0aDpuLGhlaWdodDpzfX07dC5nZXRDb2xvcj1mdW5jdGlvbiBnZXRDb2xvcihlLHQ9WzAsMCwwXSl7bGV0W2EscixpXT10O2lmKCFlKXJldHVybntyOmEsZzpyLGI6aX07Y29uc3Qgbj1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZT0+TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUludChlLnRyaW0oKSwxMCkpLDI1NSkpKS5tYXAoKGU9PmlzTmFOKGUpPzA6ZSkpO2lmKG4ubGVuZ3RoPDMpcmV0dXJue3I6YSxnOnIsYjppfTtbYSxyLGldPW47cmV0dXJue3I6YSxnOnIsYjppfX07dC5nZXRGbG9hdD1mdW5jdGlvbiBnZXRGbG9hdCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOmF9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IHI9cGFyc2VGbG9hdChlKTtpZighaXNOYU4ocikmJmEocikpcmV0dXJuIHI7cmV0dXJuIHR9O3QuZ2V0SW50ZWdlcj1mdW5jdGlvbiBnZXRJbnRlZ2VyKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnQsdmFsaWRhdGU6YX0pe2lmKCFlKXJldHVybiB0O2U9ZS50cmltKCk7Y29uc3Qgcj1wYXJzZUludChlLDEwKTtpZighaXNOYU4ocikmJmEocikpcmV0dXJuIHI7cmV0dXJuIHR9O3QuZ2V0S2V5d29yZD1nZXRLZXl3b3JkO3QuZ2V0TWVhc3VyZW1lbnQ9Z2V0TWVhc3VyZW1lbnQ7dC5nZXRSYXRpbz1mdW5jdGlvbiBnZXRSYXRpbyhlKXtpZighZSlyZXR1cm57bnVtOjEsZGVuOjF9O2NvbnN0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGU9PnBhcnNlRmxvYXQoZSkpKS5maWx0ZXIoKGU9PiFpc05hTihlKSkpOzE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O2NvbnN0W2Escl09dDtyZXR1cm57bnVtOmEsZGVuOnJ9fTt0LmdldFJlbGV2YW50PWZ1bmN0aW9uIGdldFJlbGV2YW50KGUpe2lmKCFlKXJldHVybltdO3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4oe2V4Y2x1ZGVkOiItIj09PWVbMF0sdmlld25hbWU6ZS5zdWJzdHJpbmcoMSl9KSkpfTt0LmdldFN0cmluZ09wdGlvbj1mdW5jdGlvbiBnZXRTdHJpbmdPcHRpb24oZSx0KXtyZXR1cm4gZ2V0S2V5d29yZCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmU9PnQuaW5jbHVkZXMoZSl9KX07dC5zdHJpcFF1b3Rlcz1mdW5jdGlvbiBzdHJpcFF1b3RlcyhlKXtpZihlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJykpcmV0dXJuIGUuc2xpY2UoMSwtMSk7cmV0dXJuIGV9O3ZhciByPWEoMik7Y29uc3QgaT17cHQ6ZT0+ZSxjbTplPT5lLzIuNTQqNzIsbW06ZT0+ZS8yNS40KjcyLGluOmU9PjcyKmUscHg6ZT0+ZX0sbj0vKFsrLV0/XGQrXC4/XGQqKSguKikvO2Z1bmN0aW9uIGdldEtleXdvcmQoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dCx2YWxpZGF0ZTphfSl7cmV0dXJuIGUmJmEoZT1lLnRyaW0oKSk/ZTp0fWZ1bmN0aW9uIGdldE1lYXN1cmVtZW50KGUsdD0iMCIpe3R8fD0iMCI7aWYoIWUpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0IGE9ZS50cmltKCkubWF0Y2gobik7aWYoIWEpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0WyxyLHNdPWEsbz1wYXJzZUZsb2F0KHIpO2lmKGlzTmFOKG8pKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtpZigwPT09bylyZXR1cm4gMDtjb25zdCBjPWlbc107cmV0dXJuIGM/YyhvKTpvfWNsYXNzIEhUTUxSZXN1bHR7c3RhdGljIGdldCBGQUlMVVJFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkZBSUxVUkUiLG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxudWxsKSl9c3RhdGljIGdldCBFTVBUWSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJFTVBUWSIsbmV3IEhUTUxSZXN1bHQoITAsbnVsbCxudWxsLG51bGwpKX1jb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLnN1Y2Nlc3M9ZTt0aGlzLmh0bWw9dDt0aGlzLmJib3g9YTt0aGlzLmJyZWFrTm9kZT1yfWlzQnJlYWsoKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfXN0YXRpYyBicmVha05vZGUoZSl7cmV0dXJuIG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxlKX1zdGF0aWMgc3VjY2VzcyhlLHQ9bnVsbCl7cmV0dXJuIG5ldyBIVE1MUmVzdWx0KCEwLGUsdCxudWxsKX19dC5IVE1MUmVzdWx0PUhUTUxSZXN1bHR9LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTmFtZXNwYWNlSWRzPXQuJGJ1aWxkWEZBT2JqZWN0PXZvaWQgMDtjb25zdCBhPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PWE7dC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpLyIpfSxjb25uZWN0aW9uU2V0OntpZDoxLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9LGRhdGFzZXRzOntpZDoyLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8iKX0sZm9ybTp7aWQ6MyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vIil9LGxvY2FsZVNldDp7aWQ6NCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9LHBkZjp7aWQ6NSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvcGRmLyI9PT1lfSxzaWduYXR1cmU6e2lkOjYsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPT09ZX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC8iKX0sc3R5bGVzaGVldDp7aWQ6OCxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj09PWV9LHRlbXBsYXRlOntpZDo5LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvIil9LHhkYzp7aWQ6MTAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX0seGRwOntpZDoxMSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvIj09PWV9LHhmZGY6e2lkOjEyLGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3hmZGYvIj09PWV9LHhodG1sOntpZDoxMyxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfSx4bXBtZXRhOntpZDoxNCxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94bXBtZXRhLyI9PT1lfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jcmVhdGVEYXRhTm9kZT1mdW5jdGlvbiBjcmVhdGVEYXRhTm9kZShlLHQsYSl7Y29uc3QgaT1wYXJzZUV4cHJlc3Npb24oYSk7aWYoIWkpcmV0dXJuIG51bGw7aWYoaS5zb21lKChlPT5lLm9wZXJhdG9yPT09Yy5kb3REb3QpKSlyZXR1cm4gbnVsbDtjb25zdCBzPWwuZ2V0KGlbMF0ubmFtZSk7bGV0IG89MDtpZihzKXtlPXMoZSx0KTtvPTF9ZWxzZSBlPXR8fGU7Zm9yKGxldCB0PWkubGVuZ3RoO288dDtvKyspe2NvbnN0e25hbWU6dCxvcGVyYXRvcjphLGluZGV4OnN9PWlbb107aWYoIWlzRmluaXRlKHMpKXtpW29dLmluZGV4PTA7cmV0dXJuIGNyZWF0ZU5vZGVzKGUsaS5zbGljZShvKSl9bGV0IGw7c3dpdGNoKGEpe2Nhc2UgYy5kb3Q6bD1lW3IuJGdldENoaWxkcmVuQnlOYW1lXSh0LCExKTticmVhaztjYXNlIGMuZG90RG90Omw9ZVtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0odCwhMCk7YnJlYWs7Y2FzZSBjLmRvdEhhc2g6bD1lW3IuJGdldENoaWxkcmVuQnlDbGFzc10odCk7bD1sIGluc3RhbmNlb2Ygci5YRkFPYmplY3RBcnJheT9sLmNoaWxkcmVuOltsXX1pZigwPT09bC5sZW5ndGgpcmV0dXJuIGNyZWF0ZU5vZGVzKGUsaS5zbGljZShvKSk7aWYoIShzPGwubGVuZ3RoKSl7aVtvXS5pbmRleD1zLWwubGVuZ3RoO3JldHVybiBjcmVhdGVOb2RlcyhlLGkuc2xpY2UobykpfXtjb25zdCB0PWxbc107aWYoISh0IGluc3RhbmNlb2Ygci5YRkFPYmplY3QpKXsoMCxuLndhcm4pKCJYRkEgLSBDYW5ub3QgY3JlYXRlIGEgbm9kZS4iKTtyZXR1cm4gbnVsbH1lPXR9fXJldHVybiBudWxsfTt0LnNlYXJjaE5vZGU9ZnVuY3Rpb24gc2VhcmNoTm9kZShlLHQsYSxpPSEwLG49ITApe2NvbnN0IHM9cGFyc2VFeHByZXNzaW9uKGEsaSk7aWYoIXMpcmV0dXJuIG51bGw7Y29uc3Qgbz1sLmdldChzWzBdLm5hbWUpO2xldCB1LGQ9MDtpZihvKXt1PSEwO2U9W28oZSx0KV07ZD0xfWVsc2V7dT1udWxsPT09dDtlPVt0fHxlXX1mb3IobGV0IGE9cy5sZW5ndGg7ZDxhO2QrKyl7Y29uc3R7bmFtZTphLGNhY2hlTmFtZTppLG9wZXJhdG9yOm8saW5kZXg6bH09c1tkXSxmPVtdO2Zvcihjb25zdCB0IG9mIGUpe2lmKCEodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KSljb250aW51ZTtsZXQgZSxzO2lmKG4pe3M9aC5nZXQodCk7aWYoIXMpe3M9bmV3IE1hcDtoLnNldCh0LHMpfWU9cy5nZXQoaSl9aWYoIWUpe3N3aXRjaChvKXtjYXNlIGMuZG90OmU9dFtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0oYSwhMSk7YnJlYWs7Y2FzZSBjLmRvdERvdDplPXRbci4kZ2V0Q2hpbGRyZW5CeU5hbWVdKGEsITApO2JyZWFrO2Nhc2UgYy5kb3RIYXNoOmU9dFtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKGEpO2U9ZSBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0QXJyYXk/ZS5jaGlsZHJlbjpbZV19biYmcy5zZXQoaSxlKX1lLmxlbmd0aD4wJiZmLnB1c2goZSl9aWYoMCE9PWYubGVuZ3RofHx1fHwwIT09ZCllPWlzRmluaXRlKGwpP2YuZmlsdGVyKChlPT5sPGUubGVuZ3RoKSkubWFwKChlPT5lW2xdKSk6Zi5mbGF0KCk7ZWxzZXtjb25zdCBhPXRbci4kZ2V0UGFyZW50XSgpO2lmKCEodD1hKSlyZXR1cm4gbnVsbDtkPS0xO2U9W3RdfX1pZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIGV9O3ZhciByPWEoNzgpLGk9YSg4MCksbj1hKDIpO2NvbnN0IHM9L15bXi5bXSsvLG89L15bXlxdXSsvLGM9e2RvdDowLGRvdERvdDoxLGRvdEhhc2g6Mixkb3RCcmFja2V0OjMsZG90UGFyZW46NH0sbD1uZXcgTWFwKFtbIiRkYXRhIiwoZSx0KT0+ZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZV0sWyIkcmVjb3JkIiwoZSx0KT0+KGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW3IuJGdldENoaWxkcmVuXSgpWzBdXSxbIiR0ZW1wbGF0ZSIsKGUsdCk9PmUudGVtcGxhdGVdLFsiJGNvbm5lY3Rpb25TZXQiLChlLHQpPT5lLmNvbm5lY3Rpb25TZXRdLFsiJGZvcm0iLChlLHQpPT5lLmZvcm1dLFsiJGxheW91dCIsKGUsdCk9PmUubGF5b3V0XSxbIiRob3N0IiwoZSx0KT0+ZS5ob3N0XSxbIiRkYXRhV2luZG93IiwoZSx0KT0+ZS5kYXRhV2luZG93XSxbIiRldmVudCIsKGUsdCk9PmUuZXZlbnRdLFsiISIsKGUsdCk9PmUuZGF0YXNldHNdLFsiJHhmYSIsKGUsdCk9PmVdLFsieGZhIiwoZSx0KT0+ZV0sWyIkIiwoZSx0KT0+dF1dKSxoPW5ldyBXZWFrTWFwLHU9aS5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGUsdCxhPSEwKXtsZXQgcj1lLm1hdGNoKHMpO2lmKCFyKXJldHVybiBudWxsO2xldFtpXT1yO2NvbnN0IGw9W3tuYW1lOmksY2FjaGVOYW1lOiIuIitpLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsLG9wZXJhdG9yOmMuZG90fV07bGV0IGg9aS5sZW5ndGg7Zm9yKDtoPGUubGVuZ3RoOyl7Y29uc3QgZD1oO2lmKCJbIj09PWUuY2hhckF0KGgrKykpe3I9ZS5zbGljZShoKS5tYXRjaChvKTtpZighcil7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpO3JldHVybiBudWxsfWwuYXQoLTEpLmluZGV4PSIqIj09PSh1PSh1PXJbMF0pLnRyaW0oKSk/MS8wOnBhcnNlSW50KHUsMTApfHwwO2grPXJbMF0ubGVuZ3RoKzE7Y29udGludWV9bGV0IGY7c3dpdGNoKGUuY2hhckF0KGgpKXtjYXNlIi4iOmlmKCF0KXJldHVybiBudWxsO2grKztmPWMuZG90RG90O2JyZWFrO2Nhc2UiIyI6aCsrO2Y9Yy5kb3RIYXNoO2JyZWFrO2Nhc2UiWyI6aWYoYSl7KDAsbi53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBGb3JtQ2FsYyBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1mPWMuZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKGEpeygwLG4ud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgSmF2YVNjcmlwdCBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1mPWMuZG90UGFyZW47YnJlYWs7ZGVmYXVsdDpmPWMuZG90fXI9ZS5zbGljZShoKS5tYXRjaChzKTtpZighcilicmVhaztbaV09cjtoKz1pLmxlbmd0aDtsLnB1c2goe25hbWU6aSxjYWNoZU5hbWU6ZS5zbGljZShkLGgpLG9wZXJhdG9yOmYsaW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGx9KX12YXIgdTtyZXR1cm4gbH1mdW5jdGlvbiBjcmVhdGVOb2RlcyhlLHQpe2xldCBhPW51bGw7Zm9yKGNvbnN0e25hbWU6aSxpbmRleDpufW9mIHQpe2ZvcihsZXQgdD0wLHM9aXNGaW5pdGUobik/bjowO3Q8PXM7dCsrKXtjb25zdCB0PWVbci4kbmFtZXNwYWNlSWRdPT09dT8tMTplW3IuJG5hbWVzcGFjZUlkXTthPW5ldyByLlhtbE9iamVjdCh0LGkpO2Vbci4kYXBwZW5kQ2hpbGRdKGEpfWU9YX1yZXR1cm4gYX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CaW5kZXI9dm9pZCAwO3ZhciByPWEoNzgpLGk9YSg4Myksbj1hKDgxKSxzPWEoODApLG89YSgyKTtjb25zdCBjPXMuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIGNyZWF0ZVRleHQoZSl7Y29uc3QgdD1uZXcgaS5UZXh0KHt9KTt0W3IuJGNvbnRlbnRdPWU7cmV0dXJuIHR9dC5CaW5kZXI9Y2xhc3MgQmluZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lO3RoaXMuZGF0YXNldHM9ZS5kYXRhc2V0cztlLmRhdGFzZXRzPy5kYXRhP3RoaXMuZGF0YT1lLmRhdGFzZXRzLmRhdGE6dGhpcy5kYXRhPW5ldyByLlhtbE9iamVjdChzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCwiZGF0YSIpO3RoaXMuZW1wdHlNZXJnZT0wPT09dGhpcy5kYXRhW3IuJGdldENoaWxkcmVuXSgpLmxlbmd0aDt0aGlzLnJvb3QuZm9ybT10aGlzLmZvcm09ZS50ZW1wbGF0ZVtyLiRjbG9uZV0oKX1faXNDb25zdW1lRGF0YSgpe3JldHVybiF0aGlzLmVtcHR5TWVyZ2UmJnRoaXMuX21lcmdlTW9kZX1faXNNYXRjaFRlbXBsYXRlKCl7cmV0dXJuIXRoaXMuX2lzQ29uc3VtZURhdGEoKX1iaW5kKCl7dGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZm9ybX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1fYmluZFZhbHVlKGUsdCxhKXtlW3IuJGRhdGFdPXQ7aWYoZVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpKWlmKHRbci4kaXNEYXRhVmFsdWVdKCkpe2NvbnN0IGE9dFtyLiRnZXREYXRhVmFsdWVdKCk7ZVtyLiRzZXRWYWx1ZV0oY3JlYXRlVGV4dChhKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgaS5GaWVsZCYmIm11bHRpU2VsZWN0Ij09PWUudWk/LmNob2ljZUxpc3Q/Lm9wZW4pe2NvbnN0IGE9dFtyLiRnZXRDaGlsZHJlbl0oKS5tYXAoKGU9PmVbci4kY29udGVudF0udHJpbSgpKSkuam9pbigiXG4iKTtlW3IuJHNldFZhbHVlXShjcmVhdGVUZXh0KGEpKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKDAsby53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtyLiRpc0RhdGFWYWx1ZV0oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTooMCxvLndhcm4pKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9X2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKGUsdCxhLGkpe2lmKCFlKXJldHVybiBudWxsO2xldCBuLG87Zm9yKGxldCBpPTA7aTwzO2krKyl7bj1hW3IuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCExLCEwKTtmb3IoOzspe289bi5uZXh0KCkudmFsdWU7aWYoIW8pYnJlYWs7aWYodD09PW9bci4kaXNEYXRhVmFsdWVdKCkpcmV0dXJuIG99aWYoYVtyLiRuYW1lc3BhY2VJZF09PT1zLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCYmImRhdGEiPT09YVtyLiRub2RlTmFtZV0pYnJlYWs7YT1hW3IuJGdldFBhcmVudF0oKX1pZighaSlyZXR1cm4gbnVsbDtuPXRoaXMuZGF0YVtyLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oZSwhMCwhMSk7bz1uLm5leHQoKS52YWx1ZTtpZihvKXJldHVybiBvO249dGhpcy5kYXRhW3IuJGdldEF0dHJpYnV0ZUl0XShlLCEwKTtvPW4ubmV4dCgpLnZhbHVlO3JldHVybiBvPy5bci4kaXNEYXRhVmFsdWVdKCk/bzpudWxsfV9zZXRQcm9wZXJ0aWVzKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSlmb3IoY29uc3R7cmVmOmEsdGFyZ2V0OnMsY29ubmVjdGlvbjpjfW9mIGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pe2lmKGMpY29udGludWU7aWYoIWEpY29udGludWU7Y29uc3QgbD0oMCxuLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGEsITEsITEpO2lmKCFsKXsoMCxvLndhcm4pKGBYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogJHthfS5gKTtjb250aW51ZX1jb25zdFtoXT1sO2lmKCFoW3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhKSl7KDAsby53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpO2NvbnRpbnVlfWNvbnN0IHU9KDAsbi5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsZSxzLCExLCExKTtpZighdSl7KDAsby53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6ICR7c30uYCk7Y29udGludWV9Y29uc3RbZF09dTtpZighZFtyLiRpc0Rlc2NlbmRlbnRdKGUpKXsoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpO2NvbnRpbnVlfWNvbnN0IGY9ZFtyLiRnZXRQYXJlbnRdKCk7aWYoZCBpbnN0YW5jZW9mIGkuU2V0UHJvcGVydHl8fGYgaW5zdGFuY2VvZiBpLlNldFByb3BlcnR5KXsoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgc2V0UHJvcGVydHkgb3Igb25lIG9mIGl0cyBwcm9wZXJ0aWVzLiIpO2NvbnRpbnVlfWlmKGQgaW5zdGFuY2VvZiBpLkJpbmRJdGVtc3x8ZiBpbnN0YW5jZW9mIGkuQmluZEl0ZW1zKXsoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1jb25zdCBnPWhbci4kdGV4dF0oKSxwPWRbci4kbm9kZU5hbWVdO2lmKGQgaW5zdGFuY2VvZiByLlhGQUF0dHJpYnV0ZSl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2VbcF09Zztjb25zdCB0PVJlZmxlY3QuY29uc3RydWN0KE9iamVjdC5nZXRQcm90b3R5cGVPZihmKS5jb25zdHJ1Y3RvcixbZV0pO2ZbcF09dFtwXX1lbHNlIGlmKGQuaGFzT3duUHJvcGVydHkoci4kY29udGVudCkpe2Rbci4kZGF0YV09aDtkW3IuJGNvbnRlbnRdPWc7ZFtyLiRmaW5hbGl6ZV0oKX1lbHNlKDAsby53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlIHRvIHVzZSBpbiBzZXRQcm9wZXJ0eSIpfX1fYmluZEl0ZW1zKGUsdCl7aWYoIWUuaGFzT3duUHJvcGVydHkoIml0ZW1zIil8fCFlLmhhc093blByb3BlcnR5KCJiaW5kSXRlbXMiKXx8ZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXJldHVybjtmb3IoY29uc3QgdCBvZiBlLml0ZW1zLmNoaWxkcmVuKWVbci4kcmVtb3ZlQ2hpbGRdKHQpO2UuaXRlbXMuY2xlYXIoKTtjb25zdCBhPW5ldyBpLkl0ZW1zKHt9KSxzPW5ldyBpLkl0ZW1zKHt9KTtlW3IuJGFwcGVuZENoaWxkXShhKTtlLml0ZW1zLnB1c2goYSk7ZVtyLiRhcHBlbmRDaGlsZF0ocyk7ZS5pdGVtcy5wdXNoKHMpO2Zvcihjb25zdHtyZWY6aSxsYWJlbFJlZjpjLHZhbHVlUmVmOmwsY29ubmVjdGlvbjpofW9mIGUuYmluZEl0ZW1zLmNoaWxkcmVuKXtpZihoKWNvbnRpbnVlO2lmKCFpKWNvbnRpbnVlO2NvbnN0IGU9KDAsbi5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxpLCExLCExKTtpZihlKWZvcihjb25zdCB0IG9mIGUpe2lmKCF0W3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLG8ud2FybikoYFhGQSAtIEludmFsaWQgcmVmICgke2l9KTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLmApO2NvbnRpbnVlfWNvbnN0IGU9KDAsbi5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxjLCEwLCExKTtpZighZSl7KDAsby53YXJuKShgWEZBIC0gSW52YWxpZCBsYWJlbDogJHtjfS5gKTtjb250aW51ZX1jb25zdFtoXT1lO2lmKCFoW3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgbGFiZWw6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKTtjb250aW51ZX1jb25zdCB1PSgwLG4uc2VhcmNoTm9kZSkodGhpcy5yb290LHQsbCwhMCwhMSk7aWYoIXUpeygwLG8ud2FybikoYFhGQSAtIEludmFsaWQgdmFsdWU6ICR7bH0uYCk7Y29udGludWV9Y29uc3RbZF09dTtpZighZFtyLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXsoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuIik7Y29udGludWV9Y29uc3QgZj1jcmVhdGVUZXh0KGhbci4kdGV4dF0oKSksZz1jcmVhdGVUZXh0KGRbci4kdGV4dF0oKSk7YVtyLiRhcHBlbmRDaGlsZF0oZik7YS50ZXh0LnB1c2goZik7c1tyLiRhcHBlbmRDaGlsZF0oZyk7cy50ZXh0LnB1c2goZyl9ZWxzZSgwLG8ud2FybikoYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke2l9LmApfX1fYmluZE9jY3VycmVuY2VzKGUsdCxhKXtsZXQgaTtpZih0Lmxlbmd0aD4xKXtpPWVbci4kY2xvbmVdKCk7aVtyLiRyZW1vdmVDaGlsZF0oaS5vY2N1cik7aS5vY2N1cj1udWxsfXRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sYSk7dGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pO3RoaXMuX2JpbmRJdGVtcyhlLHRbMF0pO2lmKDE9PT10Lmxlbmd0aClyZXR1cm47Y29uc3Qgbj1lW3IuJGdldFBhcmVudF0oKSxzPWVbci4kbm9kZU5hbWVdLG89bltyLiRpbmRleE9mXShlKTtmb3IobGV0IGU9MSxjPXQubGVuZ3RoO2U8YztlKyspe2NvbnN0IGM9dFtlXSxsPWlbci4kY2xvbmVdKCk7bltzXS5wdXNoKGwpO25bci4kaW5zZXJ0QXRdKG8rZSxsKTt0aGlzLl9iaW5kVmFsdWUobCxjLGEpO3RoaXMuX3NldFByb3BlcnRpZXMobCxjKTt0aGlzLl9iaW5kSXRlbXMobCxjKX19X2NyZWF0ZU9jY3VycmVuY2VzKGUpe2lmKCF0aGlzLmVtcHR5TWVyZ2UpcmV0dXJuO2NvbnN0e29jY3VyOnR9PWU7aWYoIXR8fHQuaW5pdGlhbDw9MSlyZXR1cm47Y29uc3QgYT1lW3IuJGdldFBhcmVudF0oKSxpPWVbci4kbm9kZU5hbWVdO2lmKCEoYVtpXWluc3RhbmNlb2Ygci5YRkFPYmplY3RBcnJheSkpcmV0dXJuO2xldCBuO249ZS5uYW1lP2FbaV0uY2hpbGRyZW4uZmlsdGVyKCh0PT50Lm5hbWU9PT1lLm5hbWUpKS5sZW5ndGg6YVtpXS5jaGlsZHJlbi5sZW5ndGg7Y29uc3Qgcz1hW3IuJGluZGV4T2ZdKGUpKzEsbz10LmluaXRpYWwtbjtpZihvKXtjb25zdCB0PWVbci4kY2xvbmVdKCk7dFtyLiRyZW1vdmVDaGlsZF0odC5vY2N1cik7dC5vY2N1cj1udWxsO2FbaV0ucHVzaCh0KTthW3IuJGluc2VydEF0XShzLHQpO2ZvcihsZXQgZT0xO2U8bztlKyspe2NvbnN0IG49dFtyLiRjbG9uZV0oKTthW2ldLnB1c2gobik7YVtyLiRpbnNlcnRBdF0ocytlLG4pfX19X2dldE9jY3VySW5mbyhlKXtjb25zdHtuYW1lOnQsb2NjdXI6YX09ZTtpZighYXx8IXQpcmV0dXJuWzEsMV07Y29uc3Qgcj0tMT09PWEubWF4PzEvMDphLm1heDtyZXR1cm5bYS5taW4scl19X3NldEFuZEJpbmQoZSx0KXt0aGlzLl9zZXRQcm9wZXJ0aWVzKGUsdCk7dGhpcy5fYmluZEl0ZW1zKGUsdCk7dGhpcy5fYmluZEVsZW1lbnQoZSx0KX1fYmluZEVsZW1lbnQoZSx0KXtjb25zdCBhPVtdO3RoaXMuX2NyZWF0ZU9jY3VycmVuY2VzKGUpO2Zvcihjb25zdCBpIG9mIGVbci4kZ2V0Q2hpbGRyZW5dKCkpe2lmKGlbci4kZGF0YV0pY29udGludWU7aWYodm9pZCAwPT09dGhpcy5fbWVyZ2VNb2RlJiYic3ViZm9ybSI9PT1pW3IuJG5vZGVOYW1lXSl7dGhpcy5fbWVyZ2VNb2RlPSJjb25zdW1lRGF0YSI9PT1pLm1lcmdlTW9kZTtjb25zdCBlPXRbci4kZ2V0Q2hpbGRyZW5dKCk7aWYoZS5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMoaSxbZVswXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe2NvbnN0IGU9dFtyLiRuYW1lc3BhY2VJZF09PT1jPy0xOnRbci4kbmFtZXNwYWNlSWRdLGE9aVtyLiRkYXRhXT1uZXcgci5YbWxPYmplY3QoZSxpLm5hbWV8fCJyb290Iik7dFtyLiRhcHBlbmRDaGlsZF0oYSk7dGhpcy5fYmluZEVsZW1lbnQoaSxhKX1jb250aW51ZX1pZighaVtyLiRpc0JpbmRhYmxlXSgpKWNvbnRpbnVlO2xldCBlPSExLHM9bnVsbCxsPW51bGwsaD1udWxsO2lmKGkuYmluZCl7c3dpdGNoKGkuYmluZC5tYXRjaCl7Y2FzZSJub25lIjp0aGlzLl9zZXRBbmRCaW5kKGksdCk7Y29udGludWU7Y2FzZSJnbG9iYWwiOmU9ITA7YnJlYWs7Y2FzZSJkYXRhUmVmIjppZighaS5iaW5kLnJlZil7KDAsby53YXJuKShgWEZBIC0gcmVmIGlzIGVtcHR5IGluIG5vZGUgJHtpW3IuJG5vZGVOYW1lXX0uYCk7dGhpcy5fc2V0QW5kQmluZChpLHQpO2NvbnRpbnVlfWw9aS5iaW5kLnJlZn1pLmJpbmQucGljdHVyZSYmKHM9aS5iaW5kLnBpY3R1cmVbci4kY29udGVudF0pfWNvbnN0W3UsZF09dGhpcy5fZ2V0T2NjdXJJbmZvKGkpO2lmKGwpe2g9KDAsbi5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxsLCEwLCExKTtpZihudWxsPT09aCl7aD0oMCxuLmNyZWF0ZURhdGFOb2RlKSh0aGlzLmRhdGEsdCxsKTtpZighaCljb250aW51ZTt0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJihoW3IuJGNvbnN1bWVkXT0hMCk7dGhpcy5fc2V0QW5kQmluZChpLGgpO2NvbnRpbnVlfXRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGg9aC5maWx0ZXIoKGU9PiFlW3IuJGNvbnN1bWVkXSkpKTtoLmxlbmd0aD5kP2g9aC5zbGljZSgwLGQpOjA9PT1oLmxlbmd0aCYmKGg9bnVsbCk7aCYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZoLmZvckVhY2goKGU9PntlW3IuJGNvbnN1bWVkXT0hMH0pKX1lbHNle2lmKCFpLm5hbWUpe3RoaXMuX3NldEFuZEJpbmQoaSx0KTtjb250aW51ZX1pZih0aGlzLl9pc0NvbnN1bWVEYXRhKCkpe2NvbnN0IGE9W107Zm9yKDthLmxlbmd0aDxkOyl7Y29uc3Qgbj10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShpLm5hbWUsaVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpLHQsZSk7aWYoIW4pYnJlYWs7bltyLiRjb25zdW1lZF09ITA7YS5wdXNoKG4pfWg9YS5sZW5ndGg+MD9hOm51bGx9ZWxzZXtoPXRbci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGkubmFtZSwhMSx0aGlzLmVtcHR5TWVyZ2UpLm5leHQoKS52YWx1ZTtpZighaCl7aWYoMD09PXUpe2EucHVzaChpKTtjb250aW51ZX1jb25zdCBlPXRbci4kbmFtZXNwYWNlSWRdPT09Yz8tMTp0W3IuJG5hbWVzcGFjZUlkXTtoPWlbci4kZGF0YV09bmV3IHIuWG1sT2JqZWN0KGUsaS5uYW1lKTt0aGlzLmVtcHR5TWVyZ2UmJihoW3IuJGNvbnN1bWVkXT0hMCk7dFtyLiRhcHBlbmRDaGlsZF0oaCk7dGhpcy5fc2V0QW5kQmluZChpLGgpO2NvbnRpbnVlfXRoaXMuZW1wdHlNZXJnZSYmKGhbci4kY29uc3VtZWRdPSEwKTtoPVtoXX19aD90aGlzLl9iaW5kT2NjdXJyZW5jZXMoaSxoLHMpOnU+MD90aGlzLl9zZXRBbmRCaW5kKGksdCk6YS5wdXNoKGkpfWEuZm9yRWFjaCgoZT0+ZVtyLiRnZXRQYXJlbnRdKClbci4kcmVtb3ZlQ2hpbGRdKGUpKSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlZhbHVlPXQuVGV4dD10LlRlbXBsYXRlTmFtZXNwYWNlPXQuVGVtcGxhdGU9dC5TZXRQcm9wZXJ0eT10Lkl0ZW1zPXQuRmllbGQ9dC5CaW5kSXRlbXM9dm9pZCAwO3ZhciByPWEoNzgpLGk9YSg4MCksbj1hKDg0KSxzPWEoODUpLG89YSg3OSksYz1hKDIpLGw9YSg4NiksaD1hKDMpLHU9YSg4MSk7Y29uc3QgZD1pLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCxmPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsZz0vXkgoXGQrKSQvLHA9bmV3IFNldChbImltYWdlL2dpZiIsImltYWdlL2pwZWciLCJpbWFnZS9qcGciLCJpbWFnZS9wanBlZyIsImltYWdlL3BuZyIsImltYWdlL2FwbmciLCJpbWFnZS94LXBuZyIsImltYWdlL2JtcCIsImltYWdlL3gtbXMtYm1wIiwiaW1hZ2UvdGlmZiIsImltYWdlL3RpZiIsImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJdKSxtPVtbWzY2LDc3XSwiaW1hZ2UvYm1wIl0sW1syNTUsMjE2LDI1NV0sImltYWdlL2pwZWciXSxbWzczLDczLDQyLDBdLCJpbWFnZS90aWZmIl0sW1s3Nyw3NywwLDQyXSwiaW1hZ2UvdGlmZiJdLFtbNzEsNzMsNzAsNTYsNTcsOTddLCJpbWFnZS9naWYiXSxbWzEzNyw4MCw3OCw3MSwxMywxMCwyNiwxMF0sImltYWdlL3BuZyJdXTtmdW5jdGlvbiBnZXRCb3JkZXJEaW1zKGUpe2lmKCFlfHwhZS5ib3JkZXIpcmV0dXJue3c6MCxoOjB9O2NvbnN0IHQ9ZS5ib3JkZXJbci4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIGhhc01hcmdpbihlKXtyZXR1cm4gZS5tYXJnaW4mJihlLm1hcmdpbi50b3BJbnNldHx8ZS5tYXJnaW4ucmlnaHRJbnNldHx8ZS5tYXJnaW4uYm90dG9tSW5zZXR8fGUubWFyZ2luLmxlZnRJbnNldCl9ZnVuY3Rpb24gX3NldFZhbHVlKGUsdCl7aWYoIWUudmFsdWUpe2NvbnN0IHQ9bmV3IFZhbHVlKHt9KTtlW3IuJGFwcGVuZENoaWxkXSh0KTtlLnZhbHVlPXR9ZS52YWx1ZVtyLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24qZ2V0Q29udGFpbmVkQ2hpbGRyZW4oZSl7Zm9yKGNvbnN0IHQgb2YgZVtyLiRnZXRDaGlsZHJlbl0oKSl0IGluc3RhbmNlb2YgU3ViZm9ybVNldD95aWVsZCp0W3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpOnlpZWxkIHR9ZnVuY3Rpb24gaXNSZXF1aXJlZChlKXtyZXR1cm4iZXJyb3IiPT09ZS52YWxpZGF0ZT8ubnVsbFRlc3R9ZnVuY3Rpb24gc2V0VGFiSW5kZXgoZSl7Zm9yKDtlOyl7aWYoIWUudHJhdmVyc2FsKXtlW3IuJHRhYkluZGV4XT1lW3IuJGdldFBhcmVudF0oKVtyLiR0YWJJbmRleF07cmV0dXJufWlmKGVbci4kdGFiSW5kZXhdKXJldHVybjtsZXQgdD1udWxsO2Zvcihjb25zdCBhIG9mIGUudHJhdmVyc2FsW3IuJGdldENoaWxkcmVuXSgpKWlmKCJuZXh0Ij09PWEub3BlcmF0aW9uKXt0PWE7YnJlYWt9aWYoIXR8fCF0LnJlZil7ZVtyLiR0YWJJbmRleF09ZVtyLiRnZXRQYXJlbnRdKClbci4kdGFiSW5kZXhdO3JldHVybn1jb25zdCBhPWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO2Vbci4kdGFiSW5kZXhdPSsrYVtyLiR0YWJJbmRleF07Y29uc3QgaT1hW3IuJHNlYXJjaE5vZGVdKHQucmVmLGUpO2lmKCFpKXJldHVybjtlPWlbMF19fWZ1bmN0aW9uIGFwcGx5QXNzaXN0KGUsdCl7Y29uc3QgYT1lLmFzc2lzdDtpZihhKXtjb25zdCBlPWFbci4kdG9IVE1MXSgpO2UmJih0LnRpdGxlPWUpO2NvbnN0IGk9YS5yb2xlLm1hdGNoKGcpO2lmKGkpe2NvbnN0IGU9ImhlYWRpbmciLGE9aVsxXTt0LnJvbGU9ZTt0WyJhcmlhLWxldmVsIl09YX19aWYoInRhYmxlIj09PWUubGF5b3V0KXQucm9sZT0idGFibGUiO2Vsc2UgaWYoInJvdyI9PT1lLmxheW91dCl0LnJvbGU9InJvdyI7ZWxzZXtjb25zdCBhPWVbci4kZ2V0UGFyZW50XSgpOyJyb3ciPT09YS5sYXlvdXQmJigiVEgiPT09YS5hc3Npc3Q/LnJvbGU/dC5yb2xlPSJjb2x1bW5oZWFkZXIiOnQucm9sZT0iY2VsbCIpfX1mdW5jdGlvbiBhcmlhTGFiZWwoZSl7aWYoIWUuYXNzaXN0KXJldHVybiBudWxsO2NvbnN0IHQ9ZS5hc3Npc3Q7cmV0dXJuIHQuc3BlYWsmJiIiIT09dC5zcGVha1tyLiRjb250ZW50XT90LnNwZWFrW3IuJGNvbnRlbnRdOnQudG9vbFRpcD90LnRvb2xUaXBbci4kY29udGVudF06bnVsbH1mdW5jdGlvbiB2YWx1ZVRvSHRtbChlKXtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sY2hpbGRyZW46W3tuYW1lOiJzcGFuIixhdHRyaWJ1dGVzOntzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSx2YWx1ZTplfV19KX1mdW5jdGlvbiBzZXRGaXJzdFVuc3BsaXR0YWJsZShlKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO2lmKG51bGw9PT10W3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSl7dFtyLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9ZTt0W3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITB9fWZ1bmN0aW9uIHVuc2V0Rmlyc3RVbnNwbGl0dGFibGUoZSl7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKTt0W3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT09PWUmJih0W3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEpfWZ1bmN0aW9uIGhhbmRsZUJyZWFrKGUpe2lmKGVbci4kZXh0cmFdKXJldHVybiExO2Vbci4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoImF1dG8iPT09ZS50YXJnZXRUeXBlKXJldHVybiExO2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7bGV0IGE9bnVsbDtpZihlLnRhcmdldCl7YT10W3IuJHNlYXJjaE5vZGVdKGUudGFyZ2V0LGVbci4kZ2V0UGFyZW50XSgpKTtpZighYSlyZXR1cm4hMTthPWFbMF19Y29uc3R7Y3VycmVudFBhZ2VBcmVhOmksY3VycmVudENvbnRlbnRBcmVhOm59PXRbci4kZXh0cmFdO2lmKCJwYWdlQXJlYSI9PT1lLnRhcmdldFR5cGUpe2EgaW5zdGFuY2VvZiBQYWdlQXJlYXx8KGE9bnVsbCk7aWYoZS5zdGFydE5ldyl7ZVtyLiRleHRyYV0udGFyZ2V0PWF8fGk7cmV0dXJuITB9aWYoYSYmYSE9PWkpe2Vbci4kZXh0cmFdLnRhcmdldD1hO3JldHVybiEwfXJldHVybiExfWEgaW5zdGFuY2VvZiBDb250ZW50QXJlYXx8KGE9bnVsbCk7Y29uc3Qgcz1hJiZhW3IuJGdldFBhcmVudF0oKTtsZXQgbyxjPXM7aWYoZS5zdGFydE5ldylpZihhKXtjb25zdCBlPXMuY29udGVudEFyZWEuY2hpbGRyZW4sdD1lLmluZGV4T2Yobikscj1lLmluZGV4T2YoYSk7LTEhPT10JiZ0PHImJihjPW51bGwpO289ci0xfWVsc2Ugbz1pLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yobik7ZWxzZXtpZighYXx8YT09PW4pcmV0dXJuITE7bz1zLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoYSktMTtjPXM9PT1pP251bGw6c31lW3IuJGV4dHJhXS50YXJnZXQ9YztlW3IuJGV4dHJhXS5pbmRleD1vO3JldHVybiEwfWZ1bmN0aW9uIGhhbmRsZU92ZXJmbG93KGUsdCxhKXtjb25zdCBpPWVbci4kZ2V0VGVtcGxhdGVSb290XSgpLG49aVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlLHM9dFtyLiRnZXRTdWJmb3JtUGFyZW50XTt0W3IuJGdldFN1YmZvcm1QYXJlbnRdPSgpPT5lO2lbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMDtjb25zdCBvPXRbci4kdG9IVE1MXShhKTtlW3IuJGFkZEhUTUxdKG8uaHRtbCxvLmJib3gpO2lbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT1uO3Rbci4kZ2V0U3ViZm9ybVBhcmVudF09c31jbGFzcyBBcHBlYXJhbmNlRmlsdGVyIGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYXBwZWFyYW5jZUZpbHRlciIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQXJjIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYXJjIiwhMCk7dGhpcy5jaXJjdWxhcj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmhhbmQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnN0YXJ0QW5nbGU9KDAsby5nZXRGbG9hdCkoe2RhdGE6ZS5zdGFydEFuZ2xlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5zd2VlcEFuZ2xlPSgwLG8uZ2V0RmxvYXQpKHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZWRnZT1udWxsO3RoaXMuZmlsbD1udWxsfVtyLiR0b0hUTUxdKCl7Y29uc3QgZT10aGlzLmVkZ2V8fG5ldyBFZGdlKHt9KSx0PWVbci4kdG9TdHlsZV0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZT9PYmplY3QuYXNzaWduKGEsdGhpcy5maWxsW3IuJHRvU3R5bGVdKCkpOmEuZmlsbD0idHJhbnNwYXJlbnQiO2Euc3Ryb2tlV2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCk7YS5zdHJva2U9dC5jb2xvcjtsZXQgaTtjb25zdCBuPXt4bWxuczpmLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpaT17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6ZixjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXtjb25zdCBlPXRoaXMuc3RhcnRBbmdsZSpNYXRoLlBJLzE4MCx0PXRoaXMuc3dlZXBBbmdsZSpNYXRoLlBJLzE4MCxyPXRoaXMuc3dlZXBBbmdsZT4xODA/MTowLFtzLG8sYyxsXT1bNTAqKDErTWF0aC5jb3MoZSkpLDUwKigxLU1hdGguc2luKGUpKSw1MCooMStNYXRoLmNvcyhlK3QpKSw1MCooMS1NYXRoLnNpbihlK3QpKV07aT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6ZixkOmBNICR7c30gJHtvfSBBIDUwIDUwIDAgJHtyfSAwICR7Y30gJHtsfWAsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fTtPYmplY3QuYXNzaWduKG4se3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfWNvbnN0IGM9e25hbWU6InN2ZyIsY2hpbGRyZW46W2ldLGF0dHJpYnV0ZXM6bn07aWYoaGFzTWFyZ2luKHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2NdfSk7Yy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGMpfX1jbGFzcyBBcmVhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYXJlYSIsITApO3RoaXMuY29sU3Bhbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMueD0oMCxvLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgci5YRkFPYmplY3RBcnJheX0qW3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtyLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiEwfVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRhZGRIVE1MXShlLHQpe2NvbnN0W2EsaSxuLHNdPXQ7dGhpc1tyLiRleHRyYV0ud2lkdGg9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0ud2lkdGgsYStuKTt0aGlzW3IuJGV4dHJhXS5oZWlnaHQ9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0uaGVpZ2h0LGkrcyk7dGhpc1tyLiRleHRyYV0uY2hpbGRyZW4ucHVzaChlKX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuIHRoaXNbci4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJwb3NpdGlvbiIpLGE9e3N0eWxlOnQsaWQ6dGhpc1tyLiR1aWRdLGNsYXNzOlsieGZhQXJlYSJdfTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmYS5jbGFzcy5wdXNoKCJ4ZmFQcmludE9ubHkiKTt0aGlzLm5hbWUmJihhLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBpPVtdO3RoaXNbci4kZXh0cmFdPXtjaGlsZHJlbjppLHdpZHRoOjAsaGVpZ2h0OjAsYXZhaWxhYmxlU3BhY2U6ZX07Y29uc3Qgbj10aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFuLnN1Y2Nlc3Mpe2lmKG4uaXNCcmVhaygpKXJldHVybiBuO2RlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkV9dC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpc1tyLiRleHRyYV0ud2lkdGgpO3QuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzW3IuJGV4dHJhXS5oZWlnaHQpO2NvbnN0IGM9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOml9LGw9W3RoaXMueCx0aGlzLnksdGhpc1tyLiRleHRyYV0ud2lkdGgsdGhpc1tyLiRleHRyYV0uaGVpZ2h0XTtkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGMsbCl9fWNsYXNzIEFzc2lzdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImFzc2lzdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yb2xlPWUucm9sZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3BlYWs9bnVsbDt0aGlzLnRvb2xUaXA9bnVsbH1bci4kdG9IVE1MXSgpe3JldHVybiB0aGlzLnRvb2xUaXA/LltyLiRjb250ZW50XXx8bnVsbH19Y2xhc3MgQmFyY29kZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJhcmNvZGUiLCEwKTt0aGlzLmNoYXJFbmNvZGluZz0oMCxvLmdldEtleXdvcmQpKHtkYXRhOmUuY2hhckVuY29kaW5nP2UuY2hhckVuY29kaW5nLnRvTG93ZXJDYXNlKCk6IiIsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PlsidXRmLTgiLCJiaWctZml2ZSIsImZvbnRzcGVjaWZpYyIsImdiayIsImdiLTE4MDMwIiwiZ2ItMjMxMiIsImtzYy01NjAxIiwibm9uZSIsInNoaWZ0LWppcyIsInVjcy0yIiwidXRmLTE2Il0uaW5jbHVkZXMoZSl8fGUubWF0Y2goL2lzby04ODU5LVxkezJ9Lyl9KTt0aGlzLmNoZWNrc3VtPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pO3RoaXMuZGF0YUNvbHVtbkNvdW50PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmRhdGFMZW5ndGg9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFMZW5ndGgsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmRhdGFQcmVwPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGFQcmVwLFsibm9uZSIsImZsYXRlQ29tcHJlc3MiXSk7dGhpcy5kYXRhUm93Q291bnQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFSb3dDb3VudCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZW5kQ2hhcj1lLmVuZENoYXJ8fCIiO3RoaXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wJiZlPD04fSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1vZHVsZUhlaWdodD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1vZHVsZUhlaWdodCwiNW1tIik7dGhpcy5tb2R1bGVXaWR0aD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1vZHVsZVdpZHRoLCIwLjI1bW0iKTt0aGlzLnByaW50Q2hlY2tEaWdpdD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucHJpbnRDaGVja0RpZ2l0LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5yb3dDb2x1bW5SYXRpbz0oMCxvLmdldFJhdGlvKShlLnJvd0NvbHVtblJhdGlvKTt0aGlzLnN0YXJ0Q2hhcj1lLnN0YXJ0Q2hhcnx8IiI7dGhpcy50ZXh0TG9jYXRpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudGV4dExvY2F0aW9uLFsiYmVsb3ciLCJhYm92ZSIsImFib3ZlRW1iZWRkZWQiLCJiZWxvd0VtYmVkZGVkIiwibm9uZSJdKTt0aGlzLnRydW5jYXRlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS50cnVuY2F0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pO3RoaXMudXBzTW9kZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53aWRlTmFycm93UmF0aW89KDAsby5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pO3RoaXMuZW5jcnlwdD1udWxsO3RoaXMuZXh0cmFzPW51bGx9fWNsYXNzIEJpbmQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJiaW5kIiwhMCk7dGhpcy5tYXRjaD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5tYXRjaCxbIm9uY2UiLCJkYXRhUmVmIiwiZ2xvYmFsIiwibm9uZSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEJpbmRJdGVtcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJpbmRJdGVtcyIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiJ9fXQuQmluZEl0ZW1zPUJpbmRJdGVtcztjbGFzcyBCb29rZW5kIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYm9va2VuZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQm9vbGVhbkVsZW1lbnQgZXh0ZW5kcyByLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJvb2xlYW4iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwoMT09PXRoaXNbci4kY29udGVudF0/IjEiOiIwIil9fWNsYXNzIEJvcmRlciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJvcmRlciIsITApO3RoaXMuYnJlYWs9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYnJlYWssWyJjbG9zZSIsIm9wZW4iXSk7dGhpcy5oYW5kPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wcmVzZW5jZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbGw9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiRnZXRFeHRyYV0oKXtpZighdGhpc1tyLiRleHRyYV0pe2NvbnN0IGU9dGhpcy5lZGdlLmNoaWxkcmVuLnNsaWNlKCk7aWYoZS5sZW5ndGg8NCl7Y29uc3QgdD1lLmF0KC0xKXx8bmV3IEVkZ2Uoe30pO2ZvcihsZXQgYT1lLmxlbmd0aDthPDQ7YSsrKWUucHVzaCh0KX1jb25zdCB0PWUubWFwKChlPT5lLnRoaWNrbmVzcykpLGE9WzAsMCwwLDBdO2lmKHRoaXMubWFyZ2luKXthWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0O2FbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldDthWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0O2FbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0fXRoaXNbci4kZXh0cmFdPXt3aWR0aHM6dCxpbnNldHM6YSxlZGdlczplfX1yZXR1cm4gdGhpc1tyLiRleHRyYV19W3IuJHRvU3R5bGVdKCl7Y29uc3R7ZWRnZXM6ZX09dGhpc1tyLiRnZXRFeHRyYV0oKSx0PWUubWFwKChlPT57Y29uc3QgdD1lW3IuJHRvU3R5bGVdKCk7dC5jb2xvcnx8PSIjMDAwMDAwIjtyZXR1cm4gdH0pKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24oYSx0aGlzLm1hcmdpbltyLiR0b1N0eWxlXSgpKTsidmlzaWJsZSI9PT10aGlzLmZpbGw/LnByZXNlbmNlJiZPYmplY3QuYXNzaWduKGEsdGhpcy5maWxsW3IuJHRvU3R5bGVdKCkpO2lmKHRoaXMuY29ybmVyLmNoaWxkcmVuLnNvbWUoKGU9PjAhPT1lLnJhZGl1cykpKXtjb25zdCBlPXRoaXMuY29ybmVyLmNoaWxkcmVuLm1hcCgoZT0+ZVtyLiR0b1N0eWxlXSgpKSk7aWYoMj09PWUubGVuZ3RofHwzPT09ZS5sZW5ndGgpe2NvbnN0IHQ9ZS5hdCgtMSk7Zm9yKGxldCBhPWUubGVuZ3RoO2E8NDthKyspZS5wdXNoKHQpfWEuYm9yZGVyUmFkaXVzPWUubWFwKChlPT5lLnJhZGl1cykpLmpvaW4oIiAiKX1zd2l0Y2godGhpcy5wcmVzZW5jZSl7Y2FzZSJpbnZpc2libGUiOmNhc2UiaGlkZGVuIjphLmJvcmRlclN0eWxlPSIiO2JyZWFrO2Nhc2UiaW5hY3RpdmUiOmEuYm9yZGVyU3R5bGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6YS5ib3JkZXJTdHlsZT10Lm1hcCgoZT0+ZS5zdHlsZSkpLmpvaW4oIiAiKX1hLmJvcmRlcldpZHRoPXQubWFwKChlPT5lLndpZHRoKSkuam9pbigiICIpO2EuYm9yZGVyQ29sb3I9dC5tYXAoKGU9PmUuY29sb3IpKS5qb2luKCIgIik7cmV0dXJuIGF9fWNsYXNzIEJyZWFrIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYnJlYWsiLCEwKTt0aGlzLmFmdGVyPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFmdGVyLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSk7dGhpcy5hZnRlclRhcmdldD1lLmFmdGVyVGFyZ2V0fHwiIjt0aGlzLmJlZm9yZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5iZWZvcmUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKTt0aGlzLmJlZm9yZVRhcmdldD1lLmJlZm9yZVRhcmdldHx8IiI7dGhpcy5ib29rZW5kTGVhZGVyPWUuYm9va2VuZExlYWRlcnx8IiI7dGhpcy5ib29rZW5kVHJhaWxlcj1lLmJvb2tlbmRUcmFpbGVyfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcmZsb3dMZWFkZXI9ZS5vdmVyZmxvd0xlYWRlcnx8IiI7dGhpcy5vdmVyZmxvd1RhcmdldD1lLm92ZXJmbG93VGFyZ2V0fHwiIjt0aGlzLm92ZXJmbG93VHJhaWxlcj1lLm92ZXJmbG93VHJhaWxlcnx8IiI7dGhpcy5zdGFydE5ldz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgQnJlYWtBZnRlciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJyZWFrQWZ0ZXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnN0YXJ0TmV3PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRhcmdldFR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnNjcmlwdD1udWxsfX1jbGFzcyBCcmVha0JlZm9yZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJyZWFrQmVmb3JlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy5zdGFydE5ldz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50YXJnZXRUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKTt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zY3JpcHQ9bnVsbH1bci4kdG9IVE1MXShlKXt0aGlzW3IuJGV4dHJhXT17fTtyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkV9fWNsYXNzIEJ1dHRvbiBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJ1dHRvbiIsITApO3RoaXMuaGlnaGxpZ2h0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhpZ2hsaWdodCxbImludmVydGVkIiwibm9uZSIsIm91dGxpbmUiLCJwdXNoIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksYT17bmFtZToiYnV0dG9uIixhdHRyaWJ1dGVzOntpZDp0aGlzW3IuJHVpZF0sY2xhc3M6WyJ4ZmFCdXR0b24iXSxzdHlsZTp7fX0sY2hpbGRyZW46W119O2Zvcihjb25zdCBlIG9mIHQuZXZlbnQuY2hpbGRyZW4pe2lmKCJjbGljayIhPT1lLmFjdGl2aXR5fHwhZS5zY3JpcHQpY29udGludWU7Y29uc3QgdD0oMCxoLnJlY292ZXJKc1VSTCkoZS5zY3JpcHRbci4kY29udGVudF0pO2lmKCF0KWNvbnRpbnVlO2NvbnN0IGk9KDAscy5maXhVUkwpKHQudXJsKTtpJiZhLmNoaWxkcmVuLnB1c2goe25hbWU6ImEiLGF0dHJpYnV0ZXM6e2lkOiJsaW5rIit0aGlzW3IuJHVpZF0saHJlZjppLG5ld1dpbmRvdzp0Lm5ld1dpbmRvdyxjbGFzczpbInhmYUxpbmsiXSxzdHlsZTp7fX0sY2hpbGRyZW46W119KX1yZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoYSl9fWNsYXNzIENhbGN1bGF0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNhbGN1bGF0ZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVycmlkZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vdmVycmlkZSxbImRpc2FibGVkIiwiZXJyb3IiLCJpZ25vcmUiLCJ3YXJuaW5nIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWVzc2FnZT1udWxsO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIENhcHRpb24gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjYXB0aW9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBsYWNlbWVudD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSk7dGhpcy5wcmVzZW5jZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlc2VydmU9TWF0aC5jZWlsKCgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUucmVzZXJ2ZSkpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZm9udD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy52YWx1ZT1udWxsfVtyLiRzZXRWYWx1ZV0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3IuJGdldEV4dHJhXShlKXtpZighdGhpc1tyLiRleHRyYV0pe2xldHt3aWR0aDp0LGhlaWdodDphfT1lO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dD10aGlzLnJlc2VydmU8PTA/dDp0aGlzLnJlc2VydmU7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjphPXRoaXMucmVzZXJ2ZTw9MD9hOnRoaXMucmVzZXJ2ZX10aGlzW3IuJGV4dHJhXT0oMCxzLmxheW91dE5vZGUpKHRoaXMse3dpZHRoOnQsaGVpZ2h0OmF9KX1yZXR1cm4gdGhpc1tyLiRleHRyYV19W3IuJHRvSFRNTF0oZSl7aWYoIXRoaXMudmFsdWUpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTt0aGlzW3IuJHB1c2hQYXJhXSgpO2NvbnN0IHQ9dGhpcy52YWx1ZVtyLiR0b0hUTUxdKGUpLmh0bWw7aWYoIXQpe3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZfWNvbnN0IGE9dGhpcy5yZXNlcnZlO2lmKHRoaXMucmVzZXJ2ZTw9MCl7Y29uc3R7dzp0LGg6YX09dGhpc1tyLiRnZXRFeHRyYV0oZSk7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0aGlzLnJlc2VydmU9dDticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT1hfX1jb25zdCBpPVtdOyJzdHJpbmciPT10eXBlb2YgdD9pLnB1c2goe25hbWU6IiN0ZXh0Iix2YWx1ZTp0fSk6aS5wdXNoKHQpO2NvbnN0IG49KDAscy50b1N0eWxlKSh0aGlzLCJmb250IiwibWFyZ2luIiwidmlzaWJpbGl0eSIpO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0Ijp0aGlzLnJlc2VydmU+MCYmKG4ud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPjAmJihuLmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKSl9KDAscy5zZXRQYXJhKSh0aGlzLG51bGwsdCk7dGhpc1tyLiRwb3BQYXJhXSgpO3RoaXMucmVzZXJ2ZT1hO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpuLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjppfSl9fWNsYXNzIENlcnRpZmljYXRlIGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY2VydGlmaWNhdGUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQ2VydGlmaWNhdGVzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY2VydGlmaWNhdGVzIiwhMCk7dGhpcy5jcmVkZW50aWFsU2VydmVyUG9saWN5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3ksWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51cmw9ZS51cmx8fCIiO3RoaXMudXJsUG9saWN5PWUudXJsUG9saWN5fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNyeXB0aW9uPW51bGw7dGhpcy5pc3N1ZXJzPW51bGw7dGhpcy5rZXlVc2FnZT1udWxsO3RoaXMub2lkcz1udWxsO3RoaXMuc2lnbmluZz1udWxsO3RoaXMuc3ViamVjdEROcz1udWxsfX1jbGFzcyBDaGVja0J1dHRvbiBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNoZWNrQnV0dG9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1hcms9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSk7dGhpcy5zaGFwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMuc2l6ZT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKCJtYXJnaW4iKSxhPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO3Qud2lkdGg9dC5oZWlnaHQ9YTtsZXQgaSxuLGM7Y29uc3QgbD10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksaD1sLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCYmbC5pdGVtcy5jaGlsZHJlblswXVtyLiR0b0hUTUxdKCkuaHRtbHx8W10sdT17b246KHZvaWQgMCE9PWhbMF0/aFswXToib24iKS50b1N0cmluZygpLG9mZjoodm9pZCAwIT09aFsxXT9oWzFdOiJvZmYiKS50b1N0cmluZygpfSxkPShsLnZhbHVlPy5bci4kdGV4dF0oKXx8Im9mZiIpPT09dS5vbnx8dm9pZCAwLGY9bFtyLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtyLiR1aWRdO2xldCBwO2lmKGYgaW5zdGFuY2VvZiBFeGNsR3JvdXApe2M9ZltyLiR1aWRdO2k9InJhZGlvIjtuPSJ4ZmFSYWRpbyI7cD1mW3IuJGRhdGFdPy5bci4kdWlkXXx8ZltyLiR1aWRdfWVsc2V7aT0iY2hlY2tib3giO249InhmYUNoZWNrYm94IjtwPWxbci4kZGF0YV0/LltyLiR1aWRdfHxsW3IuJHVpZF19Y29uc3QgbT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltuXSxzdHlsZTp0LGZpZWxkSWQ6ZyxkYXRhSWQ6cCx0eXBlOmksY2hlY2tlZDpkLHhmYU9uOnUub24seGZhT2ZmOnUub2ZmLCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobCksImFyaWEtcmVxdWlyZWQiOiExfX07YyYmKG0uYXR0cmlidXRlcy5uYW1lPWMpO2lmKGlzUmVxdWlyZWQobCkpe20uYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO20uYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlttXX0pfX1jbGFzcyBDaG9pY2VMaXN0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY2hvaWNlTGlzdCIsITApO3RoaXMuY29tbWl0T249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVuPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKTt0aGlzLnRleHRFbnRyeT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJtYXJnaW4iKSxhPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxpPXtmb250U2l6ZTpgY2FsYygke2EuZm9udD8uc2l6ZXx8MTB9cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWB9LG49W107aWYoYS5pdGVtcy5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZT1hLml0ZW1zO2xldCB0PTAscz0wO2lmKDI9PT1lLmNoaWxkcmVuLmxlbmd0aCl7dD1lLmNoaWxkcmVuWzBdLnNhdmU7cz0xLXR9Y29uc3Qgbz1lLmNoaWxkcmVuW3RdW3IuJHRvSFRNTF0oKS5odG1sLGM9ZS5jaGlsZHJlbltzXVtyLiR0b0hUTUxdKCkuaHRtbDtsZXQgbD0hMTtjb25zdCBoPWEudmFsdWU/LltyLiR0ZXh0XSgpfHwiIjtmb3IobGV0IGU9MCx0PW8ubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9e25hbWU6Im9wdGlvbiIsYXR0cmlidXRlczp7dmFsdWU6Y1tlXXx8b1tlXSxzdHlsZTppfSx2YWx1ZTpvW2VdfTtjW2VdPT09aCYmKHQuYXR0cmlidXRlcy5zZWxlY3RlZD1sPSEwKTtuLnB1c2godCl9bHx8bi5zcGxpY2UoMCwwLHtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e2hpZGRlbjohMCxzZWxlY3RlZDohMH0sdmFsdWU6IiAifSl9Y29uc3QgYz17Y2xhc3M6WyJ4ZmFTZWxlY3QiXSxmaWVsZElkOmFbci4kdWlkXSxkYXRhSWQ6YVtyLiRkYXRhXT8uW3IuJHVpZF18fGFbci4kdWlkXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfTtpZihpc1JlcXVpcmVkKGEpKXtjWyJhcmlhLXJlcXVpcmVkIl09ITA7Yy5yZXF1aXJlZD0hMH0ibXVsdGlTZWxlY3QiPT09dGhpcy5vcGVuJiYoYy5tdWx0aXBsZT0hMCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbe25hbWU6InNlbGVjdCIsY2hpbGRyZW46bixhdHRyaWJ1dGVzOmN9XX0pfX1jbGFzcyBDb2xvciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNvbG9yIiwhMCk7dGhpcy5jU3BhY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuY1NwYWNlLFsiU1JHQiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZhbHVlPWUudmFsdWU/KDAsby5nZXRDb2xvcikoZS52YWx1ZSk6IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kaGFzU2V0dGFibGVWYWx1ZV0oKXtyZXR1cm4hMX1bci4kdG9TdHlsZV0oKXtyZXR1cm4gdGhpcy52YWx1ZT9jLlV0aWwubWFrZUhleENvbG9yKHRoaXMudmFsdWUucix0aGlzLnZhbHVlLmcsdGhpcy52YWx1ZS5iKTpudWxsfX1jbGFzcyBDb21iIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY29tYiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5udW1iZXJPZkNlbGxzPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIENvbm5lY3QgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjb25uZWN0IiwhMCk7dGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy51c2FnZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS51c2FnZSxbImV4cG9ydEFuZEltcG9ydCIsImV4cG9ydE9ubHkiLCJpbXBvcnRPbmx5Il0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnBpY3R1cmU9bnVsbH19Y2xhc3MgQ29udGVudEFyZWEgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjb250ZW50QXJlYSIsITApO3RoaXMuaD0oMCxvLmdldE1lYXN1cmVtZW50KShlLmgpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yZWxldmFudD0oMCxvLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudyk7dGhpcy54PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PXtsZWZ0OigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLngpLHRvcDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy55KSx3aWR0aDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy53KSxoZWlnaHQ6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuaCl9LGE9WyJ4ZmFDb250ZW50YXJlYSJdOygwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZhLnB1c2goInhmYVByaW50T25seSIpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOntzdHlsZTp0LGNsYXNzOmEsaWQ6dGhpc1tyLiR1aWRdfX0pfX1jbGFzcyBDb3JuZXIgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjb3JuZXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW52ZXJ0ZWQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmludmVydGVkLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5qb2luPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmpvaW4sWyJzcXVhcmUiLCJyb3VuZCJdKTt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmFkaXVzPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUucmFkaXVzKTt0aGlzLnN0cm9rZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zdHJva2UsWyJzb2xpZCIsImRhc2hEb3QiLCJkYXNoRG90RG90IiwiZGFzaGVkIiwiZG90dGVkIiwiZW1ib3NzZWQiLCJldGNoZWQiLCJsb3dlcmVkIiwicmFpc2VkIl0pO3RoaXMudGhpY2tuZXNzPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudGhpY2tuZXNzLCIwLjVwdCIpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oKXtjb25zdCBlPSgwLHMudG9TdHlsZSkodGhpcywidmlzaWJpbGl0eSIpO2UucmFkaXVzPSgwLHMubWVhc3VyZVRvU3RyaW5nKSgic3F1YXJlIj09PXRoaXMuam9pbj8wOnRoaXMucmFkaXVzKTtyZXR1cm4gZX19Y2xhc3MgRGF0ZUVsZW1lbnQgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGF0ZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbci4kY29udGVudF0udHJpbSgpO3RoaXNbci4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfVtyLiR0b0hUTUxdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIERhdGVUaW1lIGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImRhdGVUaW1lIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tyLiRjb250ZW50XS50cmltKCk7dGhpc1tyLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGF0ZVRpbWVFZGl0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGF0ZVRpbWVFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBpY2tlcj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5waWNrZXIsWyJob3N0Iiwibm9uZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKSxhPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxpPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDphW3IuJHVpZF0sZGF0YUlkOmFbci4kZGF0YV0/LltyLiR1aWRdfHxhW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChhKSl7aS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7aS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2ldfSl9fWNsYXNzIERlY2ltYWwgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGVjaW1hbCIpO3RoaXMuZnJhY0RpZ2l0cz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuZnJhY0RpZ2l0cyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTplPT4hMH0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkRGlnaXRzPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT4hMH0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUZsb2F0KHRoaXNbci4kY29udGVudF0udHJpbSgpKTt0aGlzW3IuJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGVmYXVsdFVpIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGVmYXVsdFVpIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgRGVzYyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImRlc2MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgci5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGlnZXN0TWV0aG9kIixbIiIsIlNIQTEiLCJTSEEyNTYiLCJTSEE1MTIiLCJSSVBFTUQxNjAiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIERpZ2VzdE1ldGhvZHMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJkaWdlc3RNZXRob2RzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZGlnZXN0TWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBEcmF3IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZHJhdyIsITApO3RoaXMuYW5jaG9yVHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oPygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiI7dGhpcy5oQWxpZ249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy5yb3RhdGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lJTkwPT0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmtlZXA9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy51aT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRzZXRWYWx1ZV0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCB0PXRoaXMudyxhPXRoaXMuaCx7dzppLGg6Yyxpc0Jyb2tlbjpsfT0oMCxzLmxheW91dE5vZGUpKHRoaXMsZSk7aWYoaSYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXRoaXMudz1pfWMmJiIiPT09dGhpcy5oJiYodGhpcy5oPWMpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxuLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuRkFJTFVSRX11bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2NvbnN0IGg9KDAscy50b1N0eWxlKSh0aGlzLCJmb250IiwiaEFsaWduIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwiYm9yZGVyIiwibWFyZ2luIik7KDAscy5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLGgpO2lmKGgubWFyZ2luKXtoLnBhZGRpbmc9aC5tYXJnaW47ZGVsZXRlIGgubWFyZ2lufWNvbnN0IHU9WyJ4ZmFEcmF3Il07dGhpcy5mb250JiZ1LnB1c2goInhmYUZvbnQiKTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmdS5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBkPXtzdHlsZTpoLGlkOnRoaXNbci4kdWlkXSxjbGFzczp1fTt0aGlzLm5hbWUmJihkLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBmPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07YXBwbHlBc3Npc3QodGhpcyxkKTtjb25zdCBnPSgwLHMuY29tcHV0ZUJib3gpKHRoaXMsZixlKSxwPXRoaXMudmFsdWU/dGhpcy52YWx1ZVtyLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtpZihudWxsPT09cCl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsZiksZyl9Zi5jaGlsZHJlbi5wdXNoKHApOygwLHMuc2V0UGFyYSkodGhpcyxoLHApO3RoaXMudz10O3RoaXMuaD1hO3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLGYpLGcpfX1jbGFzcyBFZGdlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZWRnZSIsITApO3RoaXMuY2FwPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNhcCxbInNxdWFyZSIsImJ1dHQiLCJyb3VuZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5zdHJva2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKTt0aGlzLnRoaWNrbmVzcz0oMCxvLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtPYmplY3QuYXNzaWduKGUse2xpbmVjYXA6dGhpcy5jYXAsd2lkdGg6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGhpY2tuZXNzKSxjb2xvcjp0aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCIsc3R5bGU6IiJ9KTtpZigidmlzaWJsZSIhPT10aGlzLnByZXNlbmNlKWUuc3R5bGU9Im5vbmUiO2Vsc2Ugc3dpdGNoKHRoaXMuc3Ryb2tlKXtjYXNlInNvbGlkIjplLnN0eWxlPSJzb2xpZCI7YnJlYWs7Y2FzZSJkYXNoRG90IjpjYXNlImRhc2hEb3REb3QiOmNhc2UiZGFzaGVkIjplLnN0eWxlPSJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjplLnN0eWxlPSJkb3R0ZWQiO2JyZWFrO2Nhc2UiZW1ib3NzZWQiOmUuc3R5bGU9InJpZGdlIjticmVhaztjYXNlImV0Y2hlZCI6ZS5zdHlsZT0iZ3Jvb3ZlIjticmVhaztjYXNlImxvd2VyZWQiOmUuc3R5bGU9Imluc2V0IjticmVhaztjYXNlInJhaXNlZCI6ZS5zdHlsZT0ib3V0c2V0In1yZXR1cm4gZX19Y2xhc3MgRW5jb2RpbmcgZXh0ZW5kcyByLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNvZGluZyIsWyJhZGJlLng1MDkucnNhX3NoYTEiLCJhZGJlLnBrY3M3LmRldGFjaGVkIiwiYWRiZS5wa2NzNy5zaGExIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFbmNvZGluZ3MgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNvZGluZ3MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNvZGluZz1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgRW5jcnlwdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImVuY3J5cHQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW51bGx9fWNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZW5jcnlwdERhdGEiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbImVuY3J5cHQiLCJkZWNyeXB0Il0pO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLm1hbmlmZXN0PW51bGx9fWNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNyeXB0aW9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVuY3J5cHRpb25NZXRob2QgZXh0ZW5kcyByLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVuY3J5cHRpb25NZXRob2RzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZW5jcnlwdGlvbk1ldGhvZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFdmVudCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV2ZW50IiwhMCk7dGhpcy5hY3Rpdml0eT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpdml0eSxbImNsaWNrIiwiY2hhbmdlIiwiZG9jQ2xvc2UiLCJkb2NSZWFkeSIsImVudGVyIiwiZXhpdCIsImZ1bGwiLCJpbmRleENoYW5nZSIsImluaXRpYWxpemUiLCJtb3VzZURvd24iLCJtb3VzZUVudGVyIiwibW91c2VFeGl0IiwibW91c2VVcCIsInBvc3RFeGVjdXRlIiwicG9zdE9wZW4iLCJwb3N0UHJpbnQiLCJwb3N0U2F2ZSIsInBvc3RTaWduIiwicG9zdFN1Ym1pdCIsInByZUV4ZWN1dGUiLCJwcmVPcGVuIiwicHJlUHJpbnQiLCJwcmVTYXZlIiwicHJlU2lnbiIsInByZVN1Ym1pdCIsInJlYWR5IiwidmFsaWRhdGlvblN0YXRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saXN0ZW49KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubGlzdGVuLFsicmVmT25seSIsInJlZkFuZERlc2NlbmRlbnRzIl0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW51bGw7dGhpcy5leGVjdXRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnNpZ25EYXRhPW51bGw7dGhpcy5zdWJtaXQ9bnVsbH19Y2xhc3MgRXhEYXRhIGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV4RGF0YSIpO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5ocmVmPWUuaHJlZnx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1heExlbmd0aD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0tMX0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnRyYW5zZmVyRW5jb2Rpbmc9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHJhbnNmZXJFbmNvZGluZyxbIm5vbmUiLCJiYXNlNjQiLCJwYWNrYWdlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kaXNDREFUQVhtbF0oKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGV9W3IuJG9uQ2hpbGRdKGUpe2lmKCJ0ZXh0L2h0bWwiPT09dGhpcy5jb250ZW50VHlwZSYmZVtyLiRuYW1lc3BhY2VJZF09PT1pLk5hbWVzcGFjZUlkcy54aHRtbC5pZCl7dGhpc1tyLiRjb250ZW50XT1lO3JldHVybiEwfWlmKCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKXt0aGlzW3IuJGNvbnRlbnRdPWU7cmV0dXJuITB9cmV0dXJuITF9W3IuJHRvSFRNTF0oZSl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlJiZ0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF1bci4kdG9IVE1MXShlKTpvLkhUTUxSZXN1bHQuRU1QVFl9fWNsYXNzIEV4T2JqZWN0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZXhPYmplY3QiLCEwKTt0aGlzLmFyY2hpdmU9ZS5hcmNoaXZlfHwiIjt0aGlzLmNsYXNzSWQ9ZS5jbGFzc0lkfHwiIjt0aGlzLmNvZGVCYXNlPWUuY29kZUJhc2V8fCIiO3RoaXMuY29kZVR5cGU9ZS5jb2RlVHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFeGNsR3JvdXAgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJleGNsR3JvdXAiLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiI7dGhpcy5hbmNob3JUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaD1lLmg/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sYXlvdXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKTt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYmluZD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYWxjdWxhdGU9bnVsbDt0aGlzLmNhcHRpb249bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy5jb25uZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiEwfVtyLiRzZXRWYWx1ZV0oZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5maWVsZC5jaGlsZHJlbil7aWYoIXQudmFsdWUpe2NvbnN0IGU9bmV3IFZhbHVlKHt9KTt0W3IuJGFwcGVuZENoaWxkXShlKTt0LnZhbHVlPWV9dC52YWx1ZVtyLiRzZXRWYWx1ZV0oZSl9fVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kaXNUaGVyZU1vcmVXaWR0aF0oKX1bci4kaXNTcGxpdHRhYmxlXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKCFlW3IuJGlzU3BsaXR0YWJsZV0oKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlKXJldHVybiB0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlO2lmKCJwb3NpdGlvbiI9PT10aGlzLmxheW91dHx8dGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKGUubGF5b3V0Py5lbmRzV2l0aCgiLXRiIikmJjAhPT1lW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUpcmV0dXJuITE7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMDtyZXR1cm4hMH1bci4kZmx1c2hIVE1MXSgpe3JldHVybigwLG4uZmx1c2hIVE1MKSh0aGlzKX1bci4kYWRkSFRNTF0oZSx0KXsoMCxuLmFkZEhUTUwpKHRoaXMsZSx0KX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuKDAsbi5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZXx8MD09PXRoaXMuaHx8MD09PXRoaXMudylyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7Y29uc3QgdD1bXSxhPXtpZDp0aGlzW3IuJHVpZF0sY2xhc3M6W119OygwLHMuc2V0QWNjZXNzKSh0aGlzLGEuY2xhc3MpO3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSk7T2JqZWN0LmFzc2lnbih0aGlzW3IuJGV4dHJhXSx7Y2hpbGRyZW46dCxhdHRyaWJ1dGVzOmEsYXR0ZW1wdDowLGxpbmU6bnVsbCxudW1iZXJJbkxpbmU6MCxhdmFpbGFibGVTcGFjZTp7d2lkdGg6TWF0aC5taW4odGhpcy53fHwxLzAsZS53aWR0aCksaGVpZ2h0Ok1hdGgubWluKHRoaXMuaHx8MS8wLGUuaGVpZ2h0KX0sd2lkdGg6MCxoZWlnaHQ6MCxwcmV2SGVpZ2h0OjAsY3VycmVudFdpZHRoOjB9KTtjb25zdCBpPXRoaXNbci4kaXNTcGxpdHRhYmxlXSgpO2l8fHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxuLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkU7Y29uc3QgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXtjb25zdCBlPXRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dGhpc1tyLiRleHRyYV0uY29sdW1uV2lkdGhzPWU7dGhpc1tyLiRleHRyYV0uY3VycmVudENvbHVtbj0wfX1jb25zdCBsPSgwLHMudG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksaD1bInhmYUV4Y2xncm91cCJdLHU9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7dSYmaC5wdXNoKHUpOygwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZoLnB1c2goInhmYVByaW50T25seSIpO2Euc3R5bGU9bDthLmNsYXNzPWg7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCBkPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LGY9ZD8yOjE7Zm9yKDt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PGY7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6YyxpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGV9aWYoZCYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PWY7YnJlYWt9fXRoaXNbci4kcG9wUGFyYV0oKTtpfHx1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKHRoaXNbci4kZXh0cmFdLmF0dGVtcHQ9PT1mKXtpfHxkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfWxldCBnPTAscD0wO2lmKHRoaXMubWFyZ2luKXtnPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3A9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9Y29uc3QgbT1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS53aWR0aCtnLHRoaXMud3x8MCksYj1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS5oZWlnaHQrcCx0aGlzLmh8fDApLHk9W3RoaXMueCx0aGlzLnksbSxiXTsiIj09PXRoaXMudyYmKGwud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKG0pKTsiIj09PXRoaXMuaCYmKGwuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShiKSk7Y29uc3Qgdz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmEsY2hpbGRyZW46dH07YXBwbHlBc3Npc3QodGhpcyxhKTtkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyx3KSx5KX19Y2xhc3MgRXhlY3V0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV4ZWN1dGUiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmV4ZWN1dGVUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmV4ZWN1dGVUeXBlLFsiaW1wb3J0IiwicmVtZXJnZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucnVuQXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucnVuQXQsWyJjbGllbnQiLCJib3RoIiwic2VydmVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRXh0cmFzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZXh0cmFzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4dHJhcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEZpZWxkIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZmllbGQiLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiI7dGhpcy5hbmNob3JUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaD1lLmg/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sb2NhbGU9ZS5sb2NhbGV8fCIiO3RoaXMubWF4SD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heEgsIjBwdCIpO3RoaXMubWF4Vz0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heFcsIjBwdCIpO3RoaXMubWluSD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpO3RoaXMubWluVz0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD0oMCxvLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnJvdGF0ZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucm90YXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmUlOTA9PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PWUudz8oMCxvLmdldE1lYXN1cmVtZW50KShlLncpOiIiO3RoaXMueD0oMCxvLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuYXNzaXN0PW51bGw7dGhpcy5iaW5kPW51bGw7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5mb3JtYXQ9bnVsbDt0aGlzLml0ZW1zPW5ldyByLlhGQU9iamVjdEFycmF5KDIpO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnVpPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLmJpbmRJdGVtcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRzZXRWYWx1ZV0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoIXRoaXMudWkpe3RoaXMudWk9bmV3IFVpKHt9KTt0aGlzLnVpW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0odGhpcy51aSk7bGV0IGU7c3dpdGNoKHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6ZT1uZXcgVGV4dEVkaXQoe30pO3RoaXMudWkudGV4dEVkaXQ9ZTticmVhaztjYXNlIDE6ZT1uZXcgQ2hlY2tCdXR0b24oe30pO3RoaXMudWkuY2hlY2tCdXR0b249ZTticmVhaztjYXNlIDI6ZT1uZXcgQ2hvaWNlTGlzdCh7fSk7dGhpcy51aS5jaG9pY2VMaXN0PWV9dGhpcy51aVtyLiRhcHBlbmRDaGlsZF0oZSl9aWYoIXRoaXMudWl8fCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTt0aGlzLmNhcHRpb24mJmRlbGV0ZSB0aGlzLmNhcHRpb25bci4kZXh0cmFdO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgdD10aGlzLmNhcHRpb24/dGhpcy5jYXB0aW9uW3IuJHRvSFRNTF0oZSkuaHRtbDpudWxsLGE9dGhpcy53LGk9dGhpcy5oO2xldCBjPTAsaD0wO2lmKHRoaXMubWFyZ2luKXtjPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O2g9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IHU9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe2xldCB0PW51bGwsYT1udWxsLGk9MCxuPTA7aWYodGhpcy51aS5jaGVja0J1dHRvbilpPW49dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7Y29uc3R7dzp0LGg6YX09KDAscy5sYXlvdXROb2RlKSh0aGlzLGUpO2lmKG51bGwhPT10KXtpPXQ7bj1hfWVsc2Ugbj0oMCxsLmdldE1ldHJpY3MpKHRoaXMuZm9udCwhMCkubGluZU5vR2FwfXU9Z2V0Qm9yZGVyRGltcyh0aGlzLnVpW3IuJGdldEV4dHJhXSgpKTtpKz11Lnc7bis9dS5oO2lmKHRoaXMuY2FwdGlvbil7Y29uc3R7dzpzLGg6Yyxpc0Jyb2tlbjpsfT10aGlzLmNhcHRpb25bci4kZ2V0RXh0cmFdKGUpO2lmKGwmJnRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXQ9czthPWM7c3dpdGNoKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQrPWk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjphKz1ufX1lbHNle3Q9aTthPW59aWYodCYmIiI9PT10aGlzLncpe3QrPWM7dGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPHQ/dDp0aGlzLm1pblcpfWlmKGEmJiIiPT09dGhpcy5oKXthKz1oO3RoaXMuaD1NYXRoLm1pbih0aGlzLm1heEg8PTA/MS8wOnRoaXMubWF4SCx0aGlzLm1pbkgrMTxhP2E6dGhpcy5taW5IKX19dGhpc1tyLiRwb3BQYXJhXSgpOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoISgwLG4uY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXt0aGlzLnc9YTt0aGlzLmg9aTt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3QgZD0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwicHJlc2VuY2UiLCJtYXJnaW4iLCJoQWxpZ24iKTsoMCxzLnNldE1pbk1heERpbWVuc2lvbnMpKHRoaXMsZCk7Y29uc3QgZj1bInhmYUZpZWxkIl07dGhpcy5mb250JiZmLnB1c2goInhmYUZvbnQiKTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmZi5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBnPXtzdHlsZTpkLGlkOnRoaXNbci4kdWlkXSxjbGFzczpmfTtpZihkLm1hcmdpbil7ZC5wYWRkaW5nPWQubWFyZ2luO2RlbGV0ZSBkLm1hcmdpbn0oMCxzLnNldEFjY2VzcykodGhpcyxmKTt0aGlzLm5hbWUmJihnLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBwPVtdLG09e25hbWU6ImRpdiIsYXR0cmlidXRlczpnLGNoaWxkcmVuOnB9O2FwcGx5QXNzaXN0KHRoaXMsZyk7Y29uc3QgYj10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltyLiR0b1N0eWxlXSgpOm51bGwseT0oMCxzLmNvbXB1dGVCYm94KSh0aGlzLG0sZSksdz10aGlzLnVpW3IuJHRvSFRNTF0oKS5odG1sO2lmKCF3KXtPYmplY3QuYXNzaWduKGQsYik7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxtKSx5KX10aGlzW3IuJHRhYkluZGV4XSYmKHcuY2hpbGRyZW4/LlswXT93LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tyLiR0YWJJbmRleF06dy5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbci4kdGFiSW5kZXhdKTt3LmF0dHJpYnV0ZXMuc3R5bGV8fCh3LmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7bGV0IFM9bnVsbDtpZih0aGlzLnVpLmJ1dHRvbil7MT09PXcuY2hpbGRyZW4ubGVuZ3RoJiYoW1NdPXcuY2hpbGRyZW4uc3BsaWNlKDAsMSkpO09iamVjdC5hc3NpZ24ody5hdHRyaWJ1dGVzLnN0eWxlLGIpfWVsc2UgT2JqZWN0LmFzc2lnbihkLGIpO3AucHVzaCh3KTtpZih0aGlzLnZhbHVlKWlmKHRoaXMudWkuaW1hZ2VFZGl0KXcuY2hpbGRyZW4ucHVzaCh0aGlzLnZhbHVlW3IuJHRvSFRNTF0oKS5odG1sKTtlbHNlIGlmKCF0aGlzLnVpLmJ1dHRvbil7bGV0IGU9IiI7aWYodGhpcy52YWx1ZS5leERhdGEpZT10aGlzLnZhbHVlLmV4RGF0YVtyLiR0ZXh0XSgpO2Vsc2UgaWYodGhpcy52YWx1ZS50ZXh0KWU9dGhpcy52YWx1ZS50ZXh0W3IuJGdldEV4dHJhXSgpO2Vsc2V7Y29uc3QgdD10aGlzLnZhbHVlW3IuJHRvSFRNTF0oKS5odG1sO251bGwhPT10JiYoZT10LmNoaWxkcmVuWzBdLnZhbHVlKX10aGlzLnVpLnRleHRFZGl0JiZ0aGlzLnZhbHVlLnRleHQ/Lm1heENoYXJzJiYody5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLm1heExlbmd0aD10aGlzLnZhbHVlLnRleHQubWF4Q2hhcnMpO2lmKGUpe2lmKHRoaXMudWkubnVtZXJpY0VkaXQpe2U9cGFyc2VGbG9hdChlKTtlPWlzTmFOKGUpPyIiOmUudG9TdHJpbmcoKX0idGV4dGFyZWEiPT09dy5jaGlsZHJlblswXS5uYW1lP3cuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50ZXh0Q29udGVudD1lOncuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy52YWx1ZT1lfX1pZighdGhpcy51aS5pbWFnZUVkaXQmJncuY2hpbGRyZW4/LlswXSYmdGhpcy5oKXt1PXV8fGdldEJvcmRlckRpbXModGhpcy51aVtyLiRnZXRFeHRyYV0oKSk7bGV0IHQ9MDtpZih0aGlzLmNhcHRpb24mJlsidG9wIiwiYm90dG9tIl0uaW5jbHVkZXModGhpcy5jYXB0aW9uLnBsYWNlbWVudCkpe3Q9dGhpcy5jYXB0aW9uLnJlc2VydmU7dDw9MCYmKHQ9dGhpcy5jYXB0aW9uW3IuJGdldEV4dHJhXShlKS5oKTtjb25zdCBhPXRoaXMuaC10LWgtdS5oO3cuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKGEpfWVsc2Ugdy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9UyYmdy5jaGlsZHJlbi5wdXNoKFMpO2lmKCF0KXt3LmF0dHJpYnV0ZXMuY2xhc3MmJncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0Iik7dGhpcy53PWE7dGhpcy5oPWk7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxtKSx5KX1pZih0aGlzLnVpLmJ1dHRvbil7ZC5wYWRkaW5nJiZkZWxldGUgZC5wYWRkaW5nOyJkaXYiPT09dC5uYW1lJiYodC5uYW1lPSJzcGFuIik7dy5jaGlsZHJlbi5wdXNoKHQpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcyhtLHkpfXRoaXMudWkuY2hlY2tCdXR0b24mJih0LmF0dHJpYnV0ZXMuY2xhc3NbMF09InhmYUNhcHRpb25Gb3JDaGVja0J1dHRvbiIpO3cuYXR0cmlidXRlcy5jbGFzc3x8KHcuYXR0cmlidXRlcy5jbGFzcz1bXSk7dy5jaGlsZHJlbi5zcGxpY2UoMCwwLHQpO3N3aXRjaCh0aGlzLmNhcHRpb24ucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UiaW5saW5lIjp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhTGVmdCIpO2JyZWFrO2Nhc2UicmlnaHQiOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFSaWdodCIpO2JyZWFrO2Nhc2UidG9wIjp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhVG9wIik7YnJlYWs7Y2FzZSJib3R0b20iOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFCb3R0b20iKX10aGlzLnc9YTt0aGlzLmg9aTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLG0pLHkpfX10LkZpZWxkPUZpZWxkO2NsYXNzIEZpbGwgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJmaWxsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmxpbmVhcj1udWxsO3RoaXMucGF0dGVybj1udWxsO3RoaXMucmFkaWFsPW51bGw7dGhpcy5zb2xpZD1udWxsO3RoaXMuc3RpcHBsZT1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCksdD1lW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBpPSJjb2xvciIsbj1pO2lmKGUgaW5zdGFuY2VvZiBCb3JkZXIpe2k9ImJhY2tncm91bmQtY29sb3IiO249ImJhY2tncm91bmQiO3QgaW5zdGFuY2VvZiBVaSYmKGEuYmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIpfWlmKGUgaW5zdGFuY2VvZiBSZWN0YW5nbGV8fGUgaW5zdGFuY2VvZiBBcmMpe2k9bj0iZmlsbCI7YS5maWxsPSJ3aGl0ZSJ9Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8ImNvbG9yIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKCEodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KSljb250aW51ZTtjb25zdCBzPXRbci4kdG9TdHlsZV0odGhpcy5jb2xvcik7cyYmKGFbcy5zdGFydHNXaXRoKCIjIik/aTpuXT1zKTtyZXR1cm4gYX1pZih0aGlzLmNvbG9yPy52YWx1ZSl7Y29uc3QgZT10aGlzLmNvbG9yW3IuJHRvU3R5bGVdKCk7YVtlLnN0YXJ0c1dpdGgoIiMiKT9pOm5dPWV9cmV0dXJuIGF9fWNsYXNzIEZpbHRlciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImZpbHRlciIsITApO3RoaXMuYWRkUmV2b2NhdGlvbkluZm89KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYWRkUmV2b2NhdGlvbkluZm8sWyIiLCJyZXF1aXJlZCIsIm9wdGlvbmFsIiwibm9uZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZlcnNpb249KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTp0aGlzLnZlcnNpb24sZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZT0+ZT49MSYmZTw9NX0pO3RoaXMuYXBwZWFyYW5jZUZpbHRlcj1udWxsO3RoaXMuY2VydGlmaWNhdGVzPW51bGw7dGhpcy5kaWdlc3RNZXRob2RzPW51bGw7dGhpcy5lbmNvZGluZ3M9bnVsbDt0aGlzLmVuY3J5cHRpb25NZXRob2RzPW51bGw7dGhpcy5oYW5kbGVyPW51bGw7dGhpcy5sb2NrRG9jdW1lbnQ9bnVsbDt0aGlzLm1kcD1udWxsO3RoaXMucmVhc29ucz1udWxsO3RoaXMudGltZVN0YW1wPW51bGx9fWNsYXNzIEZsb2F0IGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImZsb2F0Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9cGFyc2VGbG9hdCh0aGlzW3IuJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tyLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKG51bGwhPT10aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIEZvbnQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJmb250IiwhMCk7dGhpcy5iYXNlbGluZVNoaWZ0PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuYmFzZWxpbmVTaGlmdCk7dGhpcy5mb250SG9yaXpvbnRhbFNjYWxlPSgwLG8uZ2V0RmxvYXQpKHtkYXRhOmUuZm9udEhvcml6b250YWxTY2FsZSxkZWZhdWx0VmFsdWU6MTAwLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmZvbnRWZXJ0aWNhbFNjYWxlPSgwLG8uZ2V0RmxvYXQpKHtkYXRhOmUuZm9udFZlcnRpY2FsU2NhbGUsZGVmYXVsdFZhbHVlOjEwMCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmtlcm5pbmdNb2RlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSk7dGhpcy5sZXR0ZXJTcGFjaW5nPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubGV0dGVyU3BhY2luZywiMCIpO3RoaXMubGluZVRocm91Z2g9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMubGluZVRocm91Z2hQZXJpb2Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubGluZVRocm91Z2hQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMub3ZlcmxpbmU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm92ZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMub3ZlcmxpbmVQZXJpb2Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcmxpbmVQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMucG9zdHVyZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wb3N0dXJlLFsibm9ybWFsIiwiaXRhbGljIl0pO3RoaXMuc2l6ZT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKTt0aGlzLnR5cGVmYWNlPWUudHlwZWZhY2V8fCJDb3VyaWVyIjt0aGlzLnVuZGVybGluZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUudW5kZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMudW5kZXJsaW5lUGVyaW9kPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud2VpZ2h0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbGw9bnVsbH1bci4kY2xlYW5dKGUpe3N1cGVyW3IuJGNsZWFuXShlKTt0aGlzW3IuJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKHRoaXMudHlwZWZhY2UpfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJmaWxsIiksdD1lLmNvbG9yO2lmKHQpaWYoIiMwMDAwMDAiPT09dClkZWxldGUgZS5jb2xvcjtlbHNlIGlmKCF0LnN0YXJ0c1dpdGgoIiMiKSl7ZS5iYWNrZ3JvdW5kPXQ7ZS5iYWNrZ3JvdW5kQ2xpcD0idGV4dCI7ZS5jb2xvcj0idHJhbnNwYXJlbnQifXRoaXMuYmFzZWxpbmVTaGlmdCYmKGUudmVydGljYWxBbGlnbj0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5iYXNlbGluZVNoaWZ0KSk7ZS5mb250S2VybmluZz0ibm9uZSI9PT10aGlzLmtlcm5pbmdNb2RlPyJub25lIjoibm9ybWFsIjtlLmxldHRlclNwYWNpbmc9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGV0dGVyU3BhY2luZyk7aWYoMCE9PXRoaXMubGluZVRocm91Z2gpe2UudGV4dERlY29yYXRpb249ImxpbmUtdGhyb3VnaCI7Mj09PXRoaXMubGluZVRocm91Z2gmJihlLnRleHREZWNvcmF0aW9uU3R5bGU9ImRvdWJsZSIpfWlmKDAhPT10aGlzLm92ZXJsaW5lKXtlLnRleHREZWNvcmF0aW9uPSJvdmVybGluZSI7Mj09PXRoaXMub3ZlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uU3R5bGU9ImRvdWJsZSIpfWUuZm9udFN0eWxlPXRoaXMucG9zdHVyZTtlLmZvbnRTaXplPSgwLHMubWVhc3VyZVRvU3RyaW5nKSguOTkqdGhpcy5zaXplKTsoMCxzLnNldEZvbnRGYW1pbHkpKHRoaXMsdGhpcyx0aGlzW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIsZSk7aWYoMCE9PXRoaXMudW5kZXJsaW5lKXtlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiOzI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250V2VpZ2h0PXRoaXMud2VpZ2h0O3JldHVybiBlfX1jbGFzcyBGb3JtYXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJmb3JtYXQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBIYW5kbGVyIGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaGFuZGxlciIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgSHlwaGVuYXRpb24gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJoeXBoZW5hdGlvbiIpO3RoaXMuZXhjbHVkZUFsbENhcHM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmV4Y2x1ZGVBbGxDYXBzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5leGNsdWRlSW5pdGlhbENhcD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmh5cGhlbmF0ZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuaHlwaGVuYXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnB1c2hDaGFyYWN0ZXJDb3VudD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucHVzaENoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTozLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnJlbWFpbkNoYXJhY3RlckNvdW50PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud29yZENoYXJhY3RlckNvdW50PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS53b3JkQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjcsdmFsaWRhdGU6ZT0+ZT49MH0pfX1jbGFzcyBJbWFnZSBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImltYWdlIik7dGhpcy5hc3BlY3Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYXNwZWN0LFsiZml0IiwiYWN0dWFsIiwiaGVpZ2h0Iiwibm9uZSIsIndpZHRoIl0pO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5ocmVmPWUuaHJlZnx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnRyYW5zZmVyRW5jb2Rpbmc9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHJhbnNmZXJFbmNvZGluZyxbImJhc2U2NCIsIm5vbmUiLCJwYWNrYWdlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kdG9IVE1MXSgpe2lmKHRoaXMuY29udGVudFR5cGUmJiFwLmhhcyh0aGlzLmNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkpKXJldHVybiBvLkhUTUxSZXN1bHQuRU1QVFk7bGV0IGU9dGhpc1tyLiRnbG9iYWxEYXRhXS5pbWFnZXMmJnRoaXNbci4kZ2xvYmFsRGF0YV0uaW1hZ2VzLmdldCh0aGlzLmhyZWYpO2lmKCFlJiYodGhpcy5ocmVmfHwhdGhpc1tyLiRjb250ZW50XSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTtlfHwiYmFzZTY0IiE9PXRoaXMudHJhbnNmZXJFbmNvZGluZ3x8KGU9KDAsYy5zdHJpbmdUb0J5dGVzKShhdG9iKHRoaXNbci4kY29udGVudF0pKSk7aWYoIWUpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTtpZighdGhpcy5jb250ZW50VHlwZSl7Zm9yKGNvbnN0W3QsYV1vZiBtKWlmKGUubGVuZ3RoPnQubGVuZ3RoJiZ0LmV2ZXJ5KCgodCxhKT0+dD09PWVbYV0pKSl7dGhpcy5jb250ZW50VHlwZT1hO2JyZWFrfWlmKCF0aGlzLmNvbnRlbnRUeXBlKXJldHVybiBvLkhUTUxSZXN1bHQuRU1QVFl9Y29uc3QgdD1uZXcgQmxvYihbZV0se3R5cGU6dGhpcy5jb250ZW50VHlwZX0pO2xldCBhO3N3aXRjaCh0aGlzLmFzcGVjdCl7Y2FzZSJmaXQiOmNhc2UiYWN0dWFsIjpicmVhaztjYXNlImhlaWdodCI6YT17aGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIm5vbmUiOmE9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uid2lkdGgiOmE9e3dpZHRoOiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifX1jb25zdCBpPXRoaXNbci4kZ2V0UGFyZW50XSgpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiaW1nIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUltYWdlIl0sc3R5bGU6YSxzcmM6VVJMLmNyZWF0ZU9iamVjdFVSTCh0KSxhbHQ6aT9hcmlhTGFiZWwoaVtyLiRnZXRQYXJlbnRdKCkpOm51bGx9fSl9fWNsYXNzIEltYWdlRWRpdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImltYWdlRWRpdCIsITApO3RoaXMuZGF0YT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5kYXRhLFsibGluayIsImVtYmVkIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe3JldHVybiJlbWJlZCI9PT10aGlzLmRhdGE/by5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7fX0pOm8uSFRNTFJlc3VsdC5FTVBUWX19Y2xhc3MgSW50ZWdlciBleHRlbmRzIHIuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJpbnRlZ2VyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9cGFyc2VJbnQodGhpc1tyLiRjb250ZW50XS50cmltKCksMTApO3RoaXNbci4kY29udGVudF09aXNOYU4oZSk/bnVsbDplfVtyLiR0b0hUTUxdKGUpe3JldHVybiB2YWx1ZVRvSHRtbChudWxsIT09dGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBJc3N1ZXJzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaXNzdWVycyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBJdGVtcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIml0ZW1zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnNhdmU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnNhdmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9W3IuJHRvSFRNTF0oKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHRoaXNbci4kZ2V0Q2hpbGRyZW5dKCkpZS5wdXNoKHRbci4kdGV4dF0oKSk7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGUpfX10Lkl0ZW1zPUl0ZW1zO2NsYXNzIEtlZXAgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJrZWVwIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjtjb25zdCB0PVsibm9uZSIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXTt0aGlzLmludGFjdD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5pbnRhY3QsdCk7dGhpcy5uZXh0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5leHQsdCk7dGhpcy5wcmV2aW91cz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wcmV2aW91cyx0KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgS2V5VXNhZ2UgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJrZXlVc2FnZSIpO2NvbnN0IHQ9WyIiLCJ5ZXMiLCJubyJdO3RoaXMuY3JsU2lnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5jcmxTaWduLHQpO3RoaXMuZGF0YUVuY2lwaGVybWVudD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5kYXRhRW5jaXBoZXJtZW50LHQpO3RoaXMuZGVjaXBoZXJPbmx5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRlY2lwaGVyT25seSx0KTt0aGlzLmRpZ2l0YWxTaWduYXR1cmU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZGlnaXRhbFNpZ25hdHVyZSx0KTt0aGlzLmVuY2lwaGVyT25seT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5lbmNpcGhlck9ubHksdCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmtleUFncmVlbWVudD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5rZXlBZ3JlZW1lbnQsdCk7dGhpcy5rZXlDZXJ0U2lnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5rZXlDZXJ0U2lnbix0KTt0aGlzLmtleUVuY2lwaGVybWVudD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5rZXlFbmNpcGhlcm1lbnQsdCk7dGhpcy5ub25SZXB1ZGlhdGlvbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5ub25SZXB1ZGlhdGlvbix0KTt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBMaW5lIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibGluZSIsITApO3RoaXMuaGFuZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc2xvcGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuc2xvcGUsWyJcXCIsIi8iXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZWRnZT1udWxsfVtyLiR0b0hUTUxdKCl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksdD10aGlzLmVkZ2V8fG5ldyBFZGdlKHt9KSxhPXRbci4kdG9TdHlsZV0oKSxpPU9iamVjdC5jcmVhdGUobnVsbCksbj0idmlzaWJsZSI9PT10LnByZXNlbmNlP3QudGhpY2tuZXNzOjA7aS5zdHJva2VXaWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykobik7aS5zdHJva2U9YS5jb2xvcjtsZXQgYyxsLGgsdSxkPSIxMDAlIixnPSIxMDAlIjtpZihlLnc8PW4pe1tjLGwsaCx1XT1bIjUwJSIsMCwiNTAlIiwiMTAwJSJdO2Q9aS5zdHJva2VXaWR0aH1lbHNlIGlmKGUuaDw9bil7W2MsbCxoLHVdPVswLCI1MCUiLCIxMDAlIiwiNTAlIl07Zz1pLnN0cm9rZVdpZHRofWVsc2UiXFwiPT09dGhpcy5zbG9wZT9bYyxsLGgsdV09WzAsMCwiMTAwJSIsIjEwMCUiXTpbYyxsLGgsdV09WzAsIjEwMCUiLCIxMDAlIiwwXTtjb25zdCBwPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToibGluZSIsYXR0cmlidXRlczp7eG1sbnM6Zix4MTpjLHkxOmwseDI6aCx5Mjp1LHN0eWxlOml9fV0sYXR0cmlidXRlczp7eG1sbnM6Zix3aWR0aDpkLGhlaWdodDpnLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9fX07aWYoaGFzTWFyZ2luKGUpKXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTp7ZGlzcGxheToiaW5saW5lIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19LGNoaWxkcmVuOltwXX0pO3AuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcyhwKX19Y2xhc3MgTGluZWFyIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibGluZWFyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7ZT1lP2Vbci4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7cmV0dXJuYGxpbmVhci1ncmFkaWVudCgke3RoaXMudHlwZS5yZXBsYWNlKC8oW1JCTFRdKS8sIiAkMSIpLnRvTG93ZXJDYXNlKCl9LCAke2V9LCAke3RoaXMuY29sb3I/dGhpcy5jb2xvcltyLiR0b1N0eWxlXSgpOiIjMDAwMDAwIn0pYH19Y2xhc3MgTG9ja0RvY3VtZW50IGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImxvY2tEb2N1bWVudCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7dGhpc1tyLiRjb250ZW50XT0oMCxvLmdldFN0cmluZ09wdGlvbikodGhpc1tyLiRjb250ZW50XSxbImF1dG8iLCIwIiwiMSJdKX19Y2xhc3MgTWFuaWZlc3QgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJtYW5pZmVzdCIsITApO3RoaXMuYWN0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFjdGlvbixbImluY2x1ZGUiLCJhbGwiLCJleGNsdWRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5yZWY9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE1hcmdpbiBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm1hcmdpbiIsITApO3RoaXMuYm90dG9tSW5zZXQ9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5ib3R0b21JbnNldCwiMCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWZ0SW5zZXQ9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5sZWZ0SW5zZXQsIjAiKTt0aGlzLnJpZ2h0SW5zZXQ9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5yaWdodEluc2V0LCIwIik7dGhpcy50b3BJbnNldD0oMCxvLmdldE1lYXN1cmVtZW50KShlLnRvcEluc2V0LCIwIik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKCl7cmV0dXJue21hcmdpbjooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50b3BJbnNldCkrIiAiKygwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpKyIgIisoMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5ib3R0b21JbnNldCkrIiAiKygwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxlZnRJbnNldCl9fX1jbGFzcyBNZHAgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJtZHAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGVybWlzc2lvbnM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnBlcm1pc3Npb25zLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmU9PjE9PT1lfHwzPT09ZX0pO3RoaXMuc2lnbmF0dXJlVHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zaWduYXR1cmVUeXBlLFsiZmlsbGVyIiwiYXV0aG9yIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgTWVkaXVtIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibWVkaXVtIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmltYWdpbmdCQm94PSgwLG8uZ2V0QkJveCkoZS5pbWFnaW5nQkJveCk7dGhpcy5sb25nPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubG9uZyk7dGhpcy5vcmllbnRhdGlvbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pO3RoaXMuc2hvcnQ9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5zaG9ydCk7dGhpcy5zdG9jaz1lLnN0b2NrfHwiIjt0aGlzLnRyYXlJbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSk7dGhpcy50cmF5T3V0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBNZXNzYWdlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibWVzc2FnZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgTnVtZXJpY0VkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJudW1lcmljRWRpdCIsITApO3RoaXMuaFNjcm9sbFBvbGljeT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksYT10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksaT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6YVtyLiR1aWRdLGRhdGFJZDphW3IuJGRhdGFdPy5bci4kdWlkXXx8YVtyLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoYSkpe2kuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO2kuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOltpXX0pfX1jbGFzcyBPY2N1ciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm9jY3VyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5tYXg9IiIhPT1lLm1heD8oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWF4LGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5taW49IiIhPT1lLm1pbj8oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWluLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W3IuJGNsZWFuXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8wOjEpOyIiPT09dGhpcy5tYXgmJih0aGlzLm1heD0iIj09PXQ/ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8tMToxOnRoaXMubWluKTstMSE9PXRoaXMubWF4JiZ0aGlzLm1heDx0aGlzLm1pbiYmKHRoaXMubWF4PXRoaXMubWluKTsiIj09PXRoaXMuaW5pdGlhbCYmKHRoaXMuaW5pdGlhbD1lIGluc3RhbmNlb2YgVGVtcGxhdGU/MTp0aGlzLm1pbil9fWNsYXNzIE9pZCBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm9pZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPaWRzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwib2lkcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLm9pZD1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgT3ZlcmZsb3cgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJvdmVyZmxvdyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGdldEV4dHJhXSgpe2lmKCF0aGlzW3IuJGV4dHJhXSl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKSx0PXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpLGE9dFtyLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxpPXRbci4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksbj10W3IuJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW3IuJGV4dHJhXT17dGFyZ2V0OmE/LlswXXx8bnVsbCxsZWFkZXI6aT8uWzBdfHxudWxsLHRyYWlsZXI6bj8uWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tyLiRleHRyYV19fWNsYXNzIFBhZ2VBcmVhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGFnZUFyZWEiLCEwKTt0aGlzLmJsYW5rT3JOb3RCbGFuaz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5ibGFua09yTm90QmxhbmssWyJhbnkiLCJibGFuayIsIm5vdEJsYW5rIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbml0aWFsTnVtYmVyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5pbml0aWFsTnVtYmVyLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5udW1iZXJlZD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm9kZE9yRXZlbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vZGRPckV2ZW4sWyJhbnkiLCJldmVuIiwib2RkIl0pO3RoaXMucGFnZVBvc2l0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBhZ2VQb3NpdGlvbixbImFueSIsImZpcnN0IiwibGFzdCIsIm9ubHkiLCJyZXN0Il0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZWRpdW09bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29udGVudEFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc1VzYWJsZV0oKXtpZighdGhpc1tyLiRleHRyYV0pe3RoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZTowfTtyZXR1cm4hMH1yZXR1cm4hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tyLiRleHRyYV0ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXh9W3IuJGNsZWFuUGFnZV0oKXtkZWxldGUgdGhpc1tyLiRleHRyYV19W3IuJGdldE5leHRQYWdlXSgpe3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09e251bWJlck9mVXNlOjB9KTtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpO2lmKCJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW3IuJGlzVXNhYmxlXSgpKXt0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZSs9MTtyZXR1cm4gdGhpc31yZXR1cm4gZVtyLiRnZXROZXh0UGFnZV0oKX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuIHRoaXNbci4kZXh0cmFdLnNwYWNlfHx7d2lkdGg6MCxoZWlnaHQ6MH19W3IuJHRvSFRNTF0oKXt0aGlzW3IuJGV4dHJhXXx8KHRoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7Y29uc3QgZT1bXTt0aGlzW3IuJGV4dHJhXS5jaGlsZHJlbj1lO2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih0aGlzLm1lZGl1bSYmdGhpcy5tZWRpdW0uc2hvcnQmJnRoaXMubWVkaXVtLmxvbmcpe3Qud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLnNob3J0KTt0LmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0ubG9uZyk7dGhpc1tyLiRleHRyYV0uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLnNob3J0LGhlaWdodDp0aGlzLm1lZGl1bS5sb25nfTtpZigibGFuZHNjYXBlIj09PXRoaXMubWVkaXVtLm9yaWVudGF0aW9uKXtjb25zdCBlPXQud2lkdGg7dC53aWR0aD10LmhlaWdodDt0LmhlaWdodD1lO3RoaXNbci4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwic3ViZm9ybSJdKSxpbmNsdWRlOiEwfSk7dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiY29udGVudEFyZWEiXSksaW5jbHVkZTohMH0pO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbci4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1jbGFzcyBQYWdlU2V0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGFnZVNldCIsITApO3RoaXMuZHVwbGV4SW1wb3NpdGlvbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMucGFnZUFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlU2V0PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRjbGVhblBhZ2VdKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5wYWdlQXJlYS5jaGlsZHJlbillW3IuJGNsZWFuUGFnZV0oKTtmb3IoY29uc3QgZSBvZiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pZVtyLiRjbGVhblBhZ2VdKCl9W3IuJGlzVXNhYmxlXSgpe3JldHVybiF0aGlzLm9jY3VyfHwtMT09PXRoaXMub2NjdXIubWF4fHx0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZTx0aGlzLm9jY3VyLm1heH1bci4kZ2V0TmV4dFBhZ2VdKCl7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MSxwYWdlSW5kZXg6LTEscGFnZVNldEluZGV4Oi0xfSk7aWYoIm9yZGVyZWRPY2N1cnJlbmNlIj09PXRoaXMucmVsYXRpb24pe2lmKHRoaXNbci4kZXh0cmFdLnBhZ2VJbmRleCsxPHRoaXMucGFnZUFyZWEuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW3IuJGV4dHJhXS5wYWdlSW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tyLiRleHRyYV0ucGFnZUluZGV4XVtyLiRnZXROZXh0UGFnZV0oKX1pZih0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZVNldC5jaGlsZHJlblt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXhdW3IuJGdldE5leHRQYWdlXSgpfWlmKHRoaXNbci4kaXNVc2FibGVdKCkpe3RoaXNbci4kZXh0cmFdLm51bWJlck9mVXNlKz0xO3RoaXNbci4kZXh0cmFdLnBhZ2VJbmRleD0tMTt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXg9LTE7cmV0dXJuIHRoaXNbci4kZ2V0TmV4dFBhZ2VdKCl9Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKTtpZihlIGluc3RhbmNlb2YgUGFnZVNldClyZXR1cm4gZVtyLiRnZXROZXh0UGFnZV0oKTt0aGlzW3IuJGNsZWFuUGFnZV0oKTtyZXR1cm4gdGhpc1tyLiRnZXROZXh0UGFnZV0oKX1jb25zdCBlPXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5wYWdlTnVtYmVyLHQ9ZSUyPT0wPyJldmVuIjoib2RkIixhPTA9PT1lPyJmaXJzdCI6InJlc3QiO2xldCBpPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ZS5vZGRPckV2ZW49PT10JiZlLnBhZ2VQb3NpdGlvbj09PWEpKTtpZihpKXJldHVybiBpO2k9dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWEpKTtpZihpKXJldHVybiBpO2k9dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9uKSk7cmV0dXJuIGl8fHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bMF19fWNsYXNzIFBhcmEgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwYXJhIiwhMCk7dGhpcy5oQWxpZ249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIjt0aGlzLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiI7dGhpcy5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiO3RoaXMub3JwaGFucz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5wcmVzZXJ2ZT1lLnByZXNlcnZlfHwiIjt0aGlzLnJhZGl4T2Zmc2V0PWUucmFkaXhPZmZzZXQ/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5yYWRpeE9mZnNldCwiMHB0Iik6IiI7dGhpcy5zcGFjZUFib3ZlPWUuc3BhY2VBYm92ZT8oMCxvLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQWJvdmUsIjBwdCIpOiIiO3RoaXMuc3BhY2VCZWxvdz1lLnNwYWNlQmVsb3c/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5zcGFjZUJlbG93LCIwcHQiKToiIjt0aGlzLnRhYkRlZmF1bHQ9ZS50YWJEZWZhdWx0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKHRoaXMudGFiRGVmYXVsdCk6IiI7dGhpcy50YWJTdG9wcz0oZS50YWJTdG9wc3x8IiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKCgoZSx0KT0+dCUyPT0xPygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUpOmUpKTt0aGlzLnRleHRJbmRlbnQ9ZS50ZXh0SW5kZW50PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudGV4dEluZGVudCwiMHB0Iik6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudkFsaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnZBbGlnbixbInRvcCIsImJvdHRvbSIsIm1pZGRsZSJdKTt0aGlzLndpZG93cz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUud2lkb3dzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmh5cGhlbmF0aW9uPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsImhBbGlnbiIpOyIiIT09dGhpcy5tYXJnaW5MZWZ0JiYoZS5wYWRkaW5nTGVmdD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5MZWZ0KSk7IiIhPT10aGlzLm1hcmdpblJpZ2h0JiYoZS5wYWRkaW5naWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5SaWdodCkpOyIiIT09dGhpcy5zcGFjZUFib3ZlJiYoZS5wYWRkaW5nVG9wPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNwYWNlQWJvdmUpKTsiIiE9PXRoaXMuc3BhY2VCZWxvdyYmKGUucGFkZGluZ0JvdHRvbT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUJlbG93KSk7aWYoIiIhPT10aGlzLnRleHRJbmRlbnQpe2UudGV4dEluZGVudD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50ZXh0SW5kZW50KTsoMCxzLmZpeFRleHRJbmRlbnQpKGUpfXRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKTsiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSk7dGhpcy50YWJTdG9wcy5sZW5ndGg7dGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW3IuJHRvU3R5bGVdKCkpO3JldHVybiBlfX1jbGFzcyBQYXNzd29yZEVkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwYXNzd29yZEVkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfX1jbGFzcyBQYXR0ZXJuIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGF0dGVybiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJjcm9zc0hhdGNoIiwiY3Jvc3NEaWFnb25hbCIsImRpYWdvbmFsTGVmdCIsImRpYWdvbmFsUmlnaHQiLCJob3Jpem9udGFsIiwidmVydGljYWwiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtlPWU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjtjb25zdCB0PXRoaXMuY29sb3I/dGhpcy5jb2xvcltyLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixhPSJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IixpPWAke2V9LCR7ZX0gNXB4LCR7dH0gNXB4LCR7dH0gMTBweGA7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJjcm9zc0hhdGNoIjpyZXR1cm5gJHthfSh0byB0b3AsJHtpfSkgJHthfSh0byByaWdodCwke2l9KWA7Y2FzZSJjcm9zc0RpYWdvbmFsIjpyZXR1cm5gJHthfSg0NWRlZywke2l9KSAke2F9KC00NWRlZywke2l9KWA7Y2FzZSJkaWFnb25hbExlZnQiOnJldHVybmAke2F9KDQ1ZGVnLCR7aX0pYDtjYXNlImRpYWdvbmFsUmlnaHQiOnJldHVybmAke2F9KC00NWRlZywke2l9KWA7Y2FzZSJob3Jpem9udGFsIjpyZXR1cm5gJHthfSh0byB0b3AsJHtpfSlgO2Nhc2UidmVydGljYWwiOnJldHVybmAke2F9KHRvIHJpZ2h0LCR7aX0pYH1yZXR1cm4iIn19Y2xhc3MgUGljdHVyZSBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInBpY3R1cmUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUHJvdG8gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwcm90byIsITApO3RoaXMuYXBwZWFyYW5jZUZpbHRlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmFyYz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5hc3Npc3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5iYXJjb2RlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYmluZEl0ZW1zPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYm9va2VuZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ib3JkZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVhaz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQWZ0ZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0JlZm9yZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJ1dHRvbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNhbGN1bGF0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNhcHRpb249bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNlcnRpZmljYXRlcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNoZWNrQnV0dG9uPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY2hvaWNlTGlzdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbG9yPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29tYj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5jb250ZW50QXJlYT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lRWRpdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWZhdWx0VWk9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZXNjPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lZGdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jb2Rpbmc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNvZGluZ3M9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbk1ldGhvZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb25NZXRob2RzPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4ZWN1dGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leHRyYXM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZpbGw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWx0ZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZvbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mb3JtYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5oYW5kbGVyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaHlwaGVuYXRpb249bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlRWRpdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pc3N1ZXJzPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaXRlbXM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5rZWVwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMua2V5VXNhZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5saW5lPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubGluZWFyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubG9ja0RvY3VtZW50PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubWFuaWZlc3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tYXJnaW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZHA9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZWRpdW09bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZXNzYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubnVtZXJpY0VkaXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5vY2N1cj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm9pZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm9pZHM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5vdmVyZmxvdz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnBhZ2VBcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMucGFnZVNldD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnBhcmE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXNzd29yZEVkaXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXR0ZXJuPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMucGljdHVyZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJhZGlhbD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbnM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWN0YW5nbGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWY9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zY3JpcHQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmF0dXJlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmluZz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNvbGlkPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3BlYWs9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdGlwcGxlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE5zPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3VibWl0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRleHRFZGl0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWVTdGFtcD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRvb2xUaXA9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnVpPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudmFsaWRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy52YWx1ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnZhcmlhYmxlcz1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgUmFkaWFsIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicmFkaWFsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7ZT1lP2Vbci4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7Y29uc3QgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCI7cmV0dXJuYHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgY2VudGVyLCAkeyJ0b0VkZ2UiPT09dGhpcy50eXBlP2Ake2V9LCR7dH1gOmAke3R9LCR7ZX1gfSlgfX1jbGFzcyBSZWFzb24gZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJyZWFzb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUmVhc29ucyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInJlYXNvbnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5yZWFzb249bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFJlY3RhbmdsZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInJlY3RhbmdsZSIsITApO3RoaXMuaGFuZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5maWxsPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXMuZWRnZS5jaGlsZHJlbi5sZW5ndGg/dGhpcy5lZGdlLmNoaWxkcmVuWzBdOm5ldyBFZGdlKHt9KSx0PWVbci4kdG9TdHlsZV0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZT9PYmplY3QuYXNzaWduKGEsdGhpcy5maWxsW3IuJHRvU3R5bGVdKCkpOmEuZmlsbD0idHJhbnNwYXJlbnQiO2Euc3Ryb2tlV2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCk7YS5zdHJva2U9dC5jb2xvcjtjb25zdCBpPSh0aGlzLmNvcm5lci5jaGlsZHJlbi5sZW5ndGg/dGhpcy5jb3JuZXIuY2hpbGRyZW5bMF06bmV3IENvcm5lcih7fSkpW3IuJHRvU3R5bGVdKCksbj17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOmYsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDppLnJhZGl1cyxyeTppLnJhZGl1cyxzdHlsZTphfX1dLGF0dHJpYnV0ZXM6e3htbG5zOmYsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtpZihoYXNNYXJnaW4odGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpKSlyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbbl19KTtuLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Mobil9fWNsYXNzIFJlZkVsZW1lbnQgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJyZWYiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU2NyaXB0IGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic2NyaXB0Iik7dGhpcy5iaW5kaW5nPWUuYmluZGluZ3x8IiI7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucnVuQXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucnVuQXQsWyJjbGllbnQiLCJib3RoIiwic2VydmVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU2V0UHJvcGVydHkgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzZXRQcm9wZXJ0eSIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiJ9fXQuU2V0UHJvcGVydHk9U2V0UHJvcGVydHk7Y2xhc3MgU2lnbkRhdGEgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzaWduRGF0YSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsic2lnbiIsImNsZWFyIiwidmVyaWZ5Il0pO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZmlsdGVyPW51bGw7dGhpcy5tYW5pZmVzdD1udWxsfX1jbGFzcyBTaWduYXR1cmUgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzaWduYXR1cmUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsiUERGMS4zIiwiUERGMS42Il0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLm1hbmlmZXN0PW51bGw7dGhpcy5tYXJnaW49bnVsbH19Y2xhc3MgU2lnbmluZyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInNpZ25pbmciLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgU29saWQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzb2xpZCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKGUpe3JldHVybiBlP2Vbci4kdG9TdHlsZV0oKToiI0ZGRkZGRiJ9fWNsYXNzIFNwZWFrIGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic3BlYWsiKTt0aGlzLmRpc2FibGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRpc2FibGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJpb3JpdHk9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJpb3JpdHksWyJjdXN0b20iLCJjYXB0aW9uIiwibmFtZSIsInRvb2xUaXAiXSk7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU3RpcHBsZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInN0aXBwbGUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmF0ZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucmF0ZSxkZWZhdWx0VmFsdWU6NTAsdmFsaWRhdGU6ZT0+ZT49MCYmZTw9MTAwfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtjb25zdCB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIGMuVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1jbGFzcyBTdWJmb3JtIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic3ViZm9ybSIsITApO3RoaXMuYWNjZXNzPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pO3RoaXMuYWxsb3dNYWNybz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dNYWNybyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuYW5jaG9yVHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmNvbHVtbldpZHRocz0oZS5jb2x1bW5XaWR0aHN8fCIiKS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZT0+Ii0xIj09PWU/LTE6KDAsby5nZXRNZWFzdXJlbWVudCkoZSkpKTt0aGlzLmg9ZS5oPygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiI7dGhpcy5oQWxpZ249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGF5b3V0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSk7dGhpcy5sb2NhbGU9ZS5sb2NhbGV8fCIiO3RoaXMubWF4SD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heEgsIjBwdCIpO3RoaXMubWF4Vz0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heFcsIjBwdCIpO3RoaXMubWVyZ2VNb2RlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm1lcmdlTW9kZSxbImNvbnN1bWVEYXRhIiwibWF0Y2hUZW1wbGF0ZSJdKTt0aGlzLm1pbkg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy5yZXN0b3JlU3RhdGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucmVzdG9yZVN0YXRlLFsibWFudWFsIiwiYXV0byJdKTt0aGlzLnNjb3BlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNjb3BlLFsibmFtZSIsIm5vbmUiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYmluZD1udWxsO3RoaXMuYm9va2VuZD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5icmVhaz1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmtlZXA9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMub2NjdXI9bnVsbDt0aGlzLm92ZXJmbG93PW51bGw7dGhpcy5wYWdlU2V0PW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy52YXJpYWJsZXM9bnVsbDt0aGlzLmFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0FmdGVyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtCZWZvcmU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5jb25uZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnByb3RvPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2V0UHJvcGVydHk9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgci5YRkFPYmplY3RBcnJheX1bci4kZ2V0U3ViZm9ybVBhcmVudF0oKXtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpO3JldHVybiBlIGluc3RhbmNlb2YgU3ViZm9ybVNldD9lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk6ZX1bci4kaXNCaW5kYWJsZV0oKXtyZXR1cm4hMH1bci4kaXNUaGVyZU1vcmVXaWR0aF0oKXtyZXR1cm4gdGhpcy5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmdGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lPjB8fHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGlzVGhlcmVNb3JlV2lkdGhdKCl9KltyLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bci4kZmx1c2hIVE1MXSgpe3JldHVybigwLG4uZmx1c2hIVE1MKSh0aGlzKX1bci4kYWRkSFRNTF0oZSx0KXsoMCxuLmFkZEhUTUwpKHRoaXMsZSx0KX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuKDAsbi5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9W3IuJGlzU3BsaXR0YWJsZV0oKXtjb25zdCBlPXRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZighZVtyLiRpc1NwbGl0dGFibGVdKCkpcmV0dXJuITE7aWYodm9pZCAwIT09dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZSlyZXR1cm4gdGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZTtpZigicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZih0aGlzLmtlZXAmJiJub25lIiE9PXRoaXMua2VlcC5pbnRhY3Qpe3RoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYoZS5sYXlvdXQ/LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbci4kZXh0cmFdLm51bWJlckluTGluZSlyZXR1cm4hMTt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSEwO3JldHVybiEwfVtyLiR0b0hUTUxdKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKHRoaXMuYnJlYWspe2lmKCJhdXRvIiE9PXRoaXMuYnJlYWsuYWZ0ZXJ8fCIiIT09dGhpcy5icmVhay5hZnRlclRhcmdldCl7Y29uc3QgZT1uZXcgQnJlYWtBZnRlcih7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmFmdGVyLHRhcmdldDp0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO2Vbci4kZ2xvYmFsRGF0YV09dGhpc1tyLiRnbG9iYWxEYXRhXTt0aGlzW3IuJGFwcGVuZENoaWxkXShlKTt0aGlzLmJyZWFrQWZ0ZXIucHVzaChlKX1pZigiYXV0byIhPT10aGlzLmJyZWFrLmJlZm9yZXx8IiIhPT10aGlzLmJyZWFrLmJlZm9yZVRhcmdldCl7Y29uc3QgZT1uZXcgQnJlYWtCZWZvcmUoe3RhcmdldFR5cGU6dGhpcy5icmVhay5iZWZvcmUsdGFyZ2V0OnRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO2Vbci4kZ2xvYmFsRGF0YV09dGhpc1tyLiRnbG9iYWxEYXRhXTt0aGlzW3IuJGFwcGVuZENoaWxkXShlKTt0aGlzLmJyZWFrQmVmb3JlLnB1c2goZSl9aWYoIiIhPT10aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0KXtjb25zdCBlPW5ldyBPdmVyZmxvdyh7dGFyZ2V0OnRoaXMuYnJlYWsub3ZlcmZsb3dUYXJnZXQsbGVhZGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dMZWFkZXIsdHJhaWxlcjp0aGlzLmJyZWFrLm92ZXJmbG93VHJhaWxlcn0pO2Vbci4kZ2xvYmFsRGF0YV09dGhpc1tyLiRnbG9iYWxEYXRhXTt0aGlzW3IuJGFwcGVuZENoaWxkXShlKTt0aGlzLm92ZXJmbG93LnB1c2goZSl9dGhpc1tyLiRyZW1vdmVDaGlsZF0odGhpcy5icmVhayk7dGhpcy5icmVhaz1udWxsfWlmKCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2UpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTsodGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+MXx8dGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aD4xKSYmKDAsYy53YXJuKSgiWEZBIC0gU2V2ZXJhbCBicmVha0JlZm9yZSBvciBicmVha0FmdGVyIGluIHN1YmZvcm1zOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtpZih0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7Y29uc3QgZT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKGhhbmRsZUJyZWFrKGUpKXJldHVybiBvLkhUTUxSZXN1bHQuYnJlYWtOb2RlKGUpfWlmKHRoaXNbci4kZXh0cmFdPy5hZnRlckJyZWFrQWZ0ZXIpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTsoMCxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO2NvbnN0IHQ9W10sYT17aWQ6dGhpc1tyLiR1aWRdLGNsYXNzOltdfTsoMCxzLnNldEFjY2VzcykodGhpcyxhLmNsYXNzKTt0aGlzW3IuJGV4dHJhXXx8KHRoaXNbci4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCkpO09iamVjdC5hc3NpZ24odGhpc1tyLiRleHRyYV0se2NoaWxkcmVuOnQsbGluZTpudWxsLGF0dHJpYnV0ZXM6YSxhdHRlbXB0OjAsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7Y29uc3QgaT10aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKSxsPWlbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSxoPXRoaXNbci4kaXNTcGxpdHRhYmxlXSgpO2h8fHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxuLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkU7Y29uc3QgdT1uZXcgU2V0KFsiYXJlYSIsImRyYXciLCJleGNsR3JvdXAiLCJmaWVsZCIsInN1YmZvcm0iLCJzdWJmb3JtU2V0Il0pO2lmKHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgZT10aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3RoaXNbci4kZXh0cmFdLmNvbHVtbldpZHRocz1lO3RoaXNbci4kZXh0cmFdLmN1cnJlbnRDb2x1bW49MH19Y29uc3QgZD0oMCxzLnRvU3R5bGUpKHRoaXMsImFuY2hvclR5cGUiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsImJvcmRlciIsIm1hcmdpbiIsImhBbGlnbiIpLGY9WyJ4ZmFTdWJmb3JtIl0sZz0oMCxzLmxheW91dENsYXNzKSh0aGlzKTtnJiZmLnB1c2goZyk7YS5zdHlsZT1kO2EuY2xhc3M9Zjt0aGlzLm5hbWUmJihhLnhmYU5hbWU9dGhpcy5uYW1lKTtpZih0aGlzLm92ZXJmbG93KXtjb25zdCB0PXRoaXMub3ZlcmZsb3dbci4kZ2V0RXh0cmFdKCk7aWYodC5hZGRMZWFkZXIpe3QuYWRkTGVhZGVyPSExO2hhbmRsZU92ZXJmbG93KHRoaXMsdC5sZWFkZXIsZSl9fXRoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgcD0ibHItdGIiPT09dGhpcy5sYXlvdXR8fCJybC10YiI9PT10aGlzLmxheW91dCxtPXA/MjoxO2Zvcig7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdDxtO3RoaXNbci4kZXh0cmFdLmF0dGVtcHQrKyl7cCYmMT09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJih0aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmU9MCk7Y29uc3QgZT10aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOnUsaW5jbHVkZTohMH0pO2lmKGUuc3VjY2VzcylicmVhaztpZihlLmlzQnJlYWsoKSl7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBlfWlmKHAmJjA9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiYwPT09dGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lJiYhaVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PW07YnJlYWt9fXRoaXNbci4kcG9wUGFyYV0oKTtofHx1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT1sO2lmKHRoaXNbci4kZXh0cmFdLmF0dGVtcHQ9PT1tKXt0aGlzLm92ZXJmbG93JiYodGhpc1tyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm92ZXJmbG93Tm9kZT10aGlzLm92ZXJmbG93KTtofHxkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfWlmKHRoaXMub3ZlcmZsb3cpe2NvbnN0IHQ9dGhpcy5vdmVyZmxvd1tyLiRnZXRFeHRyYV0oKTtpZih0LmFkZFRyYWlsZXIpe3QuYWRkVHJhaWxlcj0hMTtoYW5kbGVPdmVyZmxvdyh0aGlzLHQudHJhaWxlcixlKX19bGV0IGI9MCx5PTA7aWYodGhpcy5tYXJnaW4pe2I9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7eT10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldH1jb25zdCB3PU1hdGgubWF4KHRoaXNbci4kZXh0cmFdLndpZHRoK2IsdGhpcy53fHwwKSxTPU1hdGgubWF4KHRoaXNbci4kZXh0cmFdLmhlaWdodCt5LHRoaXMuaHx8MCkseD1bdGhpcy54LHRoaXMueSx3LFNdOyIiPT09dGhpcy53JiYoZC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodykpOyIiPT09dGhpcy5oJiYoZC5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKFMpKTtpZigoIjBweCI9PT1kLndpZHRofHwiMHB4Ij09PWQuaGVpZ2h0KSYmMD09PXQubGVuZ3RoKXJldHVybiBvLkhUTUxSZXN1bHQuRU1QVFk7Y29uc3QgQz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmEsY2hpbGRyZW46dH07YXBwbHlBc3Npc3QodGhpcyxhKTtjb25zdCBrPW8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxDKSx4KTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXtjb25zdCBlPXRoaXMuYnJlYWtBZnRlci5jaGlsZHJlblswXTtpZihoYW5kbGVCcmVhayhlKSl7dGhpc1tyLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyPWs7cmV0dXJuIG8uSFRNTFJlc3VsdC5icmVha05vZGUoZSl9fWRlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4ga319Y2xhc3MgU3ViZm9ybVNldCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInN1YmZvcm1TZXQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsYXRpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucmVsYXRpb24sWyJvcmRlcmVkIiwiY2hvaWNlIiwidW5vcmRlcmVkIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9va2VuZD1udWxsO3RoaXMuYnJlYWs9bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMub2NjdXI9bnVsbDt0aGlzLm92ZXJmbG93PW51bGw7dGhpcy5icmVha0FmdGVyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtCZWZvcmU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgci5YRkFPYmplY3RBcnJheX0qW3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpe2xldCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpO2Zvcig7IShlIGluc3RhbmNlb2YgU3ViZm9ybSk7KWU9ZVtyLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGV9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITB9fWNsYXNzIFN1YmplY3RETiBleHRlbmRzIHIuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdWJqZWN0RE4iKTt0aGlzLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXt0aGlzW3IuJGNvbnRlbnRdPW5ldyBNYXAodGhpc1tyLiRjb250ZW50XS5zcGxpdCh0aGlzLmRlbGltaXRlcikubWFwKChlPT57KGU9ZS5zcGxpdCgiPSIsMikpWzBdPWVbMF0udHJpbSgpO3JldHVybiBlfSkpKX19Y2xhc3MgU3ViamVjdEROcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInN1YmplY3RETnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zdWJqZWN0RE49bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFN1Ym1pdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInN1Ym1pdCIsITApO3RoaXMuZW1iZWRQREY9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVtYmVkUERGLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5mb3JtYXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGV4dEVuY29kaW5nPSgwLG8uZ2V0S2V5d29yZCkoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+WyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnhkcENvbnRlbnQ9ZS54ZHBDb250ZW50fHwiIjt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbkRhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidGVtcGxhdGUiLCEwKTt0aGlzLmJhc2VQcm9maWxlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmJhc2VQcm9maWxlLFsiZnVsbCIsImludGVyYWN0aXZlRm9ybXMiXSk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnN1YmZvcm09bmV3IHIuWEZBT2JqZWN0QXJyYXl9W3IuJGZpbmFsaXplXSgpezA9PT10aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoJiYoMCxjLndhcm4pKCJYRkEgLSBObyBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlLiIpO3RoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTImJigwLGMud2FybikoIlhGQSAtIFNldmVyYWwgc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZTogcGxlYXNlIGZpbGUgYSBidWcuIik7dGhpc1tyLiR0YWJJbmRleF09NWUzfVtyLiRpc1NwbGl0dGFibGVdKCl7cmV0dXJuITB9W3IuJHNlYXJjaE5vZGVdKGUsdCl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiIyIpP1t0aGlzW3IuJGlkc10uZ2V0KGUuc2xpY2UoMSkpXTooMCx1LnNlYXJjaE5vZGUpKHRoaXMsdCxlLCEwLCEwKX0qW3IuJHRvUGFnZXNdKCl7aWYoIXRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSk7dGhpc1tyLiRleHRyYV09e292ZXJmbG93Tm9kZTpudWxsLGZpcnN0VW5zcGxpdHRhYmxlOm51bGwsY3VycmVudENvbnRlbnRBcmVhOm51bGwsY3VycmVudFBhZ2VBcmVhOm51bGwsbm9MYXlvdXRGYWlsdXJlOiExLHBhZ2VOdW1iZXI6MSxwYWdlUG9zaXRpb246ImZpcnN0IixvZGRPckV2ZW46Im9kZCIsYmxhbmtPck5vdEJsYW5rOiJub25CbGFuayIscGFyYVN0YWNrOltdfTtjb25zdCBlPXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXTtlLnBhZ2VTZXRbci4kY2xlYW5QYWdlXSgpO2NvbnN0IHQ9ZS5wYWdlU2V0LnBhZ2VBcmVhLmNoaWxkcmVuLGE9e25hbWU6ImRpdiIsY2hpbGRyZW46W119O2xldCBpPW51bGwsbj1udWxsLHM9bnVsbDtpZihlLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7bj1lLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO3M9bi50YXJnZXR9ZWxzZSBpZihlLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZlLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXtuPWUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXTtzPW4udGFyZ2V0fWVsc2UgaWYoZS5icmVhaz8uYmVmb3JlVGFyZ2V0KXtuPWUuYnJlYWs7cz1uLmJlZm9yZVRhcmdldH1lbHNlIGlmKGUuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJmUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhaz8uYmVmb3JlVGFyZ2V0KXtuPWUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhaztzPW4uYmVmb3JlVGFyZ2V0fWlmKG4pe2NvbnN0IGU9dGhpc1tyLiRzZWFyY2hOb2RlXShzLG5bci4kZ2V0UGFyZW50XSgpKTtpZihlIGluc3RhbmNlb2YgUGFnZUFyZWEpe2k9ZTtuW3IuJGV4dHJhXT17fX19aXx8KGk9dFswXSk7aVtyLiRleHRyYV09e251bWJlck9mVXNlOjF9O2NvbnN0IGw9aVtyLiRnZXRQYXJlbnRdKCk7bFtyLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4OmwucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKSxwYWdlU2V0SW5kZXg6MH07bGV0IGgsdT1udWxsLGQ9bnVsbCxmPSEwLGc9MCxwPTA7Zm9yKDs7KXtpZihmKWc9MDtlbHNle2EuY2hpbGRyZW4ucG9wKCk7aWYoMz09KytnKXsoMCxjLndhcm4pKCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuIik7cmV0dXJuIGF9fWg9bnVsbDt0aGlzW3IuJGV4dHJhXS5jdXJyZW50UGFnZUFyZWE9aTtjb25zdCB0PWlbci4kdG9IVE1MXSgpLmh0bWw7YS5jaGlsZHJlbi5wdXNoKHQpO2lmKHUpe3RoaXNbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMDt0LmNoaWxkcmVuLnB1c2godVtyLiR0b0hUTUxdKGlbci4kZXh0cmFdLnNwYWNlKS5odG1sKTt1PW51bGx9aWYoZCl7dGhpc1tyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwO3QuY2hpbGRyZW4ucHVzaChkW3IuJHRvSFRNTF0oaVtyLiRleHRyYV0uc3BhY2UpLmh0bWwpO2Q9bnVsbH1jb25zdCBuPWkuY29udGVudEFyZWEuY2hpbGRyZW4scz10LmNoaWxkcmVuLmZpbHRlcigoZT0+ZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKCJ4ZmFDb250ZW50YXJlYSIpKSk7Zj0hMTt0aGlzW3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1udWxsO3RoaXNbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMTtjb25zdCBmbHVzaD10PT57Y29uc3QgYT1lW3IuJGZsdXNoSFRNTF0oKTtpZihhKXtmfHw9YS5jaGlsZHJlbj8ubGVuZ3RoPjA7c1t0XS5jaGlsZHJlbi5wdXNoKGEpfX07Zm9yKGxldCB0PXAsaT1uLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPXRoaXNbci4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1uW3RdLG89e3dpZHRoOmkudyxoZWlnaHQ6aS5ofTtwPTA7aWYodSl7c1t0XS5jaGlsZHJlbi5wdXNoKHVbci4kdG9IVE1MXShvKS5odG1sKTt1PW51bGx9aWYoZCl7c1t0XS5jaGlsZHJlbi5wdXNoKGRbci4kdG9IVE1MXShvKS5odG1sKTtkPW51bGx9Y29uc3QgYz1lW3IuJHRvSFRNTF0obyk7aWYoYy5zdWNjZXNzKXtpZihjLmh0bWwpe2Z8fD1jLmh0bWwuY2hpbGRyZW4/Lmxlbmd0aD4wO3NbdF0uY2hpbGRyZW4ucHVzaChjLmh0bWwpfWVsc2UhZiYmYS5jaGlsZHJlbi5sZW5ndGg+MSYmYS5jaGlsZHJlbi5wb3AoKTtyZXR1cm4gYX1pZihjLmlzQnJlYWsoKSl7Y29uc3QgZT1jLmJyZWFrTm9kZTtmbHVzaCh0KTtpZigiYXV0byI9PT1lLnRhcmdldFR5cGUpY29udGludWU7aWYoZS5sZWFkZXIpe3U9dGhpc1tyLiRzZWFyY2hOb2RlXShlLmxlYWRlcixlW3IuJGdldFBhcmVudF0oKSk7dT11P3VbMF06bnVsbH1pZihlLnRyYWlsZXIpe2Q9dGhpc1tyLiRzZWFyY2hOb2RlXShlLnRyYWlsZXIsZVtyLiRnZXRQYXJlbnRdKCkpO2Q9ZD9kWzBdOm51bGx9aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSl7aD1lW3IuJGV4dHJhXS50YXJnZXQ7dD0xLzB9ZWxzZSBpZihlW3IuJGV4dHJhXS50YXJnZXQpe2g9ZVtyLiRleHRyYV0udGFyZ2V0O3A9ZVtyLiRleHRyYV0uaW5kZXgrMTt0PTEvMH1lbHNlIHQ9ZVtyLiRleHRyYV0uaW5kZXh9ZWxzZSBpZih0aGlzW3IuJGV4dHJhXS5vdmVyZmxvd05vZGUpe2NvbnN0IGU9dGhpc1tyLiRleHRyYV0ub3ZlcmZsb3dOb2RlO3RoaXNbci4kZXh0cmFdLm92ZXJmbG93Tm9kZT1udWxsO2NvbnN0IGE9ZVtyLiRnZXRFeHRyYV0oKSxpPWEudGFyZ2V0O2EuYWRkTGVhZGVyPW51bGwhPT1hLmxlYWRlcjthLmFkZFRyYWlsZXI9bnVsbCE9PWEudHJhaWxlcjtmbHVzaCh0KTtjb25zdCBzPXQ7dD0xLzA7aWYoaSBpbnN0YW5jZW9mIFBhZ2VBcmVhKWg9aTtlbHNlIGlmKGkgaW5zdGFuY2VvZiBDb250ZW50QXJlYSl7Y29uc3QgZT1uLmluZGV4T2YoaSk7aWYoLTEhPT1lKWU+cz90PWUtMTpwPWU7ZWxzZXtoPWlbci4kZ2V0UGFyZW50XSgpO3A9aC5jb250ZW50QXJlYS5jaGlsZHJlbi5pbmRleE9mKGkpfX19ZWxzZSBmbHVzaCh0KX10aGlzW3IuJGV4dHJhXS5wYWdlTnVtYmVyKz0xO2gmJihoW3IuJGlzVXNhYmxlXSgpP2hbci4kZXh0cmFdLm51bWJlck9mVXNlKz0xOmg9bnVsbCk7aT1ofHxpW3IuJGdldE5leHRQYWdlXSgpO3lpZWxkIG51bGx9fX10LlRlbXBsYXRlPVRlbXBsYXRlO2NsYXNzIFRleHQgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidGV4dCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tYXhDaGFycz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWF4Q2hhcnMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuITB9W3IuJG9uQ2hpbGRdKGUpe2lmKGVbci4kbmFtZXNwYWNlSWRdPT09aS5OYW1lc3BhY2VJZHMueGh0bWwuaWQpe3RoaXNbci4kY29udGVudF09ZTtyZXR1cm4hMH0oMCxjLndhcm4pKGBYRkEgLSBJbnZhbGlkIGNvbnRlbnQgaW4gVGV4dDogJHtlW3IuJG5vZGVOYW1lXX0uYCk7cmV0dXJuITF9W3IuJG9uVGV4dF0oZSl7dGhpc1tyLiRjb250ZW50XWluc3RhbmNlb2Ygci5YRkFPYmplY3R8fHN1cGVyW3IuJG9uVGV4dF0oZSl9W3IuJGZpbmFsaXplXSgpeyJzdHJpbmciPT10eXBlb2YgdGhpc1tyLiRjb250ZW50XSYmKHRoaXNbci4kY29udGVudF09dGhpc1tyLiRjb250ZW50XS5yZXBsYWNlQWxsKCJcclxuIiwiXG4iKSl9W3IuJGdldEV4dHJhXSgpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI5XHUyMDI4XG5dLykucmVkdWNlKCgoZSx0KT0+e3QmJmUucHVzaCh0KTtyZXR1cm4gZX0pLFtdKS5qb2luKCJcbiIpOnRoaXNbci4kY29udGVudF1bci4kdGV4dF0oKX1bci4kdG9IVE1MXShlKXtpZigic3RyaW5nIj09dHlwZW9mIHRoaXNbci4kY29udGVudF0pe2NvbnN0IGU9dmFsdWVUb0h0bWwodGhpc1tyLiRjb250ZW50XSkuaHRtbDtpZih0aGlzW3IuJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKSl7ZS5uYW1lPSJkaXYiO2UuY2hpbGRyZW49W107dGhpc1tyLiRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKChlPT5lLnNwbGl0KC9bXHUyMDI4XG5dLykucmVkdWNlKCgoZSx0KT0+e2UucHVzaCh7bmFtZToic3BhbiIsdmFsdWU6dH0se25hbWU6ImJyIn0pO3JldHVybiBlfSksW10pKSkuZm9yRWFjaCgodD0+e2UuY2hpbGRyZW4ucHVzaCh7bmFtZToicCIsY2hpbGRyZW46dH0pfSkpfWVsc2UgaWYoL1tcdTIwMjhcbl0vLnRlc3QodGhpc1tyLiRjb250ZW50XSkpe2UubmFtZT0iZGl2IjtlLmNoaWxkcmVuPVtdO3RoaXNbci4kY29udGVudF0uc3BsaXQoL1tcdTIwMjhcbl0vKS5mb3JFYWNoKCh0PT57ZS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSl9KSl9cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGUpfXJldHVybiB0aGlzW3IuJGNvbnRlbnRdW3IuJHRvSFRNTF0oZSl9fXQuVGV4dD1UZXh0O2NsYXNzIFRleHRFZGl0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidGV4dEVkaXQiLCEwKTt0aGlzLmFsbG93UmljaFRleHQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFsbG93UmljaFRleHQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubXVsdGlMaW5lPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5tdWx0aUxpbmUsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PjA9PT1lfHwxPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZTY3JvbGxQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY29tYj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpO2xldCBhO2NvbnN0IGk9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpOyIiPT09dGhpcy5tdWx0aUxpbmUmJih0aGlzLm11bHRpTGluZT1pIGluc3RhbmNlb2YgRHJhdz8xOjApO2E9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOmlbci4kZGF0YV0/LltyLiR1aWRdfHxpW3IuJHVpZF0sZmllbGRJZDppW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoaSksImFyaWEtcmVxdWlyZWQiOiExfX06e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixkYXRhSWQ6aVtyLiRkYXRhXT8uW3IuJHVpZF18fGlbci4kdWlkXSxmaWVsZElkOmlbci4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChpKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtpZihpc1JlcXVpcmVkKGkpKXthLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMDthLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITB9cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19Y2xhc3MgVGltZSBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRpbWUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW3IuJGNvbnRlbnRdLnRyaW0oKTt0aGlzW3IuJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBUaW1lU3RhbXAgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ0aW1lU3RhbXAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc2VydmVyPWUuc2VydmVyfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBUb29sVGlwIGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidG9vbFRpcCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVHJhdmVyc2FsIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidHJhdmVyc2FsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnRyYXZlcnNlPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBUcmF2ZXJzZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRyYXZlcnNlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm9wZXJhdGlvbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJuZXh0IiwiYmFjayIsImRvd24iLCJmaXJzdCIsImxlZnQiLCJyaWdodCIsInVwIl0pO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnNjcmlwdD1udWxsfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMub3BlcmF0aW9ufVtyLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiExfX1jbGFzcyBVaSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInVpIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnBpY3R1cmU9bnVsbDt0aGlzLmJhcmNvZGU9bnVsbDt0aGlzLmJ1dHRvbj1udWxsO3RoaXMuY2hlY2tCdXR0b249bnVsbDt0aGlzLmNob2ljZUxpc3Q9bnVsbDt0aGlzLmRhdGVUaW1lRWRpdD1udWxsO3RoaXMuZGVmYXVsdFVpPW51bGw7dGhpcy5pbWFnZUVkaXQ9bnVsbDt0aGlzLm51bWVyaWNFZGl0PW51bGw7dGhpcy5wYXNzd29yZEVkaXQ9bnVsbDt0aGlzLnNpZ25hdHVyZT1udWxsO3RoaXMudGV4dEVkaXQ9bnVsbH1bci4kZ2V0RXh0cmFdKCl7aWYodm9pZCAwPT09dGhpc1tyLiRleHRyYV0pe2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiZXh0cmFzIj09PWV8fCJwaWN0dXJlIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiByLlhGQU9iamVjdCl7dGhpc1tyLiRleHRyYV09dDtyZXR1cm4gdH19dGhpc1tyLiRleHRyYV09bnVsbH1yZXR1cm4gdGhpc1tyLiRleHRyYV19W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD10aGlzW3IuJGdldEV4dHJhXSgpO3JldHVybiB0P3Rbci4kdG9IVE1MXShlKTpvLkhUTUxSZXN1bHQuRU1QVFl9fWNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidmFsaWRhdGUiLCEwKTt0aGlzLmZvcm1hdFRlc3Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0VGVzdCxbIndhcm5pbmciLCJkaXNhYmxlZCIsImVycm9yIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5udWxsVGVzdD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5udWxsVGVzdCxbImRpc2FibGVkIiwiZXJyb3IiLCJ3YXJuaW5nIl0pO3RoaXMuc2NyaXB0VGVzdD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY3JpcHRUZXN0LFsiZXJyb3IiLCJkaXNhYmxlZCIsIndhcm5pbmciXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZXNzYWdlPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgVmFsdWUgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ2YWx1ZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVycmlkZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcnJpZGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmFyYz1udWxsO3RoaXMuYm9vbGVhbj1udWxsO3RoaXMuZGF0ZT1udWxsO3RoaXMuZGF0ZVRpbWU9bnVsbDt0aGlzLmRlY2ltYWw9bnVsbDt0aGlzLmV4RGF0YT1udWxsO3RoaXMuZmxvYXQ9bnVsbDt0aGlzLmltYWdlPW51bGw7dGhpcy5pbnRlZ2VyPW51bGw7dGhpcy5saW5lPW51bGw7dGhpcy5yZWN0YW5nbGU9bnVsbDt0aGlzLnRleHQ9bnVsbDt0aGlzLnRpbWU9bnVsbH1bci4kc2V0VmFsdWVdKGUpe2NvbnN0IHQ9dGhpc1tyLiRnZXRQYXJlbnRdKCk7aWYodCBpbnN0YW5jZW9mIEZpZWxkJiZ0LnVpPy5pbWFnZUVkaXQpe2lmKCF0aGlzLmltYWdlKXt0aGlzLmltYWdlPW5ldyBJbWFnZSh7fSk7dGhpc1tyLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSl9dGhpcy5pbWFnZVtyLiRjb250ZW50XT1lW3IuJGNvbnRlbnRdO3JldHVybn1jb25zdCBhPWVbci4kbm9kZU5hbWVdO2lmKG51bGw9PT10aGlzW2FdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiByLlhGQU9iamVjdCl7dGhpc1tlXT1udWxsO3RoaXNbci4kcmVtb3ZlQ2hpbGRdKHQpfX10aGlzW2Vbci4kbm9kZU5hbWVdXT1lO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpfWVsc2UgdGhpc1thXVtyLiRjb250ZW50XT1lW3IuJGNvbnRlbnRdfVtyLiR0ZXh0XSgpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbci4kY29udGVudF0/dGhpcy5leERhdGFbci4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW3IuJGNvbnRlbnRdW3IuJHRleHRdKCkudHJpbSgpO2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiaW1hZ2UiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KXJldHVybih0W3IuJGNvbnRlbnRdfHwiIikudG9TdHJpbmcoKS50cmltKCl9cmV0dXJuIG51bGx9W3IuJHRvSFRNTF0oZSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGE9dGhpc1t0XTtpZihhIGluc3RhbmNlb2Ygci5YRkFPYmplY3QpcmV0dXJuIGFbci4kdG9IVE1MXShlKX1yZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZfX10LlZhbHVlPVZhbHVlO2NsYXNzIFZhcmlhYmxlcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInZhcmlhYmxlcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm1hbmlmZXN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2NyaXB0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9W3IuJGlzVHJhbnNwYXJlbnRdKCl7cmV0dXJuITB9fWNsYXNzIFRlbXBsYXRlTmFtZXNwYWNle3N0YXRpY1tpLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihUZW1wbGF0ZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSl7Y29uc3QgYT1UZW1wbGF0ZU5hbWVzcGFjZVtlXSh0KTthW3IuJHNldFNldEF0dHJpYnV0ZXNdKHQpO3JldHVybiBhfX1zdGF0aWMgYXBwZWFyYW5jZUZpbHRlcihlKXtyZXR1cm4gbmV3IEFwcGVhcmFuY2VGaWx0ZXIoZSl9c3RhdGljIGFyYyhlKXtyZXR1cm4gbmV3IEFyYyhlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IEFyZWEoZSl9c3RhdGljIGFzc2lzdChlKXtyZXR1cm4gbmV3IEFzc2lzdChlKX1zdGF0aWMgYmFyY29kZShlKXtyZXR1cm4gbmV3IEJhcmNvZGUoZSl9c3RhdGljIGJpbmQoZSl7cmV0dXJuIG5ldyBCaW5kKGUpfXN0YXRpYyBiaW5kSXRlbXMoZSl7cmV0dXJuIG5ldyBCaW5kSXRlbXMoZSl9c3RhdGljIGJvb2tlbmQoZSl7cmV0dXJuIG5ldyBCb29rZW5kKGUpfXN0YXRpYyBib29sZWFuKGUpe3JldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoZSl9c3RhdGljIGJvcmRlcihlKXtyZXR1cm4gbmV3IEJvcmRlcihlKX1zdGF0aWMgYnJlYWsoZSl7cmV0dXJuIG5ldyBCcmVhayhlKX1zdGF0aWMgYnJlYWtBZnRlcihlKXtyZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoZSl9c3RhdGljIGJyZWFrQmVmb3JlKGUpe3JldHVybiBuZXcgQnJlYWtCZWZvcmUoZSl9c3RhdGljIGJ1dHRvbihlKXtyZXR1cm4gbmV3IEJ1dHRvbihlKX1zdGF0aWMgY2FsY3VsYXRlKGUpe3JldHVybiBuZXcgQ2FsY3VsYXRlKGUpfXN0YXRpYyBjYXB0aW9uKGUpe3JldHVybiBuZXcgQ2FwdGlvbihlKX1zdGF0aWMgY2VydGlmaWNhdGUoZSl7cmV0dXJuIG5ldyBDZXJ0aWZpY2F0ZShlKX1zdGF0aWMgY2VydGlmaWNhdGVzKGUpe3JldHVybiBuZXcgQ2VydGlmaWNhdGVzKGUpfXN0YXRpYyBjaGVja0J1dHRvbihlKXtyZXR1cm4gbmV3IENoZWNrQnV0dG9uKGUpfXN0YXRpYyBjaG9pY2VMaXN0KGUpe3JldHVybiBuZXcgQ2hvaWNlTGlzdChlKX1zdGF0aWMgY29sb3IoZSl7cmV0dXJuIG5ldyBDb2xvcihlKX1zdGF0aWMgY29tYihlKXtyZXR1cm4gbmV3IENvbWIoZSl9c3RhdGljIGNvbm5lY3QoZSl7cmV0dXJuIG5ldyBDb25uZWN0KGUpfXN0YXRpYyBjb250ZW50QXJlYShlKXtyZXR1cm4gbmV3IENvbnRlbnRBcmVhKGUpfXN0YXRpYyBjb3JuZXIoZSl7cmV0dXJuIG5ldyBDb3JuZXIoZSl9c3RhdGljIGRhdGUoZSl7cmV0dXJuIG5ldyBEYXRlRWxlbWVudChlKX1zdGF0aWMgZGF0ZVRpbWUoZSl7cmV0dXJuIG5ldyBEYXRlVGltZShlKX1zdGF0aWMgZGF0ZVRpbWVFZGl0KGUpe3JldHVybiBuZXcgRGF0ZVRpbWVFZGl0KGUpfXN0YXRpYyBkZWNpbWFsKGUpe3JldHVybiBuZXcgRGVjaW1hbChlKX1zdGF0aWMgZGVmYXVsdFVpKGUpe3JldHVybiBuZXcgRGVmYXVsdFVpKGUpfXN0YXRpYyBkZXNjKGUpe3JldHVybiBuZXcgRGVzYyhlKX1zdGF0aWMgZGlnZXN0TWV0aG9kKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kKGUpfXN0YXRpYyBkaWdlc3RNZXRob2RzKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhlKX1zdGF0aWMgZHJhdyhlKXtyZXR1cm4gbmV3IERyYXcoZSl9c3RhdGljIGVkZ2UoZSl7cmV0dXJuIG5ldyBFZGdlKGUpfXN0YXRpYyBlbmNvZGluZyhlKXtyZXR1cm4gbmV3IEVuY29kaW5nKGUpfXN0YXRpYyBlbmNvZGluZ3MoZSl7cmV0dXJuIG5ldyBFbmNvZGluZ3MoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBFbmNyeXB0KGUpfXN0YXRpYyBlbmNyeXB0RGF0YShlKXtyZXR1cm4gbmV3IEVuY3J5cHREYXRhKGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbk1ldGhvZChlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2QoZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2RzKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoZSl9c3RhdGljIGV2ZW50KGUpe3JldHVybiBuZXcgRXZlbnQoZSl9c3RhdGljIGV4RGF0YShlKXtyZXR1cm4gbmV3IEV4RGF0YShlKX1zdGF0aWMgZXhPYmplY3QoZSl7cmV0dXJuIG5ldyBFeE9iamVjdChlKX1zdGF0aWMgZXhjbEdyb3VwKGUpe3JldHVybiBuZXcgRXhjbEdyb3VwKGUpfXN0YXRpYyBleGVjdXRlKGUpe3JldHVybiBuZXcgRXhlY3V0ZShlKX1zdGF0aWMgZXh0cmFzKGUpe3JldHVybiBuZXcgRXh0cmFzKGUpfXN0YXRpYyBmaWVsZChlKXtyZXR1cm4gbmV3IEZpZWxkKGUpfXN0YXRpYyBmaWxsKGUpe3JldHVybiBuZXcgRmlsbChlKX1zdGF0aWMgZmlsdGVyKGUpe3JldHVybiBuZXcgRmlsdGVyKGUpfXN0YXRpYyBmbG9hdChlKXtyZXR1cm4gbmV3IEZsb2F0KGUpfXN0YXRpYyBmb250KGUpe3JldHVybiBuZXcgRm9udChlKX1zdGF0aWMgZm9ybWF0KGUpe3JldHVybiBuZXcgRm9ybWF0KGUpfXN0YXRpYyBoYW5kbGVyKGUpe3JldHVybiBuZXcgSGFuZGxlcihlKX1zdGF0aWMgaHlwaGVuYXRpb24oZSl7cmV0dXJuIG5ldyBIeXBoZW5hdGlvbihlKX1zdGF0aWMgaW1hZ2UoZSl7cmV0dXJuIG5ldyBJbWFnZShlKX1zdGF0aWMgaW1hZ2VFZGl0KGUpe3JldHVybiBuZXcgSW1hZ2VFZGl0KGUpfXN0YXRpYyBpbnRlZ2VyKGUpe3JldHVybiBuZXcgSW50ZWdlcihlKX1zdGF0aWMgaXNzdWVycyhlKXtyZXR1cm4gbmV3IElzc3VlcnMoZSl9c3RhdGljIGl0ZW1zKGUpe3JldHVybiBuZXcgSXRlbXMoZSl9c3RhdGljIGtlZXAoZSl7cmV0dXJuIG5ldyBLZWVwKGUpfXN0YXRpYyBrZXlVc2FnZShlKXtyZXR1cm4gbmV3IEtleVVzYWdlKGUpfXN0YXRpYyBsaW5lKGUpe3JldHVybiBuZXcgTGluZShlKX1zdGF0aWMgbGluZWFyKGUpe3JldHVybiBuZXcgTGluZWFyKGUpfXN0YXRpYyBsb2NrRG9jdW1lbnQoZSl7cmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoZSl9c3RhdGljIG1hbmlmZXN0KGUpe3JldHVybiBuZXcgTWFuaWZlc3QoZSl9c3RhdGljIG1hcmdpbihlKXtyZXR1cm4gbmV3IE1hcmdpbihlKX1zdGF0aWMgbWRwKGUpe3JldHVybiBuZXcgTWRwKGUpfXN0YXRpYyBtZWRpdW0oZSl7cmV0dXJuIG5ldyBNZWRpdW0oZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBNZXNzYWdlKGUpfXN0YXRpYyBudW1lcmljRWRpdChlKXtyZXR1cm4gbmV3IE51bWVyaWNFZGl0KGUpfXN0YXRpYyBvY2N1cihlKXtyZXR1cm4gbmV3IE9jY3VyKGUpfXN0YXRpYyBvaWQoZSl7cmV0dXJuIG5ldyBPaWQoZSl9c3RhdGljIG9pZHMoZSl7cmV0dXJuIG5ldyBPaWRzKGUpfXN0YXRpYyBvdmVyZmxvdyhlKXtyZXR1cm4gbmV3IE92ZXJmbG93KGUpfXN0YXRpYyBwYWdlQXJlYShlKXtyZXR1cm4gbmV3IFBhZ2VBcmVhKGUpfXN0YXRpYyBwYWdlU2V0KGUpe3JldHVybiBuZXcgUGFnZVNldChlKX1zdGF0aWMgcGFyYShlKXtyZXR1cm4gbmV3IFBhcmEoZSl9c3RhdGljIHBhc3N3b3JkRWRpdChlKXtyZXR1cm4gbmV3IFBhc3N3b3JkRWRpdChlKX1zdGF0aWMgcGF0dGVybihlKXtyZXR1cm4gbmV3IFBhdHRlcm4oZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBQaWN0dXJlKGUpfXN0YXRpYyBwcm90byhlKXtyZXR1cm4gbmV3IFByb3RvKGUpfXN0YXRpYyByYWRpYWwoZSl7cmV0dXJuIG5ldyBSYWRpYWwoZSl9c3RhdGljIHJlYXNvbihlKXtyZXR1cm4gbmV3IFJlYXNvbihlKX1zdGF0aWMgcmVhc29ucyhlKXtyZXR1cm4gbmV3IFJlYXNvbnMoZSl9c3RhdGljIHJlY3RhbmdsZShlKXtyZXR1cm4gbmV3IFJlY3RhbmdsZShlKX1zdGF0aWMgcmVmKGUpe3JldHVybiBuZXcgUmVmRWxlbWVudChlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgU2NyaXB0KGUpfXN0YXRpYyBzZXRQcm9wZXJ0eShlKXtyZXR1cm4gbmV3IFNldFByb3BlcnR5KGUpfXN0YXRpYyBzaWduRGF0YShlKXtyZXR1cm4gbmV3IFNpZ25EYXRhKGUpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9c3RhdGljIHNpZ25pbmcoZSl7cmV0dXJuIG5ldyBTaWduaW5nKGUpfXN0YXRpYyBzb2xpZChlKXtyZXR1cm4gbmV3IFNvbGlkKGUpfXN0YXRpYyBzcGVhayhlKXtyZXR1cm4gbmV3IFNwZWFrKGUpfXN0YXRpYyBzdGlwcGxlKGUpe3JldHVybiBuZXcgU3RpcHBsZShlKX1zdGF0aWMgc3ViZm9ybShlKXtyZXR1cm4gbmV3IFN1YmZvcm0oZSl9c3RhdGljIHN1YmZvcm1TZXQoZSl7cmV0dXJuIG5ldyBTdWJmb3JtU2V0KGUpfXN0YXRpYyBzdWJqZWN0RE4oZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE4oZSl9c3RhdGljIHN1YmplY3RETnMoZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE5zKGUpfXN0YXRpYyBzdWJtaXQoZSl7cmV0dXJuIG5ldyBTdWJtaXQoZSl9c3RhdGljIHRlbXBsYXRlKGUpe3JldHVybiBuZXcgVGVtcGxhdGUoZSl9c3RhdGljIHRleHQoZSl7cmV0dXJuIG5ldyBUZXh0KGUpfXN0YXRpYyB0ZXh0RWRpdChlKXtyZXR1cm4gbmV3IFRleHRFZGl0KGUpfXN0YXRpYyB0aW1lKGUpe3JldHVybiBuZXcgVGltZShlKX1zdGF0aWMgdGltZVN0YW1wKGUpe3JldHVybiBuZXcgVGltZVN0YW1wKGUpfXN0YXRpYyB0b29sVGlwKGUpe3JldHVybiBuZXcgVG9vbFRpcChlKX1zdGF0aWMgdHJhdmVyc2FsKGUpe3JldHVybiBuZXcgVHJhdmVyc2FsKGUpfXN0YXRpYyB0cmF2ZXJzZShlKXtyZXR1cm4gbmV3IFRyYXZlcnNlKGUpfXN0YXRpYyB1aShlKXtyZXR1cm4gbmV3IFVpKGUpfXN0YXRpYyB2YWxpZGF0ZShlKXtyZXR1cm4gbmV3IFZhbGlkYXRlKGUpfXN0YXRpYyB2YWx1ZShlKXtyZXR1cm4gbmV3IFZhbHVlKGUpfXN0YXRpYyB2YXJpYWJsZXMoZSl7cmV0dXJuIG5ldyBWYXJpYWJsZXMoZSl9fXQuVGVtcGxhdGVOYW1lc3BhY2U9VGVtcGxhdGVOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5hZGRIVE1MPWZ1bmN0aW9uIGFkZEhUTUwoZSx0LGEpe2NvbnN0IG49ZVtyLiRleHRyYV0scz1uLmF2YWlsYWJsZVNwYWNlLFtvLGMsbCxoXT1hO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6bi53aWR0aD1NYXRoLm1heChuLndpZHRoLG8rbCk7bi5oZWlnaHQ9TWF0aC5tYXgobi5oZWlnaHQsYytoKTtuLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6aWYoIW4ubGluZXx8MT09PW4uYXR0ZW1wdCl7bi5saW5lPWNyZWF0ZUxpbmUoZSxbXSk7bi5jaGlsZHJlbi5wdXNoKG4ubGluZSk7bi5udW1iZXJJbkxpbmU9MH1uLm51bWJlckluTGluZSs9MTtuLmxpbmUuY2hpbGRyZW4ucHVzaCh0KTtpZigwPT09bi5hdHRlbXB0KXtuLmN1cnJlbnRXaWR0aCs9bDtuLmhlaWdodD1NYXRoLm1heChuLmhlaWdodCxuLnByZXZIZWlnaHQraCl9ZWxzZXtuLmN1cnJlbnRXaWR0aD1sO24ucHJldkhlaWdodD1uLmhlaWdodDtuLmhlaWdodCs9aDtuLmF0dGVtcHQ9MH1uLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsbi5jdXJyZW50V2lkdGgpO2JyZWFrO2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6e24uY2hpbGRyZW4ucHVzaCh0KTtuLndpZHRoKz1sO24uaGVpZ2h0PU1hdGgubWF4KG4uaGVpZ2h0LGgpO2NvbnN0IGU9KDAsaS5tZWFzdXJlVG9TdHJpbmcpKG4uaGVpZ2h0KTtmb3IoY29uc3QgdCBvZiBuLmNoaWxkcmVuKXQuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9ZTticmVha31jYXNlInRhYmxlIjpjYXNlInRiIjpuLndpZHRoPU1hdGgubWluKHMud2lkdGgsTWF0aC5tYXgobi53aWR0aCxsKSk7bi5oZWlnaHQrPWg7bi5jaGlsZHJlbi5wdXNoKHQpfX07dC5jaGVja0RpbWVuc2lvbnM9ZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKGUsdCl7aWYobnVsbD09PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpLGk9YVtyLiRleHRyYV0/LmF0dGVtcHR8fDAsWyxuLHMsb109ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtZWRCQm94KGUpe2xldCB0LGEscj0iIj09PWUudz9OYU46ZS53LGk9IiI9PT1lLmg/TmFOOmUuaCxbbixzXT1bMCwwXTtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOltuLHNdPVtyLzIsaV07YnJlYWs7Y2FzZSJib3R0b21MZWZ0IjpbbixzXT1bMCxpXTticmVhaztjYXNlImJvdHRvbVJpZ2h0IjpbbixzXT1bcixpXTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6W24sc109W3IvMixpLzJdO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6W24sc109WzAsaS8yXTticmVhaztjYXNlIm1pZGRsZVJpZ2h0IjpbbixzXT1bcixpLzJdO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjpbbixzXT1bci8yLDBdO2JyZWFrO2Nhc2UidG9wUmlnaHQiOltuLHNdPVtyLDBdfXN3aXRjaChlLnJvdGF0ZXx8MCl7Y2FzZSAwOlt0LGFdPVstbiwtc107YnJlYWs7Y2FzZSA5MDpbdCxhXT1bLXMsbl07W3IsaV09W2ksLXJdO2JyZWFrO2Nhc2UgMTgwOlt0LGFdPVtuLHNdO1tyLGldPVstciwtaV07YnJlYWs7Y2FzZSAyNzA6W3QsYV09W3MsLW5dO1tyLGldPVstaSxyXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxyKSxlLnkrYStNYXRoLm1pbigwLGkpLE1hdGguYWJzKHIpLE1hdGguYWJzKGkpXX0oZSk7c3dpdGNoKGEubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWk/ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKHMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQoby10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKHMtdC53aWR0aCk8PTJ8fDA9PT1hW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQoby10LmhlaWdodCk+MikmJigoIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWFbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSkmJnQuaGVpZ2h0PjIpO2Nhc2UidGFibGUiOmNhc2UidGIiOnJldHVybiEhZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxlW3IuJGlzU3BsaXR0YWJsZV0oKT8oIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWFbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSkmJnQuaGVpZ2h0PjI6TWF0aC5yb3VuZChvLXQuaGVpZ2h0KTw9Mik7Y2FzZSJwb3NpdGlvbiI6aWYoZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSlyZXR1cm4hMDtpZigiIj09PWUuaHx8TWF0aC5yb3VuZChvK24tdC5oZWlnaHQpPD0yKXJldHVybiEwO3JldHVybiBvK24+ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYS5oO2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6cmV0dXJuISFlW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlfHwoIiI9PT1lLmh8fE1hdGgucm91bmQoby10LmhlaWdodCk8PTIpO2RlZmF1bHQ6cmV0dXJuITB9fTt0LmZsdXNoSFRNTD1mdW5jdGlvbiBmbHVzaEhUTUwoZSl7aWYoIWVbci4kZXh0cmFdKXJldHVybiBudWxsO2NvbnN0IHQ9e25hbWU6ImRpdiIsYXR0cmlidXRlczplW3IuJGV4dHJhXS5hdHRyaWJ1dGVzLGNoaWxkcmVuOmVbci4kZXh0cmFdLmNoaWxkcmVufTtpZihlW3IuJGV4dHJhXS5mYWlsaW5nTm9kZSl7Y29uc3QgYT1lW3IuJGV4dHJhXS5mYWlsaW5nTm9kZVtyLiRmbHVzaEhUTUxdKCk7YSYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goY3JlYXRlTGluZShlLFthXSkpOnQuY2hpbGRyZW4ucHVzaChhKSl9aWYoMD09PXQuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiB0fTt0LmdldEF2YWlsYWJsZVNwYWNlPWZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKGUpe2NvbnN0IHQ9ZVtyLiRleHRyYV0uYXZhaWxhYmxlU3BhY2UsYT1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGk9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtyLiRleHRyYV0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1pLWVbci4kZXh0cmFdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtYS1lW3IuJGV4dHJhXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1pLGhlaWdodDp0LmhlaWdodC1hLWVbci4kZXh0cmFdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtyLiRleHRyYV0uY29sdW1uV2lkdGhzLnNsaWNlKGVbci4kZXh0cmFdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCkpLGhlaWdodDp0LmhlaWdodC1pfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1pLGhlaWdodDp0LmhlaWdodC1hLWVbci4kZXh0cmFdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19O3ZhciByPWEoNzgpLGk9YSg4NSk7ZnVuY3Rpb24gY3JlYXRlTGluZShlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY29tcHV0ZUJib3g9ZnVuY3Rpb24gY29tcHV0ZUJib3goZSx0LGEpe2xldCBpO2lmKCIiIT09ZS53JiYiIiE9PWUuaClpPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIWEpcmV0dXJuIG51bGw7bGV0IG49ZS53O2lmKCIiPT09bil7aWYoMD09PWUubWF4Vyl7Y29uc3QgdD1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7bj0icG9zaXRpb24iPT09dC5sYXlvdXQmJiIiIT09dC53PzA6ZS5taW5XfWVsc2Ugbj1NYXRoLm1pbihlLm1heFcsYS53aWR0aCk7dC5hdHRyaWJ1dGVzLnN0eWxlLndpZHRoPW1lYXN1cmVUb1N0cmluZyhuKX1sZXQgcz1lLmg7aWYoIiI9PT1zKXtpZigwPT09ZS5tYXhIKXtjb25zdCB0PWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtzPSJwb3NpdGlvbiI9PT10LmxheW91dCYmIiIhPT10Lmg/MDplLm1pbkh9ZWxzZSBzPU1hdGgubWluKGUubWF4SCxhLmhlaWdodCk7dC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1tZWFzdXJlVG9TdHJpbmcocyl9aT1bZS54LGUueSxuLHNdfXJldHVybiBpfTt0LmNyZWF0ZVdyYXBwZXI9ZnVuY3Rpb24gY3JlYXRlV3JhcHBlcihlLHQpe2NvbnN0e2F0dHJpYnV0ZXM6YX09dCx7c3R5bGU6aX09YSxuPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhV3JhcHBlciJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOltdfTthLmNsYXNzLnB1c2goInhmYVdyYXBwZWQiKTtpZihlLmJvcmRlcil7Y29uc3R7d2lkdGhzOmEsaW5zZXRzOnN9PWUuYm9yZGVyW3IuJGV4dHJhXTtsZXQgbyxjLGw9c1swXSxoPXNbM107Y29uc3QgdT1zWzBdK3NbMl0sZD1zWzFdK3NbM107c3dpdGNoKGUuYm9yZGVyLmhhbmQpe2Nhc2UiZXZlbiI6bC09YVswXS8yO2gtPWFbM10vMjtvPWBjYWxjKDEwMCUgKyAkeyhhWzFdK2FbM10pLzItZH1weClgO2M9YGNhbGMoMTAwJSArICR7KGFbMF0rYVsyXSkvMi11fXB4KWA7YnJlYWs7Y2FzZSJsZWZ0IjpsLT1hWzBdO2gtPWFbM107bz1gY2FsYygxMDAlICsgJHthWzFdK2FbM10tZH1weClgO2M9YGNhbGMoMTAwJSArICR7YVswXSthWzJdLXV9cHgpYDticmVhaztjYXNlInJpZ2h0IjpvPWQ/YGNhbGMoMTAwJSAtICR7ZH1weClgOiIxMDAlIjtjPXU/YGNhbGMoMTAwJSAtICR7dX1weClgOiIxMDAlIn1jb25zdCBmPVsieGZhQm9yZGVyIl07aXNQcmludE9ubHkoZS5ib3JkZXIpJiZmLnB1c2goInhmYVByaW50T25seSIpO2NvbnN0IGc9e25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6ZixzdHlsZTp7dG9wOmAke2x9cHhgLGxlZnQ6YCR7aH1weGAsd2lkdGg6byxoZWlnaHQ6Y319LGNoaWxkcmVuOltdfTtmb3IoY29uc3QgZSBvZlsiYm9yZGVyIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJDb2xvciIsImJvcmRlclJhZGl1cyIsImJvcmRlclN0eWxlIl0paWYodm9pZCAwIT09aVtlXSl7Zy5hdHRyaWJ1dGVzLnN0eWxlW2VdPWlbZV07ZGVsZXRlIGlbZV19bi5jaGlsZHJlbi5wdXNoKGcsdCl9ZWxzZSBuLmNoaWxkcmVuLnB1c2godCk7Zm9yKGNvbnN0IGUgb2ZbImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kQ2xpcCIsInRvcCIsImxlZnQiLCJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ2aXNpYmlsaXR5Il0paWYodm9pZCAwIT09aVtlXSl7bi5hdHRyaWJ1dGVzLnN0eWxlW2VdPWlbZV07ZGVsZXRlIGlbZV19ImFic29sdXRlIj09PWkucG9zaXRpb24/bi5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI6bi5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZGVsZXRlIGkucG9zaXRpb247aWYoaS5hbGlnblNlbGYpe24uYXR0cmlidXRlcy5zdHlsZS5hbGlnblNlbGY9aS5hbGlnblNlbGY7ZGVsZXRlIGkuYWxpZ25TZWxmfXJldHVybiBufTt0LmZpeERpbWVuc2lvbnM9ZnVuY3Rpb24gZml4RGltZW5zaW9ucyhlKXtjb25zdCB0PWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZih0LmxheW91dD8uaW5jbHVkZXMoInJvdyIpKXtjb25zdCBhPXRbci4kZXh0cmFdLGk9ZS5jb2xTcGFuO2xldCBuO249LTE9PT1pP2EuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbikucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKTphLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4sYS5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7aXNOYU4obil8fChlLnc9bil9dC5sYXlvdXQmJiJwb3NpdGlvbiIhPT10LmxheW91dCYmKGUueD1lLnk9MCk7InRhYmxlIj09PWUubGF5b3V0JiYiIj09PWUudyYmQXJyYXkuaXNBcnJheShlLmNvbHVtbldpZHRocykmJihlLnc9ZS5jb2x1bW5XaWR0aHMucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKSl9O3QuZml4VGV4dEluZGVudD1mdW5jdGlvbiBmaXhUZXh0SW5kZW50KGUpe2NvbnN0IHQ9KDAsbi5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHgiKTtpZih0Pj0wKXJldHVybjtjb25zdCBhPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iikscj0oMCxuLmdldE1lYXN1cmVtZW50KShlW2FdLCIwcHgiKTtlW2FdPXItdCsicHgifTt0LmZpeFVSTD1mdW5jdGlvbiBmaXhVUkwoZSl7Y29uc3QgdD0oMCxpLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUsbnVsbCx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO3JldHVybiB0P3QuaHJlZjpudWxsfTt0LmlzUHJpbnRPbmx5PWlzUHJpbnRPbmx5O3QubGF5b3V0Q2xhc3M9ZnVuY3Rpb24gbGF5b3V0Q2xhc3MoZSl7c3dpdGNoKGUubGF5b3V0KXtjYXNlInBvc2l0aW9uIjpkZWZhdWx0OnJldHVybiJ4ZmFQb3NpdGlvbiI7Y2FzZSJsci10YiI6cmV0dXJuInhmYUxyVGIiO2Nhc2Uicmwtcm93IjpyZXR1cm4ieGZhUmxSb3ciO2Nhc2UicmwtdGIiOnJldHVybiJ4ZmFSbFRiIjtjYXNlInJvdyI6cmV0dXJuInhmYVJvdyI7Y2FzZSJ0YWJsZSI6cmV0dXJuInhmYVRhYmxlIjtjYXNlInRiIjpyZXR1cm4ieGZhVGIifX07dC5sYXlvdXROb2RlPWZ1bmN0aW9uIGxheW91dE5vZGUoZSx0KXtsZXQgYT1udWxsLGk9bnVsbCxuPSExO2lmKCghZS53fHwhZS5oKSYmZS52YWx1ZSl7bGV0IHM9MCxvPTA7aWYoZS5tYXJnaW4pe3M9ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ7bz1lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldH1sZXQgYz1udWxsLGw9bnVsbDtpZihlLnBhcmEpe2w9T2JqZWN0LmNyZWF0ZShudWxsKTtjPSIiPT09ZS5wYXJhLmxpbmVIZWlnaHQ/bnVsbDplLnBhcmEubGluZUhlaWdodDtsLnRvcD0iIj09PWUucGFyYS5zcGFjZUFib3ZlPzA6ZS5wYXJhLnNwYWNlQWJvdmU7bC5ib3R0b209IiI9PT1lLnBhcmEuc3BhY2VCZWxvdz8wOmUucGFyYS5zcGFjZUJlbG93O2wubGVmdD0iIj09PWUucGFyYS5tYXJnaW5MZWZ0PzA6ZS5wYXJhLm1hcmdpbkxlZnQ7bC5yaWdodD0iIj09PWUucGFyYS5tYXJnaW5SaWdodD8wOmUucGFyYS5tYXJnaW5SaWdodH1sZXQgaD1lLmZvbnQ7aWYoIWgpe2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7bGV0IGE9ZVtyLiRnZXRQYXJlbnRdKCk7Zm9yKDthJiZhIT09dDspe2lmKGEuZm9udCl7aD1hLmZvbnQ7YnJlYWt9YT1hW3IuJGdldFBhcmVudF0oKX19Y29uc3QgdT0oZS53fHx0LndpZHRoKS1zLGQ9ZVtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyO2lmKGUudmFsdWUuZXhEYXRhJiZlLnZhbHVlLmV4RGF0YVtyLiRjb250ZW50XSYmInRleHQvaHRtbCI9PT1lLnZhbHVlLmV4RGF0YS5jb250ZW50VHlwZSl7Y29uc3QgdD1sYXlvdXRUZXh0KGUudmFsdWUuZXhEYXRhW3IuJGNvbnRlbnRdLGgsbCxjLGQsdSk7aT10LndpZHRoO2E9dC5oZWlnaHQ7bj10LmlzQnJva2VufWVsc2V7Y29uc3QgdD1lLnZhbHVlW3IuJHRleHRdKCk7aWYodCl7Y29uc3QgZT1sYXlvdXRUZXh0KHQsaCxsLGMsZCx1KTtpPWUud2lkdGg7YT1lLmhlaWdodDtuPWUuaXNCcm9rZW59fW51bGw9PT1pfHxlLnd8fChpKz1zKTtudWxsPT09YXx8ZS5ofHwoYSs9byl9cmV0dXJue3c6aSxoOmEsaXNCcm9rZW46bn19O3QubWVhc3VyZVRvU3RyaW5nPW1lYXN1cmVUb1N0cmluZzt0LnNldEFjY2Vzcz1mdW5jdGlvbiBzZXRBY2Nlc3MoZSx0KXtzd2l0Y2goZS5hY2Nlc3Mpe2Nhc2Uibm9uSW50ZXJhY3RpdmUiOnQucHVzaCgieGZhTm9uSW50ZXJhY3RpdmUiKTticmVhaztjYXNlInJlYWRPbmx5Ijp0LnB1c2goInhmYVJlYWRPbmx5Iik7YnJlYWs7Y2FzZSJwcm90ZWN0ZWQiOnQucHVzaCgieGZhRGlzYWJsZWQiKX19O3Quc2V0Rm9udEZhbWlseT1mdW5jdGlvbiBzZXRGb250RmFtaWx5KGUsdCxhLHIpe2lmKCFhKXtkZWxldGUgci5mb250RmFtaWx5O3JldHVybn1jb25zdCBpPSgwLG4uc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpO3IuZm9udEZhbWlseT1gIiR7aX0iYDtjb25zdCBvPWEuZmluZChpKTtpZihvKXtjb25zdHtmb250RmFtaWx5OmF9PW8ucmVndWxhci5jc3NGb250SW5mbzthIT09aSYmKHIuZm9udEZhbWlseT1gIiR7YX0iYCk7Y29uc3Qgbj1nZXRDdXJyZW50UGFyYSh0KTtpZihuJiYiIiE9PW4ubGluZUhlaWdodClyZXR1cm47aWYoci5saW5lSGVpZ2h0KXJldHVybjtjb25zdCBjPSgwLHMuc2VsZWN0Rm9udCkoZSxvKTtjJiYoci5saW5lSGVpZ2h0PU1hdGgubWF4KDEuMixjLmxpbmVIZWlnaHQpKX19O3Quc2V0TWluTWF4RGltZW5zaW9ucz1mdW5jdGlvbiBzZXRNaW5NYXhEaW1lbnNpb25zKGUsdCl7aWYoInBvc2l0aW9uIj09PWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKS5sYXlvdXQpe2UubWluVz4wJiYodC5taW5XaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5taW5XKSk7ZS5tYXhXPjAmJih0Lm1heFdpZHRoPW1lYXN1cmVUb1N0cmluZyhlLm1heFcpKTtlLm1pbkg+MCYmKHQubWluSGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1pbkgpKTtlLm1heEg+MCYmKHQubWF4SGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1heEgpKX19O3Quc2V0UGFyYT1mdW5jdGlvbiBzZXRQYXJhKGUsdCxhKXtpZihhLmF0dHJpYnV0ZXMuY2xhc3M/LmluY2x1ZGVzKCJ4ZmFSaWNoIikpe2lmKHQpeyIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKTsiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKX1jb25zdCBpPWdldEN1cnJlbnRQYXJhKGUpO2lmKGkpe2NvbnN0IGU9YS5hdHRyaWJ1dGVzLnN0eWxlO2UuZGlzcGxheT0iZmxleCI7ZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iO3N3aXRjaChpLnZBbGlnbil7Y2FzZSJ0b3AiOmUuanVzdGlmeUNvbnRlbnQ9InN0YXJ0IjticmVhaztjYXNlImJvdHRvbSI6ZS5qdXN0aWZ5Q29udGVudD0iZW5kIjticmVhaztjYXNlIm1pZGRsZSI6ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIn1jb25zdCB0PWlbci4kdG9TdHlsZV0oKTtmb3IoY29uc3RbYSxyXW9mIE9iamVjdC5lbnRyaWVzKHQpKWEgaW4gZXx8KGVbYV09cil9fX07dC50b1N0eWxlPWZ1bmN0aW9uIHRvU3R5bGUoZSwuLi50KXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IG4gb2YgdCl7Y29uc3QgdD1lW25dO2lmKG51bGwhPT10KWlmKGMuaGFzT3duUHJvcGVydHkobikpY1tuXShlLGEpO2Vsc2UgaWYodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KXtjb25zdCBlPXRbci4kdG9TdHlsZV0oKTtlP09iamVjdC5hc3NpZ24oYSxlKTooMCxpLndhcm4pKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7bn0gbm90IGltcGxlbWVudGVkIHlldGApfX1yZXR1cm4gYX07dmFyIHI9YSg3OCksaT1hKDIpLG49YSg3OSkscz1hKDg2KSxvPWEoODcpO2Z1bmN0aW9uIG1lYXN1cmVUb1N0cmluZyhlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/IjBweCI6TnVtYmVyLmlzSW50ZWdlcihlKT9gJHtlfXB4YDpgJHtlLnRvRml4ZWQoMil9cHhgfWNvbnN0IGM9e2FuY2hvclR5cGUoZSx0KXtjb25zdCBhPWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZihhJiYoIWEubGF5b3V0fHwicG9zaXRpb24iPT09YS5sYXlvdXQpKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7c3dpdGNoKGUuYW5jaG9yVHlwZSl7Y2FzZSJib3R0b21DZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsIC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21MZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIjticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC01MCUpIjticmVhaztjYXNlIm1pZGRsZVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSI7YnJlYWs7Y2FzZSJ0b3BDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsMCkiO2JyZWFrO2Nhc2UidG9wUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLDApIn19fSxkaW1lbnNpb25zKGUsdCl7Y29uc3QgYT1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7bGV0IGk9ZS53O2NvbnN0IG49ZS5oO2lmKGEubGF5b3V0Py5pbmNsdWRlcygicm93Iikpe2NvbnN0IHQ9YVtyLiRleHRyYV0sbj1lLmNvbFNwYW47bGV0IHM7aWYoLTE9PT1uKXtzPXQuY29sdW1uV2lkdGhzLnNsaWNlKHQuY3VycmVudENvbHVtbikucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKTt0LmN1cnJlbnRDb2x1bW49MH1lbHNle3M9dC5jb2x1bW5XaWR0aHMuc2xpY2UodC5jdXJyZW50Q29sdW1uLHQuY3VycmVudENvbHVtbituKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO3QuY3VycmVudENvbHVtbj0odC5jdXJyZW50Q29sdW1uK2UuY29sU3BhbikldC5jb2x1bW5XaWR0aHMubGVuZ3RofWlzTmFOKHMpfHwoaT1lLnc9cyl9dC53aWR0aD0iIiE9PWk/bWVhc3VyZVRvU3RyaW5nKGkpOiJhdXRvIjt0LmhlaWdodD0iIiE9PW4/bWVhc3VyZVRvU3RyaW5nKG4pOiJhdXRvIn0scG9zaXRpb24oZSx0KXtjb25zdCBhPWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZighYT8ubGF5b3V0fHwicG9zaXRpb24iPT09YS5sYXlvdXQpe3QucG9zaXRpb249ImFic29sdXRlIjt0LmxlZnQ9bWVhc3VyZVRvU3RyaW5nKGUueCk7dC50b3A9bWVhc3VyZVRvU3RyaW5nKGUueSl9fSxyb3RhdGUoZSx0KXtpZihlLnJvdGF0ZSl7InRyYW5zZm9ybSJpbiB0fHwodC50cmFuc2Zvcm09IiIpO3QudHJhbnNmb3JtKz1gcm90YXRlKC0ke2Uucm90YXRlfWRlZylgO3QudHJhbnNmb3JtT3JpZ2luPSJ0b3AgbGVmdCJ9fSxwcmVzZW5jZShlLHQpe3N3aXRjaChlLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6dC52aXNpYmlsaXR5PSJoaWRkZW4iO2JyZWFrO2Nhc2UiaGlkZGVuIjpjYXNlImluYWN0aXZlIjp0LmRpc3BsYXk9Im5vbmUifX0saEFsaWduKGUsdCl7aWYoInBhcmEiPT09ZVtyLiRub2RlTmFtZV0pc3dpdGNoKGUuaEFsaWduKXtjYXNlImp1c3RpZnlBbGwiOnQudGV4dEFsaWduPSJqdXN0aWZ5LWFsbCI7YnJlYWs7Y2FzZSJyYWRpeCI6dC50ZXh0QWxpZ249ImxlZnQiO2JyZWFrO2RlZmF1bHQ6dC50ZXh0QWxpZ249ZS5oQWxpZ259ZWxzZSBzd2l0Y2goZS5oQWxpZ24pe2Nhc2UibGVmdCI6dC5hbGlnblNlbGY9InN0YXJ0IjticmVhaztjYXNlImNlbnRlciI6dC5hbGlnblNlbGY9ImNlbnRlciI7YnJlYWs7Y2FzZSJyaWdodCI6dC5hbGlnblNlbGY9ImVuZCJ9fSxtYXJnaW4oZSx0KXtlLm1hcmdpbiYmKHQubWFyZ2luPWUubWFyZ2luW3IuJHRvU3R5bGVdKCkubWFyZ2luKX19O2Z1bmN0aW9uIGxheW91dFRleHQoZSx0LGEsaSxuLHMpe2NvbnN0IGM9bmV3IG8uVGV4dE1lYXN1cmUodCxhLGksbik7InN0cmluZyI9PXR5cGVvZiBlP2MuYWRkU3RyaW5nKGUpOmVbci4kcHVzaEdseXBoc10oYyk7cmV0dXJuIGMuY29tcHV0ZShzKX1mdW5jdGlvbiBpc1ByaW50T25seShlKXtyZXR1cm4gZS5yZWxldmFudC5sZW5ndGg+MCYmIWUucmVsZXZhbnRbMF0uZXhjbHVkZWQmJiJwcmludCI9PT1lLnJlbGV2YW50WzBdLnZpZXduYW1lfWZ1bmN0aW9uIGdldEN1cnJlbnRQYXJhKGUpe2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLnBhcmFTdGFjaztyZXR1cm4gdC5sZW5ndGg/dC5hdCgtMSk6bnVsbH19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Gb250RmluZGVyPXZvaWQgMDt0LmdldE1ldHJpY3M9ZnVuY3Rpb24gZ2V0TWV0cmljcyhlLHQ9ITEpe2xldCBhPW51bGw7aWYoZSl7Y29uc3QgdD0oMCxpLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKSxuPWVbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKHQpO2E9c2VsZWN0Rm9udChlLG4pfWlmKCFhKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O2NvbnN0IG49ZS5zaXplfHwxMCxzPWEubGluZUhlaWdodD9NYXRoLm1heCh0PzA6MS4yLGEubGluZUhlaWdodCk6MS4yLG89dm9pZCAwPT09YS5saW5lR2FwPy4yOmEubGluZUdhcDtyZXR1cm57bGluZUhlaWdodDpzKm4sbGluZUdhcDpvKm4sbGluZU5vR2FwOk1hdGgubWF4KDEscy1vKSpufX07dC5zZWxlY3RGb250PXNlbGVjdEZvbnQ7dmFyIHI9YSg3OCksaT1hKDc5KSxuPWEoMik7dC5Gb250RmluZGVyPWNsYXNzIEZvbnRGaW5kZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5mb250cz1uZXcgTWFwO3RoaXMuY2FjaGU9bmV3IE1hcDt0aGlzLndhcm5lZD1uZXcgU2V0O3RoaXMuZGVmYXVsdEZvbnQ9bnVsbDt0aGlzLmFkZChlKX1hZGQoZSx0PW51bGwpe2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hZGRQZGZGb250KHQpO2Zvcihjb25zdCBlIG9mIHRoaXMuZm9udHMudmFsdWVzKCkpZS5yZWd1bGFyfHwoZS5yZWd1bGFyPWUuaXRhbGljfHxlLmJvbGR8fGUuYm9sZGl0YWxpYyk7aWYoIXR8fDA9PT10LnNpemUpcmV0dXJuO2NvbnN0IGE9dGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpO2Zvcihjb25zdCBlIG9mIHQpdGhpcy5mb250cy5zZXQoZSxhKX1hZGRQZGZGb250KGUpe2NvbnN0IHQ9ZS5jc3NGb250SW5mbyxhPXQuZm9udEZhbWlseTtsZXQgcj10aGlzLmZvbnRzLmdldChhKTtpZighcil7cj1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuZm9udHMuc2V0KGEscik7dGhpcy5kZWZhdWx0Rm9udHx8KHRoaXMuZGVmYXVsdEZvbnQ9cil9bGV0IGk9IiI7Y29uc3Qgbj1wYXJzZUZsb2F0KHQuZm9udFdlaWdodCk7MCE9PXBhcnNlRmxvYXQodC5pdGFsaWNBbmdsZSk/aT1uPj03MDA/ImJvbGRpdGFsaWMiOiJpdGFsaWMiOm4+PTcwMCYmKGk9ImJvbGQiKTtpZighaSl7KGUubmFtZS5pbmNsdWRlcygiQm9sZCIpfHxlLnBzTmFtZT8uaW5jbHVkZXMoIkJvbGQiKSkmJihpPSJib2xkIik7KGUubmFtZS5pbmNsdWRlcygiSXRhbGljIil8fGUubmFtZS5lbmRzV2l0aCgiSXQiKXx8ZS5wc05hbWU/LmluY2x1ZGVzKCJJdGFsaWMiKXx8ZS5wc05hbWU/LmVuZHNXaXRoKCJJdCIpKSYmKGkrPSJpdGFsaWMiKX1pfHwoaT0icmVndWxhciIpO3JbaV09ZX1nZXREZWZhdWx0KCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9ZmluZChlLHQ9ITApe2xldCBhPXRoaXMuZm9udHMuZ2V0KGUpfHx0aGlzLmNhY2hlLmdldChlKTtpZihhKXJldHVybiBhO2NvbnN0IHI9Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpO2xldCBpPWUucmVwbGFjZUFsbChyLCIiKTthPXRoaXMuZm9udHMuZ2V0KGkpO2lmKGEpe3RoaXMuY2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9aT1pLnRvTG93ZXJDYXNlKCk7Y29uc3Qgcz1bXTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaSkmJnMucHVzaCh0KTtpZigwPT09cy5sZW5ndGgpZm9yKGNvbnN0WyxlXW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVndWxhci5uYW1lPy5yZXBsYWNlQWxsKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpKSYmcy5wdXNoKGUpO2lmKDA9PT1zLmxlbmd0aCl7aT1pLnJlcGxhY2VBbGwoL3BzbXR8bXQvZ2ksIiIpO2Zvcihjb25zdFtlLHRdb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpZS5yZXBsYWNlQWxsKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpKSYmcy5wdXNoKHQpfWlmKDA9PT1zLmxlbmd0aClmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhci5uYW1lPy5yZXBsYWNlQWxsKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpKSYmcy5wdXNoKGUpO2lmKHMubGVuZ3RoPj0xKXsxIT09cy5sZW5ndGgmJnQmJigwLG4ud2FybikoYFhGQSAtIFRvbyBtYW55IGNob2ljZXMgdG8gZ3Vlc3MgdGhlIGNvcnJlY3QgZm9udDogJHtlfWApO3RoaXMuY2FjaGUuc2V0KGUsc1swXSk7cmV0dXJuIHNbMF19aWYodCYmIXRoaXMud2FybmVkLmhhcyhlKSl7dGhpcy53YXJuZWQuYWRkKGUpOygwLG4ud2FybikoYFhGQSAtIENhbm5vdCBmaW5kIHRoZSBmb250OiAke2V9YCl9cmV0dXJuIG51bGx9fTtmdW5jdGlvbiBzZWxlY3RGb250KGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciByPWEoODYpO2NsYXNzIEZvbnRJbmZve2NvbnN0cnVjdG9yKGUsdCxhLGkpe3RoaXMubGluZUhlaWdodD1hO3RoaXMucGFyYU1hcmdpbj10fHx7dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjB9O2lmKCFlKXtbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChpKTtyZXR1cm59dGhpcy54ZmFGb250PXt0eXBlZmFjZTplLnR5cGVmYWNlLHBvc3R1cmU6ZS5wb3N0dXJlLHdlaWdodDplLndlaWdodCxzaXplOmUuc2l6ZSxsZXR0ZXJTcGFjaW5nOmUubGV0dGVyU3BhY2luZ307Y29uc3Qgbj1pLmZpbmQoZS50eXBlZmFjZSk7aWYobil7dGhpcy5wZGZGb250PSgwLHIuc2VsZWN0Rm9udCkoZSxuKTt0aGlzLnBkZkZvbnR8fChbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChpKSl9ZWxzZVt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KGkpfWRlZmF1bHRGb250KGUpe2NvbnN0IHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodD8ucmVndWxhcil7Y29uc3QgZT10LnJlZ3VsYXI7cmV0dXJuW2Use3R5cGVmYWNlOmUuY3NzRm9udEluZm8uZm9udEZhbWlseSxwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfXJldHVybltudWxsLHt0eXBlZmFjZToiQ291cmllciIscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX19Y2xhc3MgRm9udFNlbGVjdG9ye2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMuZm9udEZpbmRlcj1yO3RoaXMuc3RhY2s9W25ldyBGb250SW5mbyhlLHQsYSxyKV19cHVzaERhdGEoZSx0LGEpe2NvbnN0IHI9dGhpcy5zdGFjay5hdCgtMSk7Zm9yKGNvbnN0IHQgb2ZbInR5cGVmYWNlIiwicG9zdHVyZSIsIndlaWdodCIsInNpemUiLCJsZXR0ZXJTcGFjaW5nIl0pZVt0XXx8KGVbdF09ci54ZmFGb250W3RdKTtmb3IoY29uc3QgZSBvZlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0paXNOYU4odFtlXSkmJih0W2VdPXIucGFyYU1hcmdpbltlXSk7Y29uc3QgaT1uZXcgRm9udEluZm8oZSx0LGF8fHIubGluZUhlaWdodCx0aGlzLmZvbnRGaW5kZXIpO2kucGRmRm9udHx8KGkucGRmRm9udD1yLnBkZkZvbnQpO3RoaXMuc3RhY2sucHVzaChpKX1wb3BGb250KCl7dGhpcy5zdGFjay5wb3AoKX10b3BGb250KCl7cmV0dXJuIHRoaXMuc3RhY2suYXQoLTEpfX10LlRleHRNZWFzdXJlPWNsYXNzIFRleHRNZWFzdXJle2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMuZ2x5cGhzPVtdO3RoaXMuZm9udFNlbGVjdG9yPW5ldyBGb250U2VsZWN0b3IoZSx0LGEscik7dGhpcy5leHRyYUhlaWdodD0wfXB1c2hEYXRhKGUsdCxhKXt0aGlzLmZvbnRTZWxlY3Rvci5wdXNoRGF0YShlLHQsYSl9cG9wRm9udChlKXtyZXR1cm4gdGhpcy5mb250U2VsZWN0b3IucG9wRm9udCgpfWFkZFBhcmEoKXtjb25zdCBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219YWRkU3RyaW5nKGUpe2lmKCFlKXJldHVybjtjb25zdCB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxhPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7Y29uc3Qgcj10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxpPXQucGRmRm9udCxuPWkubGluZUhlaWdodHx8MS4yLHM9dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIsbikqYSxvPW4tKHZvaWQgMD09PWkubGluZUdhcD8uMjppLmxpbmVHYXApLGM9TWF0aC5tYXgoMSxvKSphLGw9YS8xZTMsaD1pLmRlZmF1bHRXaWR0aHx8aS5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGg7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvW1x1MjAyOVxuXS8pKXtjb25zdCBlPWkuZW5jb2RlU3RyaW5nKHQpLmpvaW4oIiIpLGE9aS5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIGEpe2NvbnN0IHQ9ZS53aWR0aHx8aDt0aGlzLmdseXBocy5wdXNoKFt0KmwrcixzLGMsZS51bmljb2RlLCExXSl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpfWVsc2V7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvW1x1MjAyOVxuXS8pKXtmb3IoY29uc3QgZSBvZiB0LnNwbGl0KCIiKSl0aGlzLmdseXBocy5wdXNoKFthLDEuMiphLGEsZSwhMV0pO3RoaXMuZ2x5cGhzLnB1c2goWzAsMCwwLCJcbiIsITBdKX10aGlzLmdseXBocy5wb3AoKX19Y29tcHV0ZShlKXtsZXQgdD0tMSxhPTAscj0wLGk9MCxuPTAscz0wLG89ITEsYz0hMDtmb3IobGV0IGw9MCxoPXRoaXMuZ2x5cGhzLmxlbmd0aDtsPGg7bCsrKXtjb25zdFtoLHUsZCxmLGddPXRoaXMuZ2x5cGhzW2xdLHA9IiAiPT09ZixtPWM/ZDp1O2lmKGcpe3I9TWF0aC5tYXgocixuKTtuPTA7aSs9cztzPW07dD0tMTthPTA7Yz0hMX1lbHNlIGlmKHApaWYobitoPmUpe3I9TWF0aC5tYXgocixuKTtuPTA7aSs9cztzPW07dD0tMTthPTA7bz0hMDtjPSExfWVsc2V7cz1NYXRoLm1heChtLHMpO2E9bjtuKz1oO3Q9bH1lbHNlIGlmKG4raD5lKXtpKz1zO3M9bTtpZigtMSE9PXQpe2w9dDtyPU1hdGgubWF4KHIsYSk7bj0wO3Q9LTE7YT0wfWVsc2V7cj1NYXRoLm1heChyLG4pO249aH1vPSEwO2M9ITF9ZWxzZXtuKz1oO3M9TWF0aC5tYXgobSxzKX19cj1NYXRoLm1heChyLG4pO2krPXMrdGhpcy5leHRyYUhlaWdodDtyZXR1cm57d2lkdGg6MS4wMipyLGhlaWdodDppLGlzQnJva2VuOm99fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EYXRhSGFuZGxlcj12b2lkIDA7dmFyIHI9YSg3OCk7dC5EYXRhSGFuZGxlcj1jbGFzcyBEYXRhSGFuZGxlcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGF0YT10O3RoaXMuZGF0YXNldD1lLmRhdGFzZXRzfHxudWxsfXNlcmlhbGl6ZShlKXtjb25zdCB0PVtbLTEsdGhpcy5kYXRhW3IuJGdldENoaWxkcmVuXSgpXV07Zm9yKDt0Lmxlbmd0aD4wOyl7Y29uc3QgYT10LmF0KC0xKSxbaSxuXT1hO2lmKGkrMT09PW4ubGVuZ3RoKXt0LnBvcCgpO2NvbnRpbnVlfWNvbnN0IHM9blsrK2FbMF1dLG89ZS5nZXQoc1tyLiR1aWRdKTtpZihvKXNbci4kc2V0VmFsdWVdKG8pO2Vsc2V7Y29uc3QgdD1zW3IuJGdldEF0dHJpYnV0ZXNdKCk7Zm9yKGNvbnN0IGEgb2YgdC52YWx1ZXMoKSl7Y29uc3QgdD1lLmdldChhW3IuJHVpZF0pO2lmKHQpe2Fbci4kc2V0VmFsdWVdKHQpO2JyZWFrfX19Y29uc3QgYz1zW3IuJGdldENoaWxkcmVuXSgpO2MubGVuZ3RoPjAmJnQucHVzaChbLTEsY10pfWNvbnN0IGE9Wyc8eGZhOmRhdGFzZXRzIHhtbG5zOnhmYT0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8xLjAvIj4nXTtpZih0aGlzLmRhdGFzZXQpZm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhc2V0W3IuJGdldENoaWxkcmVuXSgpKSJkYXRhIiE9PWVbci4kbm9kZU5hbWVdJiZlW3IuJHRvU3RyaW5nXShhKTt0aGlzLmRhdGFbci4kdG9TdHJpbmddKGEpO2EucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iik7cmV0dXJuIGEuam9pbigiIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhGQVBhcnNlcj12b2lkIDA7dmFyIHI9YSg3OCksaT1hKDY3KSxuPWEoOTApLHM9YSgyKTtjbGFzcyBYRkFQYXJzZXIgZXh0ZW5kcyBpLlhNTFBhcnNlckJhc2V7Y29uc3RydWN0b3IoZT1udWxsLHQ9ITEpe3N1cGVyKCk7dGhpcy5fYnVpbGRlcj1uZXcgbi5CdWlsZGVyKGUpO3RoaXMuX3N0YWNrPVtdO3RoaXMuX2dsb2JhbERhdGE9e3VzZWRUeXBlZmFjZXM6bmV3IFNldH07dGhpcy5faWRzPW5ldyBNYXA7dGhpcy5fY3VycmVudD10aGlzLl9idWlsZGVyLmJ1aWxkUm9vdCh0aGlzLl9pZHMpO3RoaXMuX2Vycm9yQ29kZT1pLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yO3RoaXMuX3doaXRlUmVnZXg9L15ccyskLzt0aGlzLl9uYnNwcz0vXHhhMCsvZzt0aGlzLl9yaWNoVGV4dD10fXBhcnNlKGUpe3RoaXMucGFyc2VYbWwoZSk7aWYodGhpcy5fZXJyb3JDb2RlPT09aS5YTUxQYXJzZXJFcnJvckNvZGUuTm9FcnJvcil7dGhpcy5fY3VycmVudFtyLiRmaW5hbGl6ZV0oKTtyZXR1cm4gdGhpcy5fY3VycmVudC5lbGVtZW50fX1vblRleHQoZSl7ZT1lLnJlcGxhY2UodGhpcy5fbmJzcHMsKGU9PmUuc2xpY2UoMSkrIiAiKSk7dGhpcy5fcmljaFRleHR8fHRoaXMuX2N1cnJlbnRbci4kYWNjZXB0V2hpdGVzcGFjZV0oKT90aGlzLl9jdXJyZW50W3IuJG9uVGV4dF0oZSx0aGlzLl9yaWNoVGV4dCk6dGhpcy5fd2hpdGVSZWdleC50ZXN0KGUpfHx0aGlzLl9jdXJyZW50W3IuJG9uVGV4dF0oZS50cmltKCkpfW9uQ2RhdGEoZSl7dGhpcy5fY3VycmVudFtyLiRvblRleHRdKGUpfV9ta0F0dHJpYnV0ZXMoZSx0KXtsZXQgYT1udWxsLGk9bnVsbDtjb25zdCBuPU9iamVjdC5jcmVhdGUoe30pO2Zvcihjb25zdHtuYW1lOm8sdmFsdWU6Y31vZiBlKWlmKCJ4bWxucyI9PT1vKWE/KDAscy53YXJuKShgWEZBIC0gbXVsdGlwbGUgbmFtZXNwYWNlIGRlZmluaXRpb24gaW4gPCR7dH0+YCk6YT1jO2Vsc2UgaWYoby5zdGFydHNXaXRoKCJ4bWxuczoiKSl7Y29uc3QgZT1vLnN1YnN0cmluZyg2KTtpfHwoaT1bXSk7aS5wdXNoKHtwcmVmaXg6ZSx2YWx1ZTpjfSl9ZWxzZXtjb25zdCBlPW8uaW5kZXhPZigiOiIpO2lmKC0xPT09ZSluW29dPWM7ZWxzZXtsZXQgdD1uW3IuJG5zQXR0cmlidXRlc107dHx8KHQ9bltyLiRuc0F0dHJpYnV0ZXNdPU9iamVjdC5jcmVhdGUobnVsbCkpO2NvbnN0W2EsaV09W28uc2xpY2UoMCxlKSxvLnNsaWNlKGUrMSldOyh0W2FdfHw9T2JqZWN0LmNyZWF0ZShudWxsKSlbaV09Y319cmV0dXJuW2EsaSxuXX1fZ2V0TmFtZUFuZFByZWZpeChlLHQpe2NvbnN0IGE9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1hP1tlLG51bGxdOltlLnN1YnN0cmluZyhhKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxhKV19b25CZWdpbkVsZW1lbnQoZSx0LGEpe2NvbnN0W2ksbixzXT10aGlzLl9ta0F0dHJpYnV0ZXModCxlKSxbbyxjXT10aGlzLl9nZXROYW1lQW5kUHJlZml4KGUsdGhpcy5fYnVpbGRlci5pc05zQWdub3N0aWMoKSksbD10aGlzLl9idWlsZGVyLmJ1aWxkKHtuc1ByZWZpeDpjLG5hbWU6byxhdHRyaWJ1dGVzOnMsbmFtZXNwYWNlOmkscHJlZml4ZXM6bn0pO2xbci4kZ2xvYmFsRGF0YV09dGhpcy5fZ2xvYmFsRGF0YTtpZihhKXtsW3IuJGZpbmFsaXplXSgpO3RoaXMuX2N1cnJlbnRbci4kb25DaGlsZF0obCkmJmxbci4kc2V0SWRdKHRoaXMuX2lkcyk7bFtyLiRjbGVhbl0odGhpcy5fYnVpbGRlcil9ZWxzZXt0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnQpO3RoaXMuX2N1cnJlbnQ9bH19b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9dGhpcy5fY3VycmVudDtpZih0W3IuJGlzQ0RBVEFYbWxdKCkmJiJzdHJpbmciPT10eXBlb2YgdFtyLiRjb250ZW50XSl7Y29uc3QgZT1uZXcgWEZBUGFyc2VyO2UuX2dsb2JhbERhdGE9dGhpcy5fZ2xvYmFsRGF0YTtjb25zdCBhPWUucGFyc2UodFtyLiRjb250ZW50XSk7dFtyLiRjb250ZW50XT1udWxsO3Rbci4kb25DaGlsZF0oYSl9dFtyLiRmaW5hbGl6ZV0oKTt0aGlzLl9jdXJyZW50PXRoaXMuX3N0YWNrLnBvcCgpO3RoaXMuX2N1cnJlbnRbci4kb25DaGlsZF0odCkmJnRbci4kc2V0SWRdKHRoaXMuX2lkcyk7dFtyLiRjbGVhbl0odGhpcy5fYnVpbGRlcil9b25FcnJvcihlKXt0aGlzLl9lcnJvckNvZGU9ZX19dC5YRkFQYXJzZXI9WEZBUGFyc2VyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQnVpbGRlcj12b2lkIDA7dmFyIHI9YSg4MCksaT1hKDc4KSxuPWEoOTEpLHM9YSg4Myksbz1hKDEwMCksYz1hKDIpO2NsYXNzIFJvb3QgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigtMSwicm9vdCIsT2JqZWN0LmNyZWF0ZShudWxsKSk7dGhpcy5lbGVtZW50PW51bGw7dGhpc1tpLiRpZHNdPWV9W2kuJG9uQ2hpbGRdKGUpe3RoaXMuZWxlbWVudD1lO3JldHVybiEwfVtpLiRmaW5hbGl6ZV0oKXtzdXBlcltpLiRmaW5hbGl6ZV0oKTtpZih0aGlzLmVsZW1lbnQudGVtcGxhdGUgaW5zdGFuY2VvZiBzLlRlbXBsYXRlKXt0aGlzW2kuJGlkc10uc2V0KGkuJHJvb3QsdGhpcy5lbGVtZW50KTt0aGlzLmVsZW1lbnQudGVtcGxhdGVbaS4kcmVzb2x2ZVByb3RvdHlwZXNdKHRoaXNbaS4kaWRzXSk7dGhpcy5lbGVtZW50LnRlbXBsYXRlW2kuJGlkc109dGhpc1tpLiRpZHNdfX19Y2xhc3MgRW1wdHkgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC0xLCIiLE9iamVjdC5jcmVhdGUobnVsbCkpfVtpLiRvbkNoaWxkXShlKXtyZXR1cm4hMX19dC5CdWlsZGVyPWNsYXNzIEJ1aWxkZXJ7Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLl9uYW1lc3BhY2VTdGFjaz1bXTt0aGlzLl9uc0Fnbm9zdGljTGV2ZWw9MDt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcz1uZXcgTWFwO3RoaXMuX25hbWVzcGFjZXM9bmV3IE1hcDt0aGlzLl9uZXh0TnNJZD1NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKHIuTmFtZXNwYWNlSWRzKS5tYXAoKCh7aWQ6ZX0pPT5lKSkpO3RoaXMuX2N1cnJlbnROYW1lc3BhY2U9ZXx8bmV3IG8uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKX1idWlsZFJvb3QoZSl7cmV0dXJuIG5ldyBSb290KGUpfWJ1aWxkKHtuc1ByZWZpeDplLG5hbWU6dCxhdHRyaWJ1dGVzOmEsbmFtZXNwYWNlOnMscHJlZml4ZXM6b30pe2NvbnN0IGM9bnVsbCE9PXM7aWYoYyl7dGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKTt0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShzKX1vJiZ0aGlzLl9hZGROYW1lc3BhY2VQcmVmaXgobyk7aWYoYS5oYXNPd25Qcm9wZXJ0eShpLiRuc0F0dHJpYnV0ZXMpKXtjb25zdCBlPW4uTmFtZXNwYWNlU2V0VXAuZGF0YXNldHMsdD1hW2kuJG5zQXR0cmlidXRlc107bGV0IHI9bnVsbDtmb3IoY29uc3RbYSxpXW9mIE9iamVjdC5lbnRyaWVzKHQpKXtpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZShhKT09PWUpe3I9e3hmYTppfTticmVha319cj9hW2kuJG5zQXR0cmlidXRlc109cjpkZWxldGUgYVtpLiRuc0F0dHJpYnV0ZXNdfWNvbnN0IGw9dGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UoZSksaD1sPy5bci4kYnVpbGRYRkFPYmplY3RdKHQsYSl8fG5ldyBFbXB0eTtoW2kuJGlzTnNBZ25vc3RpY10oKSYmdGhpcy5fbnNBZ25vc3RpY0xldmVsKys7KGN8fG98fGhbaS4kaXNOc0Fnbm9zdGljXSgpKSYmKGhbaS4kY2xlYW51cF09e2hhc05hbWVzcGFjZTpjLHByZWZpeGVzOm8sbnNBZ25vc3RpYzpoW2kuJGlzTnNBZ25vc3RpY10oKX0pO3JldHVybiBofWlzTnNBZ25vc3RpYygpe3JldHVybiB0aGlzLl9uc0Fnbm9zdGljTGV2ZWw+MH1fc2VhcmNoTmFtZXNwYWNlKGUpe2xldCB0PXRoaXMuX25hbWVzcGFjZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Zm9yKGNvbnN0W2Ese2NoZWNrOml9XW9mIE9iamVjdC5lbnRyaWVzKHIuTmFtZXNwYWNlSWRzKSlpZihpKGUpKXt0PW4uTmFtZXNwYWNlU2V0VXBbYV07aWYodCl7dGhpcy5fbmFtZXNwYWNlcy5zZXQoZSx0KTtyZXR1cm4gdH1icmVha310PW5ldyBvLlVua25vd25OYW1lc3BhY2UoKyt0aGlzLl9uZXh0TnNJZCk7dGhpcy5fbmFtZXNwYWNlcy5zZXQoZSx0KTtyZXR1cm4gdH1fYWRkTmFtZXNwYWNlUHJlZml4KGUpe2Zvcihjb25zdHtwcmVmaXg6dCx2YWx1ZTphfW9mIGUpe2NvbnN0IGU9dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGEpO2xldCByPXRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldCh0KTtpZighcil7cj1bXTt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5zZXQodCxyKX1yLnB1c2goZSl9fV9nZXROYW1lc3BhY2VUb1VzZShlKXtpZighZSlyZXR1cm4gdGhpcy5fY3VycmVudE5hbWVzcGFjZTtjb25zdCB0PXRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldChlKTtpZih0Py5sZW5ndGg+MClyZXR1cm4gdC5hdCgtMSk7KDAsYy53YXJuKShgVW5rbm93biBuYW1lc3BhY2UgcHJlZml4OiAke2V9LmApO3JldHVybiBudWxsfWNsZWFuKGUpe2NvbnN0e2hhc05hbWVzcGFjZTp0LHByZWZpeGVzOmEsbnNBZ25vc3RpYzpyfT1lO3QmJih0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX25hbWVzcGFjZVN0YWNrLnBvcCgpKTthJiZhLmZvckVhY2goKCh7cHJlZml4OmV9KT0+e3RoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldChlKS5wb3AoKX0pKTtyJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwtLX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTmFtZXNwYWNlU2V0VXA9dm9pZCAwO3ZhciByPWEoOTIpLGk9YSg5Myksbj1hKDk0KSxzPWEoOTUpLG89YSg5NiksYz1hKDk3KSxsPWEoODMpLGg9YSg5OCksdT1hKDk5KTtjb25zdCBkPXtjb25maWc6ci5Db25maWdOYW1lc3BhY2UsY29ubmVjdGlvbjppLkNvbm5lY3Rpb25TZXROYW1lc3BhY2UsZGF0YXNldHM6bi5EYXRhc2V0c05hbWVzcGFjZSxsb2NhbGVTZXQ6cy5Mb2NhbGVTZXROYW1lc3BhY2Usc2lnbmF0dXJlOm8uU2lnbmF0dXJlTmFtZXNwYWNlLHN0eWxlc2hlZXQ6Yy5TdHlsZXNoZWV0TmFtZXNwYWNlLHRlbXBsYXRlOmwuVGVtcGxhdGVOYW1lc3BhY2UseGRwOmguWGRwTmFtZXNwYWNlLHhodG1sOnUuWGh0bWxOYW1lc3BhY2V9O3QuTmFtZXNwYWNlU2V0VXA9ZH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNvbmZpZ05hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg4MCksaT1hKDc4KSxuPWEoNzkpLHM9YSgyKTtjb25zdCBvPXIuTmFtZXNwYWNlSWRzLmNvbmZpZy5pZDtjbGFzcyBBY3JvYmF0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYWNyb2JhdCIsITApO3RoaXMuYWNyb2JhdDc9bnVsbDt0aGlzLmF1dG9TYXZlPW51bGw7dGhpcy5jb21tb249bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy52YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcz1udWxsO3RoaXMuc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBBY3JvYmF0NyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFjcm9iYXQ3IiwhMCk7dGhpcy5keW5hbWljUmVuZGVyPW51bGx9fWNsYXNzIEFEQkVfSlNDb25zb2xlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiQURCRV9KU0NvbnNvbGUiLFsiZGVsZWdhdGUiLCJFbmFibGUiLCJEaXNhYmxlIl0pfX1jbGFzcyBBREJFX0pTRGVidWdnZXIgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJBREJFX0pTRGVidWdnZXIiLFsiZGVsZWdhdGUiLCJFbmFibGUiLCJEaXNhYmxlIl0pfX1jbGFzcyBBZGRTaWxlbnRQcmludCBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYWRkU2lsZW50UHJpbnQiKX19Y2xhc3MgQWRkVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFkZFZpZXdlclByZWZlcmVuY2VzIil9fWNsYXNzIEFkanVzdERhdGEgZXh0ZW5kcyBpLk9wdGlvbjEwe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFkanVzdERhdGEiKX19Y2xhc3MgQWRvYmVFeHRlbnNpb25MZXZlbCBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhZG9iZUV4dGVuc2lvbkxldmVsIiwwLChlPT5lPj0xJiZlPD04KSl9fWNsYXNzIEFnZW50IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYWdlbnQiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiI7dGhpcy5jb21tb249bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEFsd2F5c0VtYmVkIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFsd2F5c0VtYmVkIil9fWNsYXNzIEFtZCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFtZCIpfX1jbGFzcyBBcmVhIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYXJlYSIpO3RoaXMubGV2ZWw9KDAsbi5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxldmVsLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTEmJmU8PTN9KTt0aGlzLm5hbWU9KDAsbi5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pfX1jbGFzcyBBdHRyaWJ1dGVzIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYXR0cmlidXRlcyIsWyJwcmVzZXJ2ZSIsImRlbGVnYXRlIiwiaWdub3JlIl0pfX1jbGFzcyBBdXRvU2F2ZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImF1dG9TYXZlIixbImRpc2FibGVkIiwiZW5hYmxlZCJdKX19Y2xhc3MgQmFzZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImJhc2UiKX19Y2xhc3MgQmF0Y2hPdXRwdXQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJiYXRjaE91dHB1dCIpO3RoaXMuZm9ybWF0PSgwLG4uZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdCxbIm5vbmUiLCJjb25jYXQiLCJ6aXAiLCJ6aXBDb21wcmVzcyJdKX19Y2xhc3MgQmVoYXZpb3JPdmVycmlkZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJiZWhhdmlvck92ZXJyaWRlIil9W2kuJGZpbmFsaXplXSgpe3RoaXNbaS4kY29udGVudF09bmV3IE1hcCh0aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5lLmluY2x1ZGVzKCI6IikpKS5tYXAoKGU9PmUuc3BsaXQoIjoiLDIpKSkpfX1jbGFzcyBDYWNoZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNhY2hlIiwhMCk7dGhpcy50ZW1wbGF0ZUNhY2hlPW51bGx9fWNsYXNzIENoYW5nZSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY2hhbmdlIil9fWNsYXNzIENvbW1vbiBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbW1vbiIsITApO3RoaXMuZGF0YT1udWxsO3RoaXMubG9jYWxlPW51bGw7dGhpcy5sb2NhbGVTZXQ9bnVsbDt0aGlzLm1lc3NhZ2luZz1udWxsO3RoaXMuc3VwcHJlc3NCYW5uZXI9bnVsbDt0aGlzLnRlbXBsYXRlPW51bGw7dGhpcy52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGw7dGhpcy52ZXJzaW9uQ29udHJvbD1udWxsO3RoaXMubG9nPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBDb21wcmVzcyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbXByZXNzIik7dGhpcy5zY29wZT0oMCxuLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pfX1jbGFzcyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbXByZXNzTG9naWNhbFN0cnVjdHVyZSIpfX1jbGFzcyBDb21wcmVzc09iamVjdFN0cmVhbSBleHRlbmRzIGkuT3B0aW9uMTB7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29tcHJlc3NPYmplY3RTdHJlYW0iKX19Y2xhc3MgQ29tcHJlc3Npb24gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb21wcmVzc2lvbiIsITApO3RoaXMuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGw7dGhpcy5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsO3RoaXMubGV2ZWw9bnVsbDt0aGlzLnR5cGU9bnVsbH19Y2xhc3MgQ29uZmlnIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29uZmlnIiwhMCk7dGhpcy5hY3JvYmF0PW51bGw7dGhpcy5wcmVzZW50PW51bGw7dGhpcy50cmFjZT1udWxsO3RoaXMuYWdlbnQ9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIENvbmZvcm1hbmNlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9fWNsYXNzIENvbnRlbnRDb3B5IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb250ZW50Q29weSIpfX1jbGFzcyBDb3BpZXMgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29waWVzIiwxLChlPT5lPj0xKSl9fWNsYXNzIENyZWF0b3IgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjcmVhdG9yIil9fWNsYXNzIEN1cnJlbnRQYWdlIGV4dGVuZHMgaS5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImN1cnJlbnRQYWdlIiwwLChlPT5lPj0wKSl9fWNsYXNzIERhdGEgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJkYXRhIiwhMCk7dGhpcy5hZGp1c3REYXRhPW51bGw7dGhpcy5hdHRyaWJ1dGVzPW51bGw7dGhpcy5pbmNyZW1lbnRhbExvYWQ9bnVsbDt0aGlzLm91dHB1dFhTTD1udWxsO3RoaXMucmFuZ2U9bnVsbDt0aGlzLnJlY29yZD1udWxsO3RoaXMuc3RhcnROb2RlPW51bGw7dGhpcy51cmk9bnVsbDt0aGlzLndpbmRvdz1udWxsO3RoaXMueHNsPW51bGw7dGhpcy5leGNsdWRlTlM9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy50cmFuc2Zvcm09bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIERlYnVnIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZGVidWciLCEwKTt0aGlzLnVyaT1udWxsfX1jbGFzcyBEZWZhdWx0VHlwZWZhY2UgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZGVmYXVsdFR5cGVmYWNlIik7dGhpcy53cml0aW5nU2NyaXB0PSgwLG4uZ2V0U3RyaW5nT3B0aW9uKShlLndyaXRpbmdTY3JpcHQsWyIqIiwiQXJhYmljIiwiQ3lyaWxsaWMiLCJFYXN0RXVyb3BlYW5Sb21hbiIsIkdyZWVrIiwiSGVicmV3IiwiSmFwYW5lc2UiLCJLb3JlYW4iLCJSb21hbiIsIlNpbXBsaWZpZWRDaGluZXNlIiwiVGhhaSIsIlRyYWRpdGlvbmFsQ2hpbmVzZSIsIlZpZXRuYW1lc2UiXSl9fWNsYXNzIERlc3RpbmF0aW9uIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZGVzdGluYXRpb24iLFsicGRmIiwicGNsIiwicHMiLCJ3ZWJDbGllbnQiLCJ6cGwiXSl9fWNsYXNzIERvY3VtZW50QXNzZW1ibHkgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRvY3VtZW50QXNzZW1ibHkiKX19Y2xhc3MgRHJpdmVyIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZHJpdmVyIiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBEdXBsZXhPcHRpb24gZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJkdXBsZXhPcHRpb24iLFsic2ltcGxleCIsImR1cGxleEZsaXBMb25nRWRnZSIsImR1cGxleEZsaXBTaG9ydEVkZ2UiXSl9fWNsYXNzIER5bmFtaWNSZW5kZXIgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfX1jbGFzcyBFbWJlZCBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZW1iZWQiKX19Y2xhc3MgRW5jcnlwdCBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZW5jcnlwdCIpfX1jbGFzcyBFbmNyeXB0aW9uIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZW5jcnlwdGlvbiIsITApO3RoaXMuZW5jcnlwdD1udWxsO3RoaXMuZW5jcnlwdGlvbkxldmVsPW51bGw7dGhpcy5wZXJtaXNzaW9ucz1udWxsfX1jbGFzcyBFbmNyeXB0aW9uTGV2ZWwgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJlbmNyeXB0aW9uTGV2ZWwiLFsiNDBiaXQiLCIxMjhiaXQiXSl9fWNsYXNzIEVuZm9yY2UgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJlbmZvcmNlIil9fWNsYXNzIEVxdWF0ZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImVxdWF0ZSIpO3RoaXMuZm9yY2U9KDAsbi5nZXRJbnRlZ2VyKSh7ZGF0YTplLmZvcmNlLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PjA9PT1lfSk7dGhpcy5mcm9tPWUuZnJvbXx8IiI7dGhpcy50bz1lLnRvfHwiIn19Y2xhc3MgRXF1YXRlUmFuZ2UgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJlcXVhdGVSYW5nZSIpO3RoaXMuZnJvbT1lLmZyb218fCIiO3RoaXMudG89ZS50b3x8IiI7dGhpcy5fdW5pY29kZVJhbmdlPWUudW5pY29kZVJhbmdlfHwiIn1nZXQgdW5pY29kZVJhbmdlKCl7Y29uc3QgZT1bXSx0PS9VXCsoWzAtOWEtZkEtRl0rKS8sYT10aGlzLl91bmljb2RlUmFuZ2U7Zm9yKGxldCByIG9mIGEuc3BsaXQoIiwiKS5tYXAoKGU9PmUudHJpbSgpKSkuZmlsdGVyKChlPT4hIWUpKSl7cj1yLnNwbGl0KCItIiwyKS5tYXAoKGU9Pntjb25zdCBhPWUubWF0Y2godCk7cmV0dXJuIGE/cGFyc2VJbnQoYVsxXSwxNik6MH0pKTsxPT09ci5sZW5ndGgmJnIucHVzaChyWzBdKTtlLnB1c2gocil9cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsInVuaWNvZGVSYW5nZSIsZSl9fWNsYXNzIEV4Y2x1ZGUgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZXhjbHVkZSIpfVtpLiRmaW5hbGl6ZV0oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PmUmJlsiY2FsY3VsYXRlIiwiY2xvc2UiLCJlbnRlciIsImV4aXQiLCJpbml0aWFsaXplIiwicmVhZHkiLCJ2YWxpZGF0ZSJdLmluY2x1ZGVzKGUpKSl9fWNsYXNzIEV4Y2x1ZGVOUyBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImV4Y2x1ZGVOUyIpfX1jbGFzcyBGbGlwTGFiZWwgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJmbGlwTGFiZWwiLFsidXNlUHJpbnRlclNldHRpbmciLCJvbiIsIm9mZiJdKX19Y2xhc3MgRm9udEluZm8gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJmb250SW5mbyIsITApO3RoaXMuZW1iZWQ9bnVsbDt0aGlzLm1hcD1udWxsO3RoaXMuc3Vic2V0QmVsb3c9bnVsbDt0aGlzLmFsd2F5c0VtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMuZGVmYXVsdFR5cGVmYWNlPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMubmV2ZXJFbWJlZD1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgRm9ybUZpZWxkRmlsbGluZyBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZm9ybUZpZWxkRmlsbGluZyIpfX1jbGFzcyBHcm91cFBhcmVudCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImdyb3VwUGFyZW50Iil9fWNsYXNzIElmRW1wdHkgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJpZkVtcHR5IixbImRhdGFWYWx1ZSIsImRhdGFHcm91cCIsImlnbm9yZSIsInJlbW92ZSJdKX19Y2xhc3MgSW5jbHVkZVhEUENvbnRlbnQgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJpbmNsdWRlWERQQ29udGVudCIpfX1jbGFzcyBJbmNyZW1lbnRhbExvYWQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfX1jbGFzcyBJbmNyZW1lbnRhbE1lcmdlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJpbmNyZW1lbnRhbE1lcmdlIil9fWNsYXNzIEludGVyYWN0aXZlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJpbnRlcmFjdGl2ZSIpfX1jbGFzcyBKb2cgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX19Y2xhc3MgTGFiZWxQcmludGVyIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibGFiZWxQcmludGVyIiwhMCk7dGhpcy5uYW1lPSgwLG4uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJ6cGwiLCJkcGwiLCJpcGwiLCJ0Y3BsIl0pO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZsaXBMYWJlbD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBMYXlvdXQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJsYXlvdXQiLFsicGFnaW5hdGUiLCJwYW5lbCJdKX19Y2xhc3MgTGV2ZWwgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibGV2ZWwiLDAsKGU9PmU+MCkpfX1jbGFzcyBMaW5lYXJpemVkIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJsaW5lYXJpemVkIil9fWNsYXNzIExvY2FsZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImxvY2FsZSIpfX1jbGFzcyBMb2NhbGVTZXQgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJsb2NhbGVTZXQiKX19Y2xhc3MgTG9nIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibG9nIiwhMCk7dGhpcy5tb2RlPW51bGw7dGhpcy50aHJlc2hvbGQ9bnVsbDt0aGlzLnRvPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgTWFwRWxlbWVudCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm1hcCIsITApO3RoaXMuZXF1YXRlPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMuZXF1YXRlUmFuZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE1lZGl1bUluZm8gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtZWRpdW1JbmZvIiwhMCk7dGhpcy5tYXA9bnVsbH19Y2xhc3MgTWVzc2FnZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm1lc3NhZ2UiLCEwKTt0aGlzLm1zZ0lkPW51bGw7dGhpcy5zZXZlcml0eT1udWxsfX1jbGFzcyBNZXNzYWdpbmcgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtZXNzYWdpbmciLCEwKTt0aGlzLm1lc3NhZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE1vZGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtb2RlIixbImFwcGVuZCIsIm92ZXJ3cml0ZSJdKX19Y2xhc3MgTW9kaWZ5QW5ub3RzIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtb2RpZnlBbm5vdHMiKX19Y2xhc3MgTXNnSWQgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibXNnSWQiLDEsKGU9PmU+PTEpKX19Y2xhc3MgTmFtZUF0dHIgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJuYW1lQXR0ciIpfX1jbGFzcyBOZXZlckVtYmVkIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm5ldmVyRW1iZWQiKX19Y2xhc3MgTnVtYmVyT2ZDb3BpZXMgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibnVtYmVyT2ZDb3BpZXMiLG51bGwsKGU9PmU+PTImJmU8PTUpKX19Y2xhc3MgT3BlbkFjdGlvbiBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm9wZW5BY3Rpb24iLCEwKTt0aGlzLmRlc3RpbmF0aW9uPW51bGx9fWNsYXNzIE91dHB1dCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm91dHB1dCIsITApO3RoaXMudG89bnVsbDt0aGlzLnR5cGU9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBPdXRwdXRCaW4gZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJvdXRwdXRCaW4iKX19Y2xhc3MgT3V0cHV0WFNMIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywib3V0cHV0WFNMIiwhMCk7dGhpcy51cmk9bnVsbH19Y2xhc3MgT3ZlcnByaW50IGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywib3ZlcnByaW50IixbIm5vbmUiLCJib3RoIiwiZHJhdyIsImZpZWxkIl0pfX1jbGFzcyBQYWNrZXRzIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFja2V0cyIpfVtpLiRmaW5hbGl6ZV0oKXsiKiIhPT10aGlzW2kuJGNvbnRlbnRdJiYodGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5bImNvbmZpZyIsImRhdGFzZXRzIiwidGVtcGxhdGUiLCJ4ZmRmIiwieHNsdCJdLmluY2x1ZGVzKGUpKSkpfX1jbGFzcyBQYWdlT2Zmc2V0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFnZU9mZnNldCIpO3RoaXMueD0oMCxuLmdldEludGVnZXIpKHtkYXRhOmUueCxkZWZhdWx0VmFsdWU6InVzZVhEQ1NldHRpbmciLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy55PSgwLG4uZ2V0SW50ZWdlcikoe2RhdGE6ZS55LGRlZmF1bHRWYWx1ZToidXNlWERDU2V0dGluZyIsdmFsaWRhdGU6ZT0+ITB9KX19Y2xhc3MgUGFnZVJhbmdlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFnZVJhbmdlIil9W2kuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZT0+cGFyc2VJbnQoZSwxMCkpKSx0PVtdO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErPTIpdC5wdXNoKGUuc2xpY2UoYSxhKzIpKTt0aGlzW2kuJGNvbnRlbnRdPXR9fWNsYXNzIFBhZ2luYXRpb24gZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwYWdpbmF0aW9uIixbInNpbXBsZXgiLCJkdXBsZXhTaG9ydEVkZ2UiLCJkdXBsZXhMb25nRWRnZSJdKX19Y2xhc3MgUGFnaW5hdGlvbk92ZXJyaWRlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFnaW5hdGlvbk92ZXJyaWRlIixbIm5vbmUiLCJmb3JjZUR1cGxleCIsImZvcmNlRHVwbGV4TG9uZ0VkZ2UiLCJmb3JjZUR1cGxleFNob3J0RWRnZSIsImZvcmNlU2ltcGxleCJdKX19Y2xhc3MgUGFydCBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwYXJ0IiwxLChlPT4hMSkpfX1jbGFzcyBQY2wgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwY2wiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMuam9nPW51bGw7dGhpcy5tZWRpdW1JbmZvPW51bGw7dGhpcy5vdXRwdXRCaW49bnVsbDt0aGlzLnBhZ2VPZmZzZXQ9bnVsbDt0aGlzLnN0YXBsZT1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFBkZiBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBkZiIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmNvbXByZXNzaW9uPW51bGw7dGhpcy5jcmVhdG9yPW51bGw7dGhpcy5lbmNyeXB0aW9uPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMuaW50ZXJhY3RpdmU9bnVsbDt0aGlzLmxpbmVhcml6ZWQ9bnVsbDt0aGlzLm9wZW5BY3Rpb249bnVsbDt0aGlzLnBkZmE9bnVsbDt0aGlzLnByb2R1Y2VyPW51bGw7dGhpcy5yZW5kZXJQb2xpY3k9bnVsbDt0aGlzLnNjcmlwdE1vZGVsPW51bGw7dGhpcy5zaWxlbnRQcmludD1udWxsO3RoaXMuc3VibWl0Rm9ybWF0PW51bGw7dGhpcy50YWdnZWQ9bnVsbDt0aGlzLnZlcnNpb249bnVsbDt0aGlzLnZpZXdlclByZWZlcmVuY2VzPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUGRmYSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBkZmEiLCEwKTt0aGlzLmFtZD1udWxsO3RoaXMuY29uZm9ybWFuY2U9bnVsbDt0aGlzLmluY2x1ZGVYRFBDb250ZW50PW51bGw7dGhpcy5wYXJ0PW51bGx9fWNsYXNzIFBlcm1pc3Npb25zIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGVybWlzc2lvbnMiLCEwKTt0aGlzLmFjY2Vzc2libGVDb250ZW50PW51bGw7dGhpcy5jaGFuZ2U9bnVsbDt0aGlzLmNvbnRlbnRDb3B5PW51bGw7dGhpcy5kb2N1bWVudEFzc2VtYmx5PW51bGw7dGhpcy5mb3JtRmllbGRGaWxsaW5nPW51bGw7dGhpcy5tb2RpZnlBbm5vdHM9bnVsbDt0aGlzLnBsYWludGV4dE1ldGFkYXRhPW51bGw7dGhpcy5wcmludD1udWxsO3RoaXMucHJpbnRIaWdoUXVhbGl0eT1udWxsfX1jbGFzcyBQaWNrVHJheUJ5UERGU2l6ZSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGlja1RyYXlCeVBERlNpemUiKX19Y2xhc3MgUGljdHVyZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBpY3R1cmUiKX19Y2xhc3MgUGxhaW50ZXh0TWV0YWRhdGEgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBsYWludGV4dE1ldGFkYXRhIil9fWNsYXNzIFByZXNlbmNlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJlc2VuY2UiLFsicHJlc2VydmUiLCJkaXNzb2x2ZSIsImRpc3NvbHZlU3RydWN0dXJlIiwiaWdub3JlIiwicmVtb3ZlIl0pfX1jbGFzcyBQcmVzZW50IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJlc2VudCIsITApO3RoaXMuYmVoYXZpb3JPdmVycmlkZT1udWxsO3RoaXMuY2FjaGU9bnVsbDt0aGlzLmNvbW1vbj1udWxsO3RoaXMuY29waWVzPW51bGw7dGhpcy5kZXN0aW5hdGlvbj1udWxsO3RoaXMuaW5jcmVtZW50YWxNZXJnZT1udWxsO3RoaXMubGF5b3V0PW51bGw7dGhpcy5vdXRwdXQ9bnVsbDt0aGlzLm92ZXJwcmludD1udWxsO3RoaXMucGFnaW5hdGlvbj1udWxsO3RoaXMucGFnaW5hdGlvbk92ZXJyaWRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy54ZHA9bnVsbDt0aGlzLmRyaXZlcj1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLmxhYmVsUHJpbnRlcj1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnBjbD1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnBkZj1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnBzPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMuc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMud2ViQ2xpZW50PW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMuenBsPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBQcmludCBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJpbnQiKX19Y2xhc3MgUHJpbnRIaWdoUXVhbGl0eSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJpbnRIaWdoUXVhbGl0eSIpfX1jbGFzcyBQcmludFNjYWxpbmcgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwcmludFNjYWxpbmciLFsiYXBwZGVmYXVsdCIsIm5vU2NhbGluZyJdKX19Y2xhc3MgUHJpbnRlck5hbWUgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwcmludGVyTmFtZSIpfX1jbGFzcyBQcm9kdWNlciBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByb2R1Y2VyIil9fWNsYXNzIFBzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHMiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMuam9nPW51bGw7dGhpcy5tZWRpdW1JbmZvPW51bGw7dGhpcy5vdXRwdXRCaW49bnVsbDt0aGlzLnN0YXBsZT1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFJhbmdlIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInJhbmdlIil9W2kuJGZpbmFsaXplXSgpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZT0+ZS5zcGxpdCgiLSIpLm1hcCgoZT0+cGFyc2VJbnQoZS50cmltKCksMTApKSkpKS5maWx0ZXIoKGU9PmUuZXZlcnkoKGU9PiFpc05hTihlKSkpKSkubWFwKChlPT57MT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSk7cmV0dXJuIGV9KSl9fWNsYXNzIFJlY29yZCBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJyZWNvcmQiKX1baS4kZmluYWxpemVdKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKTtjb25zdCBlPXBhcnNlSW50KHRoaXNbaS4kY29udGVudF0sMTApOyFpc05hTihlKSYmZT49MCYmKHRoaXNbaS4kY29udGVudF09ZSl9fWNsYXNzIFJlbGV2YW50IGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInJlbGV2YW50Iil9W2kuJGZpbmFsaXplXSgpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pfX1jbGFzcyBSZW5hbWUgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicmVuYW1lIil9W2kuJGZpbmFsaXplXSgpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCk7KHRoaXNbaS4kY29udGVudF0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJ4bWwiKXx8bmV3IFJlZ0V4cCgiW1xccHtMfV9dW1xccHtMfVxcZC5fXFxwe019LV0qIiwidSIpLnRlc3QodGhpc1tpLiRjb250ZW50XSkpJiYoMCxzLndhcm4pKCJYRkEgLSBSZW5hbWU6IGludmFsaWQgWEZBIG5hbWUiKX19Y2xhc3MgUmVuZGVyUG9saWN5IGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicmVuZGVyUG9saWN5IixbInNlcnZlciIsImNsaWVudCJdKX19Y2xhc3MgUnVuU2NyaXB0cyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInJ1blNjcmlwdHMiLFsiYm90aCIsImNsaWVudCIsIm5vbmUiLCJzZXJ2ZXIiXSl9fWNsYXNzIFNjcmlwdCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInNjcmlwdCIsITApO3RoaXMuY3VycmVudFBhZ2U9bnVsbDt0aGlzLmV4Y2x1ZGU9bnVsbDt0aGlzLnJ1blNjcmlwdHM9bnVsbH19Y2xhc3MgU2NyaXB0TW9kZWwgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzY3JpcHRNb2RlbCIsWyJYRkEiLCJub25lIl0pfX1jbGFzcyBTZXZlcml0eSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInNldmVyaXR5IixbImlnbm9yZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ0cmFjZSIsIndhcm5pbmciXSl9fWNsYXNzIFNpbGVudFByaW50IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic2lsZW50UHJpbnQiLCEwKTt0aGlzLmFkZFNpbGVudFByaW50PW51bGw7dGhpcy5wcmludGVyTmFtZT1udWxsfX1jbGFzcyBTdGFwbGUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzdGFwbGUiKTt0aGlzLm1vZGU9KDAsbi5nZXRTdHJpbmdPcHRpb24pKGUubW9kZSxbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9fWNsYXNzIFN0YXJ0Tm9kZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInN0YXJ0Tm9kZSIpfX1jbGFzcyBTdGFydFBhZ2UgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3RhcnRQYWdlIiwwLChlPT4hMCkpfX1jbGFzcyBTdWJtaXRGb3JtYXQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzdWJtaXRGb3JtYXQiLFsiaHRtbCIsImRlbGVnYXRlIiwiZmRmIiwieG1sIiwicGRmIl0pfX1jbGFzcyBTdWJtaXRVcmwgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzdWJtaXRVcmwiKX19Y2xhc3MgU3Vic2V0QmVsb3cgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3Vic2V0QmVsb3ciLDEwMCwoZT0+ZT49MCYmZTw9MTAwKSl9fWNsYXNzIFN1cHByZXNzQmFubmVyIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzdXBwcmVzc0Jhbm5lciIpfX1jbGFzcyBUYWdnZWQgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInRhZ2dlZCIpfX1jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlPW51bGw7dGhpcy5yZWxldmFudD1udWxsO3RoaXMuc3RhcnRQYWdlPW51bGw7dGhpcy51cmk9bnVsbDt0aGlzLnhzbD1udWxsfX1jbGFzcyBUaHJlc2hvbGQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0aHJlc2hvbGQiLFsidHJhY2UiLCJlcnJvciIsImluZm9ybWF0aW9uIiwid2FybmluZyJdKX19Y2xhc3MgVG8gZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0byIsWyJudWxsIiwibWVtb3J5Iiwic3RkZXJyIiwic3Rkb3V0Iiwic3lzdGVtIiwidXJpIl0pfX1jbGFzcyBUZW1wbGF0ZUNhY2hlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidGVtcGxhdGVDYWNoZSIpO3RoaXMubWF4RW50cmllcz0oMCxuLmdldEludGVnZXIpKHtkYXRhOmUubWF4RW50cmllcyxkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIFRyYWNlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidHJhY2UiLCEwKTt0aGlzLmFyZWE9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRyYW5zZm9ybSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInRyYW5zZm9ybSIsITApO3RoaXMuZ3JvdXBQYXJlbnQ9bnVsbDt0aGlzLmlmRW1wdHk9bnVsbDt0aGlzLm5hbWVBdHRyPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5wcmVzZW5jZT1udWxsO3RoaXMucmVuYW1lPW51bGw7dGhpcy53aGl0ZXNwYWNlPW51bGx9fWNsYXNzIFR5cGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0eXBlIixbIm5vbmUiLCJhc2NpaTg1IiwiYXNjaWlIZXgiLCJjY2l0dGZheCIsImZsYXRlIiwibHp3IiwicnVuTGVuZ3RoIiwibmF0aXZlIiwieGRwIiwibWVyZ2VkWERQIl0pfX1jbGFzcyBVcmkgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ1cmkiKX19Y2xhc3MgVmFsaWRhdGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfX1jbGFzcyBWYWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ2YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyIpfVtpLiRmaW5hbGl6ZV0oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PlsiZG9jUmVhZHkiLCJwb3N0U2lnbiJdLmluY2x1ZGVzKGUpKSl9fWNsYXNzIFZhbGlkYXRpb25NZXNzYWdpbmcgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ2YWxpZGF0aW9uTWVzc2FnaW5nIixbImFsbE1lc3NhZ2VzSW5kaXZpZHVhbGx5IiwiYWxsTWVzc2FnZXNUb2dldGhlciIsImZpcnN0TWVzc2FnZU9ubHkiLCJub01lc3NhZ2VzIl0pfX1jbGFzcyBWZXJzaW9uIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9fWNsYXNzIFZlcnNpb25Db250cm9sIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiVmVyc2lvbkNvbnRyb2wiKTt0aGlzLm91dHB1dEJlbG93PSgwLG4uZ2V0U3RyaW5nT3B0aW9uKShlLm91dHB1dEJlbG93LFsid2FybiIsImVycm9yIiwidXBkYXRlIl0pO3RoaXMuc291cmNlQWJvdmU9KDAsbi5nZXRTdHJpbmdPcHRpb24pKGUuc291cmNlQWJvdmUsWyJ3YXJuIiwiZXJyb3IiXSk7dGhpcy5zb3VyY2VCZWxvdz0oMCxuLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VCZWxvdyxbInVwZGF0ZSIsIm1haW50YWluIl0pfX1jbGFzcyBWaWV3ZXJQcmVmZXJlbmNlcyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInZpZXdlclByZWZlcmVuY2VzIiwhMCk7dGhpcy5BREJFX0pTQ29uc29sZT1udWxsO3RoaXMuQURCRV9KU0RlYnVnZ2VyPW51bGw7dGhpcy5hZGRWaWV3ZXJQcmVmZXJlbmNlcz1udWxsO3RoaXMuZHVwbGV4T3B0aW9uPW51bGw7dGhpcy5lbmZvcmNlPW51bGw7dGhpcy5udW1iZXJPZkNvcGllcz1udWxsO3RoaXMucGFnZVJhbmdlPW51bGw7dGhpcy5waWNrVHJheUJ5UERGU2l6ZT1udWxsO3RoaXMucHJpbnRTY2FsaW5nPW51bGx9fWNsYXNzIFdlYkNsaWVudCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIndlYkNsaWVudCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgV2hpdGVzcGFjZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIndoaXRlc3BhY2UiLFsicHJlc2VydmUiLCJsdHJpbSIsIm5vcm1hbGl6ZSIsInJ0cmltIiwidHJpbSJdKX19Y2xhc3MgV2luZG93IGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIndpbmRvdyIpfVtpLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccyosXHMqLywyKS5tYXAoKGU9PnBhcnNlSW50KGUsMTApKSk7aWYoZS5zb21lKChlPT5pc05hTihlKSkpKXRoaXNbaS4kY29udGVudF09WzAsMF07ZWxzZXsxPT09ZS5sZW5ndGgmJmUucHVzaChlWzBdKTt0aGlzW2kuJGNvbnRlbnRdPWV9fX1jbGFzcyBYZGMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ4ZGMiLCEwKTt0aGlzLnVyaT1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnhzbD1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgWGRwIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywieGRwIiwhMCk7dGhpcy5wYWNrZXRzPW51bGx9fWNsYXNzIFhzbCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInhzbCIsITApO3RoaXMuZGVidWc9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBacGwgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ6cGwiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiI7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZmxpcExhYmVsPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIENvbmZpZ05hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoQ29uZmlnTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBDb25maWdOYW1lc3BhY2VbZV0odCl9c3RhdGljIGFjcm9iYXQoZSl7cmV0dXJuIG5ldyBBY3JvYmF0KGUpfXN0YXRpYyBhY3JvYmF0NyhlKXtyZXR1cm4gbmV3IEFjcm9iYXQ3KGUpfXN0YXRpYyBBREJFX0pTQ29uc29sZShlKXtyZXR1cm4gbmV3IEFEQkVfSlNDb25zb2xlKGUpfXN0YXRpYyBBREJFX0pTRGVidWdnZXIoZSl7cmV0dXJuIG5ldyBBREJFX0pTRGVidWdnZXIoZSl9c3RhdGljIGFkZFNpbGVudFByaW50KGUpe3JldHVybiBuZXcgQWRkU2lsZW50UHJpbnQoZSl9c3RhdGljIGFkZFZpZXdlclByZWZlcmVuY2VzKGUpe3JldHVybiBuZXcgQWRkVmlld2VyUHJlZmVyZW5jZXMoZSl9c3RhdGljIGFkanVzdERhdGEoZSl7cmV0dXJuIG5ldyBBZGp1c3REYXRhKGUpfXN0YXRpYyBhZG9iZUV4dGVuc2lvbkxldmVsKGUpe3JldHVybiBuZXcgQWRvYmVFeHRlbnNpb25MZXZlbChlKX1zdGF0aWMgYWdlbnQoZSl7cmV0dXJuIG5ldyBBZ2VudChlKX1zdGF0aWMgYWx3YXlzRW1iZWQoZSl7cmV0dXJuIG5ldyBBbHdheXNFbWJlZChlKX1zdGF0aWMgYW1kKGUpe3JldHVybiBuZXcgQW1kKGUpfXN0YXRpYyBhcmVhKGUpe3JldHVybiBuZXcgQXJlYShlKX1zdGF0aWMgYXR0cmlidXRlcyhlKXtyZXR1cm4gbmV3IEF0dHJpYnV0ZXMoZSl9c3RhdGljIGF1dG9TYXZlKGUpe3JldHVybiBuZXcgQXV0b1NhdmUoZSl9c3RhdGljIGJhc2UoZSl7cmV0dXJuIG5ldyBCYXNlKGUpfXN0YXRpYyBiYXRjaE91dHB1dChlKXtyZXR1cm4gbmV3IEJhdGNoT3V0cHV0KGUpfXN0YXRpYyBiZWhhdmlvck92ZXJyaWRlKGUpe3JldHVybiBuZXcgQmVoYXZpb3JPdmVycmlkZShlKX1zdGF0aWMgY2FjaGUoZSl7cmV0dXJuIG5ldyBDYWNoZShlKX1zdGF0aWMgY2hhbmdlKGUpe3JldHVybiBuZXcgQ2hhbmdlKGUpfXN0YXRpYyBjb21tb24oZSl7cmV0dXJuIG5ldyBDb21tb24oZSl9c3RhdGljIGNvbXByZXNzKGUpe3JldHVybiBuZXcgQ29tcHJlc3MoZSl9c3RhdGljIGNvbXByZXNzTG9naWNhbFN0cnVjdHVyZShlKXtyZXR1cm4gbmV3IENvbXByZXNzTG9naWNhbFN0cnVjdHVyZShlKX1zdGF0aWMgY29tcHJlc3NPYmplY3RTdHJlYW0oZSl7cmV0dXJuIG5ldyBDb21wcmVzc09iamVjdFN0cmVhbShlKX1zdGF0aWMgY29tcHJlc3Npb24oZSl7cmV0dXJuIG5ldyBDb21wcmVzc2lvbihlKX1zdGF0aWMgY29uZmlnKGUpe3JldHVybiBuZXcgQ29uZmlnKGUpfXN0YXRpYyBjb25mb3JtYW5jZShlKXtyZXR1cm4gbmV3IENvbmZvcm1hbmNlKGUpfXN0YXRpYyBjb250ZW50Q29weShlKXtyZXR1cm4gbmV3IENvbnRlbnRDb3B5KGUpfXN0YXRpYyBjb3BpZXMoZSl7cmV0dXJuIG5ldyBDb3BpZXMoZSl9c3RhdGljIGNyZWF0b3IoZSl7cmV0dXJuIG5ldyBDcmVhdG9yKGUpfXN0YXRpYyBjdXJyZW50UGFnZShlKXtyZXR1cm4gbmV3IEN1cnJlbnRQYWdlKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgRGF0YShlKX1zdGF0aWMgZGVidWcoZSl7cmV0dXJuIG5ldyBEZWJ1ZyhlKX1zdGF0aWMgZGVmYXVsdFR5cGVmYWNlKGUpe3JldHVybiBuZXcgRGVmYXVsdFR5cGVmYWNlKGUpfXN0YXRpYyBkZXN0aW5hdGlvbihlKXtyZXR1cm4gbmV3IERlc3RpbmF0aW9uKGUpfXN0YXRpYyBkb2N1bWVudEFzc2VtYmx5KGUpe3JldHVybiBuZXcgRG9jdW1lbnRBc3NlbWJseShlKX1zdGF0aWMgZHJpdmVyKGUpe3JldHVybiBuZXcgRHJpdmVyKGUpfXN0YXRpYyBkdXBsZXhPcHRpb24oZSl7cmV0dXJuIG5ldyBEdXBsZXhPcHRpb24oZSl9c3RhdGljIGR5bmFtaWNSZW5kZXIoZSl7cmV0dXJuIG5ldyBEeW5hbWljUmVuZGVyKGUpfXN0YXRpYyBlbWJlZChlKXtyZXR1cm4gbmV3IEVtYmVkKGUpfXN0YXRpYyBlbmNyeXB0KGUpe3JldHVybiBuZXcgRW5jcnlwdChlKX1zdGF0aWMgZW5jcnlwdGlvbihlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb24oZSl9c3RhdGljIGVuY3J5cHRpb25MZXZlbChlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25MZXZlbChlKX1zdGF0aWMgZW5mb3JjZShlKXtyZXR1cm4gbmV3IEVuZm9yY2UoZSl9c3RhdGljIGVxdWF0ZShlKXtyZXR1cm4gbmV3IEVxdWF0ZShlKX1zdGF0aWMgZXF1YXRlUmFuZ2UoZSl7cmV0dXJuIG5ldyBFcXVhdGVSYW5nZShlKX1zdGF0aWMgZXhjbHVkZShlKXtyZXR1cm4gbmV3IEV4Y2x1ZGUoZSl9c3RhdGljIGV4Y2x1ZGVOUyhlKXtyZXR1cm4gbmV3IEV4Y2x1ZGVOUyhlKX1zdGF0aWMgZmxpcExhYmVsKGUpe3JldHVybiBuZXcgRmxpcExhYmVsKGUpfXN0YXRpYyBmb250SW5mbyhlKXtyZXR1cm4gbmV3IEZvbnRJbmZvKGUpfXN0YXRpYyBmb3JtRmllbGRGaWxsaW5nKGUpe3JldHVybiBuZXcgRm9ybUZpZWxkRmlsbGluZyhlKX1zdGF0aWMgZ3JvdXBQYXJlbnQoZSl7cmV0dXJuIG5ldyBHcm91cFBhcmVudChlKX1zdGF0aWMgaWZFbXB0eShlKXtyZXR1cm4gbmV3IElmRW1wdHkoZSl9c3RhdGljIGluY2x1ZGVYRFBDb250ZW50KGUpe3JldHVybiBuZXcgSW5jbHVkZVhEUENvbnRlbnQoZSl9c3RhdGljIGluY3JlbWVudGFsTG9hZChlKXtyZXR1cm4gbmV3IEluY3JlbWVudGFsTG9hZChlKX1zdGF0aWMgaW5jcmVtZW50YWxNZXJnZShlKXtyZXR1cm4gbmV3IEluY3JlbWVudGFsTWVyZ2UoZSl9c3RhdGljIGludGVyYWN0aXZlKGUpe3JldHVybiBuZXcgSW50ZXJhY3RpdmUoZSl9c3RhdGljIGpvZyhlKXtyZXR1cm4gbmV3IEpvZyhlKX1zdGF0aWMgbGFiZWxQcmludGVyKGUpe3JldHVybiBuZXcgTGFiZWxQcmludGVyKGUpfXN0YXRpYyBsYXlvdXQoZSl7cmV0dXJuIG5ldyBMYXlvdXQoZSl9c3RhdGljIGxldmVsKGUpe3JldHVybiBuZXcgTGV2ZWwoZSl9c3RhdGljIGxpbmVhcml6ZWQoZSl7cmV0dXJuIG5ldyBMaW5lYXJpemVkKGUpfXN0YXRpYyBsb2NhbGUoZSl7cmV0dXJuIG5ldyBMb2NhbGUoZSl9c3RhdGljIGxvY2FsZVNldChlKXtyZXR1cm4gbmV3IExvY2FsZVNldChlKX1zdGF0aWMgbG9nKGUpe3JldHVybiBuZXcgTG9nKGUpfXN0YXRpYyBtYXAoZSl7cmV0dXJuIG5ldyBNYXBFbGVtZW50KGUpfXN0YXRpYyBtZWRpdW1JbmZvKGUpe3JldHVybiBuZXcgTWVkaXVtSW5mbyhlKX1zdGF0aWMgbWVzc2FnZShlKXtyZXR1cm4gbmV3IE1lc3NhZ2UoZSl9c3RhdGljIG1lc3NhZ2luZyhlKXtyZXR1cm4gbmV3IE1lc3NhZ2luZyhlKX1zdGF0aWMgbW9kZShlKXtyZXR1cm4gbmV3IE1vZGUoZSl9c3RhdGljIG1vZGlmeUFubm90cyhlKXtyZXR1cm4gbmV3IE1vZGlmeUFubm90cyhlKX1zdGF0aWMgbXNnSWQoZSl7cmV0dXJuIG5ldyBNc2dJZChlKX1zdGF0aWMgbmFtZUF0dHIoZSl7cmV0dXJuIG5ldyBOYW1lQXR0cihlKX1zdGF0aWMgbmV2ZXJFbWJlZChlKXtyZXR1cm4gbmV3IE5ldmVyRW1iZWQoZSl9c3RhdGljIG51bWJlck9mQ29waWVzKGUpe3JldHVybiBuZXcgTnVtYmVyT2ZDb3BpZXMoZSl9c3RhdGljIG9wZW5BY3Rpb24oZSl7cmV0dXJuIG5ldyBPcGVuQWN0aW9uKGUpfXN0YXRpYyBvdXRwdXQoZSl7cmV0dXJuIG5ldyBPdXRwdXQoZSl9c3RhdGljIG91dHB1dEJpbihlKXtyZXR1cm4gbmV3IE91dHB1dEJpbihlKX1zdGF0aWMgb3V0cHV0WFNMKGUpe3JldHVybiBuZXcgT3V0cHV0WFNMKGUpfXN0YXRpYyBvdmVycHJpbnQoZSl7cmV0dXJuIG5ldyBPdmVycHJpbnQoZSl9c3RhdGljIHBhY2tldHMoZSl7cmV0dXJuIG5ldyBQYWNrZXRzKGUpfXN0YXRpYyBwYWdlT2Zmc2V0KGUpe3JldHVybiBuZXcgUGFnZU9mZnNldChlKX1zdGF0aWMgcGFnZVJhbmdlKGUpe3JldHVybiBuZXcgUGFnZVJhbmdlKGUpfXN0YXRpYyBwYWdpbmF0aW9uKGUpe3JldHVybiBuZXcgUGFnaW5hdGlvbihlKX1zdGF0aWMgcGFnaW5hdGlvbk92ZXJyaWRlKGUpe3JldHVybiBuZXcgUGFnaW5hdGlvbk92ZXJyaWRlKGUpfXN0YXRpYyBwYXJ0KGUpe3JldHVybiBuZXcgUGFydChlKX1zdGF0aWMgcGNsKGUpe3JldHVybiBuZXcgUGNsKGUpfXN0YXRpYyBwZGYoZSl7cmV0dXJuIG5ldyBQZGYoZSl9c3RhdGljIHBkZmEoZSl7cmV0dXJuIG5ldyBQZGZhKGUpfXN0YXRpYyBwZXJtaXNzaW9ucyhlKXtyZXR1cm4gbmV3IFBlcm1pc3Npb25zKGUpfXN0YXRpYyBwaWNrVHJheUJ5UERGU2l6ZShlKXtyZXR1cm4gbmV3IFBpY2tUcmF5QnlQREZTaXplKGUpfXN0YXRpYyBwaWN0dXJlKGUpe3JldHVybiBuZXcgUGljdHVyZShlKX1zdGF0aWMgcGxhaW50ZXh0TWV0YWRhdGEoZSl7cmV0dXJuIG5ldyBQbGFpbnRleHRNZXRhZGF0YShlKX1zdGF0aWMgcHJlc2VuY2UoZSl7cmV0dXJuIG5ldyBQcmVzZW5jZShlKX1zdGF0aWMgcHJlc2VudChlKXtyZXR1cm4gbmV3IFByZXNlbnQoZSl9c3RhdGljIHByaW50KGUpe3JldHVybiBuZXcgUHJpbnQoZSl9c3RhdGljIHByaW50SGlnaFF1YWxpdHkoZSl7cmV0dXJuIG5ldyBQcmludEhpZ2hRdWFsaXR5KGUpfXN0YXRpYyBwcmludFNjYWxpbmcoZSl7cmV0dXJuIG5ldyBQcmludFNjYWxpbmcoZSl9c3RhdGljIHByaW50ZXJOYW1lKGUpe3JldHVybiBuZXcgUHJpbnRlck5hbWUoZSl9c3RhdGljIHByb2R1Y2VyKGUpe3JldHVybiBuZXcgUHJvZHVjZXIoZSl9c3RhdGljIHBzKGUpe3JldHVybiBuZXcgUHMoZSl9c3RhdGljIHJhbmdlKGUpe3JldHVybiBuZXcgUmFuZ2UoZSl9c3RhdGljIHJlY29yZChlKXtyZXR1cm4gbmV3IFJlY29yZChlKX1zdGF0aWMgcmVsZXZhbnQoZSl7cmV0dXJuIG5ldyBSZWxldmFudChlKX1zdGF0aWMgcmVuYW1lKGUpe3JldHVybiBuZXcgUmVuYW1lKGUpfXN0YXRpYyByZW5kZXJQb2xpY3koZSl7cmV0dXJuIG5ldyBSZW5kZXJQb2xpY3koZSl9c3RhdGljIHJ1blNjcmlwdHMoZSl7cmV0dXJuIG5ldyBSdW5TY3JpcHRzKGUpfXN0YXRpYyBzY3JpcHQoZSl7cmV0dXJuIG5ldyBTY3JpcHQoZSl9c3RhdGljIHNjcmlwdE1vZGVsKGUpe3JldHVybiBuZXcgU2NyaXB0TW9kZWwoZSl9c3RhdGljIHNldmVyaXR5KGUpe3JldHVybiBuZXcgU2V2ZXJpdHkoZSl9c3RhdGljIHNpbGVudFByaW50KGUpe3JldHVybiBuZXcgU2lsZW50UHJpbnQoZSl9c3RhdGljIHN0YXBsZShlKXtyZXR1cm4gbmV3IFN0YXBsZShlKX1zdGF0aWMgc3RhcnROb2RlKGUpe3JldHVybiBuZXcgU3RhcnROb2RlKGUpfXN0YXRpYyBzdGFydFBhZ2UoZSl7cmV0dXJuIG5ldyBTdGFydFBhZ2UoZSl9c3RhdGljIHN1Ym1pdEZvcm1hdChlKXtyZXR1cm4gbmV3IFN1Ym1pdEZvcm1hdChlKX1zdGF0aWMgc3VibWl0VXJsKGUpe3JldHVybiBuZXcgU3VibWl0VXJsKGUpfXN0YXRpYyBzdWJzZXRCZWxvdyhlKXtyZXR1cm4gbmV3IFN1YnNldEJlbG93KGUpfXN0YXRpYyBzdXBwcmVzc0Jhbm5lcihlKXtyZXR1cm4gbmV3IFN1cHByZXNzQmFubmVyKGUpfXN0YXRpYyB0YWdnZWQoZSl7cmV0dXJuIG5ldyBUYWdnZWQoZSl9c3RhdGljIHRlbXBsYXRlKGUpe3JldHVybiBuZXcgVGVtcGxhdGUoZSl9c3RhdGljIHRlbXBsYXRlQ2FjaGUoZSl7cmV0dXJuIG5ldyBUZW1wbGF0ZUNhY2hlKGUpfXN0YXRpYyB0aHJlc2hvbGQoZSl7cmV0dXJuIG5ldyBUaHJlc2hvbGQoZSl9c3RhdGljIHRvKGUpe3JldHVybiBuZXcgVG8oZSl9c3RhdGljIHRyYWNlKGUpe3JldHVybiBuZXcgVHJhY2UoZSl9c3RhdGljIHRyYW5zZm9ybShlKXtyZXR1cm4gbmV3IFRyYW5zZm9ybShlKX1zdGF0aWMgdHlwZShlKXtyZXR1cm4gbmV3IFR5cGUoZSl9c3RhdGljIHVyaShlKXtyZXR1cm4gbmV3IFVyaShlKX1zdGF0aWMgdmFsaWRhdGUoZSl7cmV0dXJuIG5ldyBWYWxpZGF0ZShlKX1zdGF0aWMgdmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoZSl7cmV0dXJuIG5ldyBWYWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyhlKX1zdGF0aWMgdmFsaWRhdGlvbk1lc3NhZ2luZyhlKXtyZXR1cm4gbmV3IFZhbGlkYXRpb25NZXNzYWdpbmcoZSl9c3RhdGljIHZlcnNpb24oZSl7cmV0dXJuIG5ldyBWZXJzaW9uKGUpfXN0YXRpYyB2ZXJzaW9uQ29udHJvbChlKXtyZXR1cm4gbmV3IFZlcnNpb25Db250cm9sKGUpfXN0YXRpYyB2aWV3ZXJQcmVmZXJlbmNlcyhlKXtyZXR1cm4gbmV3IFZpZXdlclByZWZlcmVuY2VzKGUpfXN0YXRpYyB3ZWJDbGllbnQoZSl7cmV0dXJuIG5ldyBXZWJDbGllbnQoZSl9c3RhdGljIHdoaXRlc3BhY2UoZSl7cmV0dXJuIG5ldyBXaGl0ZXNwYWNlKGUpfXN0YXRpYyB3aW5kb3coZSl7cmV0dXJuIG5ldyBXaW5kb3coZSl9c3RhdGljIHhkYyhlKXtyZXR1cm4gbmV3IFhkYyhlKX1zdGF0aWMgeGRwKGUpe3JldHVybiBuZXcgWGRwKGUpfXN0YXRpYyB4c2woZSl7cmV0dXJuIG5ldyBYc2woZSl9c3RhdGljIHpwbChlKXtyZXR1cm4gbmV3IFpwbChlKX19dC5Db25maWdOYW1lc3BhY2U9Q29uZmlnTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ29ubmVjdGlvblNldE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg4MCksaT1hKDc4KTtjb25zdCBuPXIuTmFtZXNwYWNlSWRzLmNvbm5lY3Rpb25TZXQuaWQ7Y2xhc3MgQ29ubmVjdGlvblNldCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG4sImNvbm5lY3Rpb25TZXQiLCEwKTt0aGlzLndzZGxDb25uZWN0aW9uPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMueG1sQ29ubmVjdGlvbj1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnhzZENvbm5lY3Rpb249bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVmZmVjdGl2ZUlucHV0UG9saWN5IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobiwiZWZmZWN0aXZlSW5wdXRQb2xpY3kiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRWZmZWN0aXZlT3V0cHV0UG9saWN5IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobiwiZWZmZWN0aXZlT3V0cHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE9wZXJhdGlvbiBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG4sIm9wZXJhdGlvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnB1dD1lLmlucHV0fHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLm91dHB1dD1lLm91dHB1dHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBSb290RWxlbWVudCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG4sInJvb3RFbGVtZW50Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNvYXBBY3Rpb24gZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihuLCJzb2FwQWN0aW9uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNvYXBBZGRyZXNzIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobiwic29hcEFkZHJlc3MiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVXJpIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobiwidXJpIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFdzZGxBZGRyZXNzIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobiwid3NkbEFkZHJlc3MiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgV3NkbENvbm5lY3Rpb24gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihuLCJ3c2RsQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmVmZmVjdGl2ZUlucHV0UG9saWN5PW51bGw7dGhpcy5lZmZlY3RpdmVPdXRwdXRQb2xpY3k9bnVsbDt0aGlzLm9wZXJhdGlvbj1udWxsO3RoaXMuc29hcEFjdGlvbj1udWxsO3RoaXMuc29hcEFkZHJlc3M9bnVsbDt0aGlzLndzZGxBZGRyZXNzPW51bGx9fWNsYXNzIFhtbENvbm5lY3Rpb24gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihuLCJ4bWxDb25uZWN0aW9uIiwhMCk7dGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXJpPW51bGx9fWNsYXNzIFhzZENvbm5lY3Rpb24gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihuLCJ4c2RDb25uZWN0aW9uIiwhMCk7dGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucm9vdEVsZW1lbnQ9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBDb25uZWN0aW9uU2V0TmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihDb25uZWN0aW9uU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBDb25uZWN0aW9uU2V0TmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBjb25uZWN0aW9uU2V0KGUpe3JldHVybiBuZXcgQ29ubmVjdGlvblNldChlKX1zdGF0aWMgZWZmZWN0aXZlSW5wdXRQb2xpY3koZSl7cmV0dXJuIG5ldyBFZmZlY3RpdmVJbnB1dFBvbGljeShlKX1zdGF0aWMgZWZmZWN0aXZlT3V0cHV0UG9saWN5KGUpe3JldHVybiBuZXcgRWZmZWN0aXZlT3V0cHV0UG9saWN5KGUpfXN0YXRpYyBvcGVyYXRpb24oZSl7cmV0dXJuIG5ldyBPcGVyYXRpb24oZSl9c3RhdGljIHJvb3RFbGVtZW50KGUpe3JldHVybiBuZXcgUm9vdEVsZW1lbnQoZSl9c3RhdGljIHNvYXBBY3Rpb24oZSl7cmV0dXJuIG5ldyBTb2FwQWN0aW9uKGUpfXN0YXRpYyBzb2FwQWRkcmVzcyhlKXtyZXR1cm4gbmV3IFNvYXBBZGRyZXNzKGUpfXN0YXRpYyB1cmkoZSl7cmV0dXJuIG5ldyBVcmkoZSl9c3RhdGljIHdzZGxBZGRyZXNzKGUpe3JldHVybiBuZXcgV3NkbEFkZHJlc3MoZSl9c3RhdGljIHdzZGxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgV3NkbENvbm5lY3Rpb24oZSl9c3RhdGljIHhtbENvbm5lY3Rpb24oZSl7cmV0dXJuIG5ldyBYbWxDb25uZWN0aW9uKGUpfXN0YXRpYyB4c2RDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgWHNkQ29ubmVjdGlvbihlKX19dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPUNvbm5lY3Rpb25TZXROYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EYXRhc2V0c05hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg3OCksaT1hKDgwKTtjb25zdCBuPWkuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2NsYXNzIERhdGEgZXh0ZW5kcyByLlhtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihuLCJkYXRhIixlKX1bci4kaXNOc0Fnbm9zdGljXSgpe3JldHVybiEwfX1jbGFzcyBEYXRhc2V0cyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG4sImRhdGFzZXRzIiwhMCk7dGhpcy5kYXRhPW51bGw7dGhpcy5TaWduYXR1cmU9bnVsbH1bci4kb25DaGlsZF0oZSl7Y29uc3QgdD1lW3IuJG5vZGVOYW1lXTsoImRhdGEiPT09dCYmZVtyLiRuYW1lc3BhY2VJZF09PT1ufHwiU2lnbmF0dXJlIj09PXQmJmVbci4kbmFtZXNwYWNlSWRdPT09aS5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkKSYmKHRoaXNbdF09ZSk7dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSl9fWNsYXNzIERhdGFzZXRzTmFtZXNwYWNle3N0YXRpY1tpLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihEYXRhc2V0c05hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gRGF0YXNldHNOYW1lc3BhY2VbZV0odCl9c3RhdGljIGRhdGFzZXRzKGUpe3JldHVybiBuZXcgRGF0YXNldHMoZSl9c3RhdGljIGRhdGEoZSl7cmV0dXJuIG5ldyBEYXRhKGUpfX10LkRhdGFzZXRzTmFtZXNwYWNlPURhdGFzZXRzTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTG9jYWxlU2V0TmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDgwKSxpPWEoNzgpLG49YSg3OSk7Y29uc3Qgcz1yLk5hbWVzcGFjZUlkcy5sb2NhbGVTZXQuaWQ7Y2xhc3MgQ2FsZW5kYXJTeW1ib2xzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiY2FsZW5kYXJTeW1ib2xzIiwhMCk7dGhpcy5uYW1lPSJncmVnb3JpYW4iO3RoaXMuZGF5TmFtZXM9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMik7dGhpcy5lcmFOYW1lcz1udWxsO3RoaXMubWVyaWRpZW1OYW1lcz1udWxsO3RoaXMubW9udGhOYW1lcz1uZXcgaS5YRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgQ3VycmVuY3lTeW1ib2wgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJjdXJyZW5jeVN5bWJvbCIpO3RoaXMubmFtZT0oMCxuLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsic3ltYm9sIiwiaXNvbmFtZSIsImRlY2ltYWwiXSl9fWNsYXNzIEN1cnJlbmN5U3ltYm9scyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImN1cnJlbmN5U3ltYm9scyIsITApO3RoaXMuY3VycmVuY3lTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMyl9fWNsYXNzIERhdGVQYXR0ZXJuIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0ZVBhdHRlcm4iKTt0aGlzLm5hbWU9KDAsbi5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIERhdGVQYXR0ZXJucyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRhdGVQYXR0ZXJucyIsITApO3RoaXMuZGF0ZVBhdHRlcm49bmV3IGkuWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIERhdGVUaW1lU3ltYm9scyBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRlVGltZVN5bWJvbHMiKX19Y2xhc3MgRGF5IGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF5Iil9fWNsYXNzIERheU5hbWVzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF5TmFtZXMiLCEwKTt0aGlzLmFiYnI9KDAsbi5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmRheT1uZXcgaS5YRkFPYmplY3RBcnJheSg3KX19Y2xhc3MgRXJhIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZXJhIil9fWNsYXNzIEVyYU5hbWVzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZXJhTmFtZXMiLCEwKTt0aGlzLmVyYT1uZXcgaS5YRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgTG9jYWxlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibG9jYWxlIiwhMCk7dGhpcy5kZXNjPWUuZGVzY3x8IiI7dGhpcy5uYW1lPSJpc29uYW1lIjt0aGlzLmNhbGVuZGFyU3ltYm9scz1udWxsO3RoaXMuY3VycmVuY3lTeW1ib2xzPW51bGw7dGhpcy5kYXRlUGF0dGVybnM9bnVsbDt0aGlzLmRhdGVUaW1lU3ltYm9scz1udWxsO3RoaXMubnVtYmVyUGF0dGVybnM9bnVsbDt0aGlzLm51bWJlclN5bWJvbHM9bnVsbDt0aGlzLnRpbWVQYXR0ZXJucz1udWxsO3RoaXMudHlwZUZhY2VzPW51bGx9fWNsYXNzIExvY2FsZVNldCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImxvY2FsZVNldCIsITApO3RoaXMubG9jYWxlPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBNZXJpZGllbSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm1lcmlkaWVtIil9fWNsYXNzIE1lcmlkaWVtTmFtZXMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtZXJpZGllbU5hbWVzIiwhMCk7dGhpcy5tZXJpZGllbT1uZXcgaS5YRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgTW9udGggZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtb250aCIpfX1jbGFzcyBNb250aE5hbWVzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibW9udGhOYW1lcyIsITApO3RoaXMuYWJicj0oMCxuLmdldEludGVnZXIpKHtkYXRhOmUuYWJicixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMubW9udGg9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMTIpfX1jbGFzcyBOdW1iZXJQYXR0ZXJuIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyUGF0dGVybiIpO3RoaXMubmFtZT0oMCxuLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgTnVtYmVyUGF0dGVybnMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJudW1iZXJQYXR0ZXJucyIsITApO3RoaXMubnVtYmVyUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgTnVtYmVyU3ltYm9sIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyU3ltYm9sIik7dGhpcy5uYW1lPSgwLG4uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJkZWNpbWFsIiwiZ3JvdXBpbmciLCJwZXJjZW50IiwibWludXMiLCJ6ZXJvIl0pfX1jbGFzcyBOdW1iZXJTeW1ib2xzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyU3ltYm9scyIsITApO3RoaXMubnVtYmVyU3ltYm9sPW5ldyBpLlhGQU9iamVjdEFycmF5KDUpfX1jbGFzcyBUaW1lUGF0dGVybiBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInRpbWVQYXR0ZXJuIik7dGhpcy5uYW1lPSgwLG4uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pfX1jbGFzcyBUaW1lUGF0dGVybnMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0aW1lUGF0dGVybnMiLCEwKTt0aGlzLnRpbWVQYXR0ZXJuPW5ldyBpLlhGQU9iamVjdEFycmF5KDQpfX1jbGFzcyBUeXBlRmFjZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInR5cGVGYWNlIiwhMCk7dGhpcy5uYW1lPSIifGUubmFtZX19Y2xhc3MgVHlwZUZhY2VzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywidHlwZUZhY2VzIiwhMCk7dGhpcy50eXBlRmFjZT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgTG9jYWxlU2V0TmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihMb2NhbGVTZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIExvY2FsZVNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY2FsZW5kYXJTeW1ib2xzKGUpe3JldHVybiBuZXcgQ2FsZW5kYXJTeW1ib2xzKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbChlKXtyZXR1cm4gbmV3IEN1cnJlbmN5U3ltYm9sKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbHMoZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbHMoZSl9c3RhdGljIGRhdGVQYXR0ZXJuKGUpe3JldHVybiBuZXcgRGF0ZVBhdHRlcm4oZSl9c3RhdGljIGRhdGVQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJucyhlKX1zdGF0aWMgZGF0ZVRpbWVTeW1ib2xzKGUpe3JldHVybiBuZXcgRGF0ZVRpbWVTeW1ib2xzKGUpfXN0YXRpYyBkYXkoZSl7cmV0dXJuIG5ldyBEYXkoZSl9c3RhdGljIGRheU5hbWVzKGUpe3JldHVybiBuZXcgRGF5TmFtZXMoZSl9c3RhdGljIGVyYShlKXtyZXR1cm4gbmV3IEVyYShlKX1zdGF0aWMgZXJhTmFtZXMoZSl7cmV0dXJuIG5ldyBFcmFOYW1lcyhlKX1zdGF0aWMgbG9jYWxlKGUpe3JldHVybiBuZXcgTG9jYWxlKGUpfXN0YXRpYyBsb2NhbGVTZXQoZSl7cmV0dXJuIG5ldyBMb2NhbGVTZXQoZSl9c3RhdGljIG1lcmlkaWVtKGUpe3JldHVybiBuZXcgTWVyaWRpZW0oZSl9c3RhdGljIG1lcmlkaWVtTmFtZXMoZSl7cmV0dXJuIG5ldyBNZXJpZGllbU5hbWVzKGUpfXN0YXRpYyBtb250aChlKXtyZXR1cm4gbmV3IE1vbnRoKGUpfXN0YXRpYyBtb250aE5hbWVzKGUpe3JldHVybiBuZXcgTW9udGhOYW1lcyhlKX1zdGF0aWMgbnVtYmVyUGF0dGVybihlKXtyZXR1cm4gbmV3IE51bWJlclBhdHRlcm4oZSl9c3RhdGljIG51bWJlclBhdHRlcm5zKGUpe3JldHVybiBuZXcgTnVtYmVyUGF0dGVybnMoZSl9c3RhdGljIG51bWJlclN5bWJvbChlKXtyZXR1cm4gbmV3IE51bWJlclN5bWJvbChlKX1zdGF0aWMgbnVtYmVyU3ltYm9scyhlKXtyZXR1cm4gbmV3IE51bWJlclN5bWJvbHMoZSl9c3RhdGljIHRpbWVQYXR0ZXJuKGUpe3JldHVybiBuZXcgVGltZVBhdHRlcm4oZSl9c3RhdGljIHRpbWVQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IFRpbWVQYXR0ZXJucyhlKX1zdGF0aWMgdHlwZUZhY2UoZSl7cmV0dXJuIG5ldyBUeXBlRmFjZShlKX1zdGF0aWMgdHlwZUZhY2VzKGUpe3JldHVybiBuZXcgVHlwZUZhY2VzKGUpfX10LkxvY2FsZVNldE5hbWVzcGFjZT1Mb2NhbGVTZXROYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TaWduYXR1cmVOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoODApLGk9YSg3OCk7Y29uc3Qgbj1yLk5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQ7Y2xhc3MgU2lnbmF0dXJlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobiwic2lnbmF0dXJlIiwhMCl9fWNsYXNzIFNpZ25hdHVyZU5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoU2lnbmF0dXJlTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBTaWduYXR1cmVOYW1lc3BhY2VbZV0odCl9c3RhdGljIHNpZ25hdHVyZShlKXtyZXR1cm4gbmV3IFNpZ25hdHVyZShlKX19dC5TaWduYXR1cmVOYW1lc3BhY2U9U2lnbmF0dXJlTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3R5bGVzaGVldE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg4MCksaT1hKDc4KTtjb25zdCBuPXIuTmFtZXNwYWNlSWRzLnN0eWxlc2hlZXQuaWQ7Y2xhc3MgU3R5bGVzaGVldCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG4sInN0eWxlc2hlZXQiLCEwKX19Y2xhc3MgU3R5bGVzaGVldE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoU3R5bGVzaGVldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU3R5bGVzaGVldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgc3R5bGVzaGVldChlKXtyZXR1cm4gbmV3IFN0eWxlc2hlZXQoZSl9fXQuU3R5bGVzaGVldE5hbWVzcGFjZT1TdHlsZXNoZWV0TmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWGRwTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDgwKSxpPWEoNzgpO2NvbnN0IG49ci5OYW1lc3BhY2VJZHMueGRwLmlkO2NsYXNzIFhkcCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG4sInhkcCIsITApO3RoaXMudXVpZD1lLnV1aWR8fCIiO3RoaXMudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIjt0aGlzLmNvbmZpZz1udWxsO3RoaXMuY29ubmVjdGlvblNldD1udWxsO3RoaXMuZGF0YXNldHM9bnVsbDt0aGlzLmxvY2FsZVNldD1udWxsO3RoaXMuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnRlbXBsYXRlPW51bGx9W2kuJG9uQ2hpbGRDaGVja10oZSl7Y29uc3QgdD1yLk5hbWVzcGFjZUlkc1tlW2kuJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbaS4kbmFtZXNwYWNlSWRdPT09dC5pZH19Y2xhc3MgWGRwTmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihYZHBOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhkcE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgeGRwKGUpe3JldHVybiBuZXcgWGRwKGUpfX10LlhkcE5hbWVzcGFjZT1YZHBOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg3OCksaT1hKDgwKSxuPWEoODUpLHM9YSg3OSk7Y29uc3Qgbz1pLk5hbWVzcGFjZUlkcy54aHRtbC5pZCxjPVN5bWJvbCgpLGw9bmV3IFNldChbImNvbG9yIiwiZm9udCIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtd2VpZ2h0IiwibWFyZ2luIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsImxldHRlci1zcGFjaW5nIiwibGluZS1oZWlnaHQiLCJvcnBoYW5zIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJ0YWItaW50ZXJ2YWwiLCJ0YWItc3RvcCIsInRleHQtYWxpZ24iLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWluZGVudCIsInZlcnRpY2FsLWFsaWduIiwid2lkb3dzIiwia2VybmluZy1tb2RlIiwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIiwieGZhLXNwYWNlcnVuIiwieGZhLXRhYi1zdG9wcyJdKSxoPW5ldyBNYXAoW1sicGFnZS1icmVhay1hZnRlciIsImJyZWFrQWZ0ZXIiXSxbInBhZ2UtYnJlYWstYmVmb3JlIiwiYnJlYWtCZWZvcmUiXSxbInBhZ2UtYnJlYWstaW5zaWRlIiwiYnJlYWtJbnNpZGUiXSxbImtlcm5pbmctbW9kZSIsZT0+Im5vbmUiPT09ZT8ibm9uZSI6Im5vcm1hbCJdLFsieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsZT0+YHNjYWxlWCgke01hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKX0pYF0sWyJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsZT0+YHNjYWxlWSgke01hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKX0pYF0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsKGUsdCk9PntlPXQuZm9udFNpemU9KDAscy5nZXRNZWFzdXJlbWVudCkoZSk7cmV0dXJuKDAsbi5tZWFzdXJlVG9TdHJpbmcpKC45OSplKX1dLFsibGV0dGVyLXNwYWNpbmciLGU9PigwLG4ubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibGluZS1oZWlnaHQiLGU9PigwLG4ubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibWFyZ2luIixlPT4oMCxuLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi1ib3R0b20iLGU9PigwLG4ubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibWFyZ2luLWxlZnQiLGU9PigwLG4ubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibWFyZ2luLXJpZ2h0IixlPT4oMCxuLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi10b3AiLGU9PigwLG4ubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsidGV4dC1pbmRlbnQiLGU9PigwLG4ubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsiZm9udC1mYW1pbHkiLGU9PmVdLFsidmVydGljYWwtYWxpZ24iLGU9PigwLG4ubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldXSksdT0vXHMrL2csZD0vW1xyXG5dKy9nLGY9L1xyXG4/L2c7ZnVuY3Rpb24gbWFwU3R5bGUoZSx0LGEpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gaTtjb25zdCBvPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W3QsYV1vZiBlLnNwbGl0KCI7IikubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKXtjb25zdCBlPWguZ2V0KHQpO2lmKCIiPT09ZSljb250aW51ZTtsZXQgcj1hO2UmJihyPSJzdHJpbmciPT10eXBlb2YgZT9lOmUoYSxvKSk7dC5lbmRzV2l0aCgic2NhbGUiKT9pLnRyYW5zZm9ybT9pLnRyYW5zZm9ybT1gJHtpW3RdfSAke3J9YDppLnRyYW5zZm9ybT1yOmlbdC5yZXBsYWNlQWxsKC8tKFthLXpBLVpdKS9nLCgoZSx0KT0+dC50b1VwcGVyQ2FzZSgpKSldPXJ9aS5mb250RmFtaWx5JiYoMCxuLnNldEZvbnRGYW1pbHkpKHt0eXBlZmFjZTppLmZvbnRGYW1pbHksd2VpZ2h0OmkuZm9udFdlaWdodHx8Im5vcm1hbCIscG9zdHVyZTppLmZvbnRTdHlsZXx8Im5vcm1hbCIsc2l6ZTpvLmZvbnRTaXplfHwwfSx0LHRbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixpKTtpZihhJiZpLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09aS52ZXJ0aWNhbEFsaWduJiZpLmZvbnRTaXplKXtjb25zdCBlPS41ODMsdD0uMzMzLGE9KDAscy5nZXRNZWFzdXJlbWVudCkoaS5mb250U2l6ZSk7aS5mb250U2l6ZT0oMCxuLm1lYXN1cmVUb1N0cmluZykoYSplKTtpLnZlcnRpY2FsQWxpZ249KDAsbi5tZWFzdXJlVG9TdHJpbmcpKE1hdGguc2lnbigoMCxzLmdldE1lYXN1cmVtZW50KShpLnZlcnRpY2FsQWxpZ24pKSphKnQpfWEmJmkuZm9udFNpemUmJihpLmZvbnRTaXplPWBjYWxjKCR7aS5mb250U2l6ZX0gKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWApOygwLG4uZml4VGV4dEluZGVudCkoaSk7cmV0dXJuIGl9Y29uc3QgZz1uZXcgU2V0KFsiYm9keSIsImh0bWwiXSk7Y2xhc3MgWGh0bWxPYmplY3QgZXh0ZW5kcyByLlhtbE9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKG8sdCk7dGhpc1tjXT0hMTt0aGlzLnN0eWxlPWUuc3R5bGV8fCIifVtyLiRjbGVhbl0oZSl7c3VwZXJbci4kY2xlYW5dKGUpO3RoaXMuc3R5bGU9ZnVuY3Rpb24gY2hlY2tTdHlsZShlKXtyZXR1cm4gZS5zdHlsZT9lLnN0eWxlLnRyaW0oKS5zcGxpdCgvXHMqO1xzKi8pLmZpbHRlcigoZT0+ISFlKSkubWFwKChlPT5lLnNwbGl0KC9ccyo6XHMqLywyKSkpLmZpbHRlcigoKFt0LGFdKT0+eyJmb250LWZhbWlseSI9PT10JiZlW3IuJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKGEpO3JldHVybiBsLmhhcyh0KX0pKS5tYXAoKGU9PmUuam9pbigiOiIpKSkuam9pbigiOyIpOiIifSh0aGlzKX1bci4kYWNjZXB0V2hpdGVzcGFjZV0oKXtyZXR1cm4hZy5oYXModGhpc1tyLiRub2RlTmFtZV0pfVtyLiRvblRleHRdKGUsdD0hMSl7aWYodCl0aGlzW2NdPSEwO2Vsc2V7ZT1lLnJlcGxhY2VBbGwoZCwiIik7dGhpcy5zdHlsZS5pbmNsdWRlcygieGZhLXNwYWNlcnVuOnllcyIpfHwoZT1lLnJlcGxhY2VBbGwodSwiICIpKX1lJiYodGhpc1tyLiRjb250ZW50XSs9ZSl9W3IuJHB1c2hHbHlwaHNdKGUsdD0hMCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLGk9e3RvcDpOYU4sYm90dG9tOk5hTixsZWZ0Ok5hTixyaWdodDpOYU59O2xldCBuPW51bGw7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLnN0eWxlLnNwbGl0KCI7IikubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKXN3aXRjaChlKXtjYXNlImZvbnQtZmFtaWx5IjphLnR5cGVmYWNlPSgwLHMuc3RyaXBRdW90ZXMpKHQpO2JyZWFrO2Nhc2UiZm9udC1zaXplIjphLnNpemU9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJmb250LXdlaWdodCI6YS53ZWlnaHQ9dDticmVhaztjYXNlImZvbnQtc3R5bGUiOmEucG9zdHVyZT10O2JyZWFrO2Nhc2UibGV0dGVyLXNwYWNpbmciOmEubGV0dGVyU3BhY2luZz0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbiI6Y29uc3QgZT10LnNwbGl0KC8gXHQvKS5tYXAoKGU9PigwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKSk7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDE6aS50b3A9aS5ib3R0b209aS5sZWZ0PWkucmlnaHQ9ZVswXTticmVhaztjYXNlIDI6aS50b3A9aS5ib3R0b209ZVswXTtpLmxlZnQ9aS5yaWdodD1lWzFdO2JyZWFrO2Nhc2UgMzppLnRvcD1lWzBdO2kuYm90dG9tPWVbMl07aS5sZWZ0PWkucmlnaHQ9ZVsxXTticmVhaztjYXNlIDQ6aS50b3A9ZVswXTtpLmxlZnQ9ZVsxXTtpLmJvdHRvbT1lWzJdO2kucmlnaHQ9ZVszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmkudG9wPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6aS5ib3R0b209KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6aS5sZWZ0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjppLnJpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOm49KDAscy5nZXRNZWFzdXJlbWVudCkodCl9ZS5wdXNoRGF0YShhLGksbik7aWYodGhpc1tyLiRjb250ZW50XSllLmFkZFN0cmluZyh0aGlzW3IuJGNvbnRlbnRdKTtlbHNlIGZvcihjb25zdCB0IG9mIHRoaXNbci4kZ2V0Q2hpbGRyZW5dKCkpIiN0ZXh0IiE9PXRbci4kbm9kZU5hbWVdP3Rbci4kcHVzaEdseXBoc10oZSk6ZS5hZGRTdHJpbmcodFtyLiRjb250ZW50XSk7dCYmZS5wb3BGb250KCl9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD1bXTt0aGlzW3IuJGV4dHJhXT17Y2hpbGRyZW46dH07dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe30pO2lmKDA9PT10Lmxlbmd0aCYmIXRoaXNbci4kY29udGVudF0pcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTtsZXQgYTthPXRoaXNbY10/dGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnJlcGxhY2VBbGwoZiwiXG4iKTp2b2lkIDA6dGhpc1tyLiRjb250ZW50XXx8dm9pZCAwO3JldHVybiBzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZTp0aGlzW3IuJG5vZGVOYW1lXSxhdHRyaWJ1dGVzOntocmVmOnRoaXMuaHJlZixzdHlsZTptYXBTdHlsZSh0aGlzLnN0eWxlLHRoaXMsdGhpc1tjXSl9LGNoaWxkcmVuOnQsdmFsdWU6YX0pfX1jbGFzcyBBIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYSIpO3RoaXMuaHJlZj0oMCxuLmZpeFVSTCkoZS5ocmVmKXx8IiJ9fWNsYXNzIEIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJiIil9W3IuJHB1c2hHbHlwaHNdKGUpe2UucHVzaEZvbnQoe3dlaWdodDoiYm9sZCJ9KTtzdXBlcltyLiRwdXNoR2x5cGhzXShlKTtlLnBvcEZvbnQoKX19Y2xhc3MgQm9keSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImJvZHkiKX1bci4kdG9IVE1MXShlKXtjb25zdCB0PXN1cGVyW3IuJHRvSFRNTF0oZSkse2h0bWw6YX09dDtpZighYSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2EubmFtZT0iZGl2IjthLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl07cmV0dXJuIHR9fWNsYXNzIEJyIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYnIiKX1bci4kdGV4dF0oKXtyZXR1cm4iXG4ifVtyLiRwdXNoR2x5cGhzXShlKXtlLmFkZFN0cmluZygiXG4iKX1bci4kdG9IVE1MXShlKXtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1jbGFzcyBIdG1sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiaHRtbCIpfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9W107dGhpc1tyLiRleHRyYV09e2NoaWxkcmVuOnR9O3RoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHt9KTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW3IuJGNvbnRlbnRdfHwiIn0pO2lmKDE9PT10Lmxlbmd0aCl7Y29uc3QgZT10WzBdO2lmKGUuYXR0cmlidXRlcz8uY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSlyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSxjaGlsZHJlbjp0fSl9fWNsYXNzIEkgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJpIil9W3IuJHB1c2hHbHlwaHNdKGUpe2UucHVzaEZvbnQoe3Bvc3R1cmU6Iml0YWxpYyJ9KTtzdXBlcltyLiRwdXNoR2x5cGhzXShlKTtlLnBvcEZvbnQoKX19Y2xhc3MgTGkgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJsaSIpfX1jbGFzcyBPbCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIm9sIil9fWNsYXNzIFAgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJwIil9W3IuJHB1c2hHbHlwaHNdKGUpe3N1cGVyW3IuJHB1c2hHbHlwaHNdKGUsITEpO2UuYWRkU3RyaW5nKCJcbiIpO2UuYWRkUGFyYSgpO2UucG9wRm9udCgpfVtyLiR0ZXh0XSgpe3JldHVybiB0aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRDaGlsZHJlbl0oKS5hdCgtMSk9PT10aGlzP3N1cGVyW3IuJHRleHRdKCk6c3VwZXJbci4kdGV4dF0oKSsiXG4ifX1jbGFzcyBTcGFuIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwic3BhbiIpfX1jbGFzcyBTdWIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdWIiKX19Y2xhc3MgU3VwIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwic3VwIil9fWNsYXNzIFVsIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwidWwiKX19Y2xhc3MgWGh0bWxOYW1lc3BhY2V7c3RhdGljW2kuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFhodG1sTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBYaHRtbE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgYShlKXtyZXR1cm4gbmV3IEEoZSl9c3RhdGljIGIoZSl7cmV0dXJuIG5ldyBCKGUpfXN0YXRpYyBib2R5KGUpe3JldHVybiBuZXcgQm9keShlKX1zdGF0aWMgYnIoZSl7cmV0dXJuIG5ldyBCcihlKX1zdGF0aWMgaHRtbChlKXtyZXR1cm4gbmV3IEh0bWwoZSl9c3RhdGljIGkoZSl7cmV0dXJuIG5ldyBJKGUpfXN0YXRpYyBsaShlKXtyZXR1cm4gbmV3IExpKGUpfXN0YXRpYyBvbChlKXtyZXR1cm4gbmV3IE9sKGUpfXN0YXRpYyBwKGUpe3JldHVybiBuZXcgUChlKX1zdGF0aWMgc3BhbihlKXtyZXR1cm4gbmV3IFNwYW4oZSl9c3RhdGljIHN1YihlKXtyZXR1cm4gbmV3IFN1YihlKX1zdGF0aWMgc3VwKGUpe3JldHVybiBuZXcgU3VwKGUpfXN0YXRpYyB1bChlKXtyZXR1cm4gbmV3IFVsKGUpfX10LlhodG1sTmFtZXNwYWNlPVhodG1sTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVW5rbm93bk5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg4MCksaT1hKDc4KTtjbGFzcyBVbmtub3duTmFtZXNwYWNle2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZXNwYWNlSWQ9ZX1bci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7cmV0dXJuIG5ldyBpLlhtbE9iamVjdCh0aGlzLm5hbWVzcGFjZUlkLGUsdCl9fXQuVW5rbm93bk5hbWVzcGFjZT1Vbmtub3duTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRGF0YXNldFJlYWRlcj12b2lkIDA7dmFyIHI9YSgyKSxpPWEoMyksbj1hKDY3KTtmdW5jdGlvbiBkZWNvZGVTdHJpbmcoZSl7dHJ5e3JldHVybigwLHIuc3RyaW5nVG9VVEY4U3RyaW5nKShlKX1jYXRjaCh0KXsoMCxyLndhcm4pKGBVVEYtOCBkZWNvZGluZyBmYWlsZWQ6ICIke3R9Ii5gKTtyZXR1cm4gZX19Y2xhc3MgRGF0YXNldFhNTFBhcnNlciBleHRlbmRzIG4uU2ltcGxlWE1MUGFyc2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMubm9kZT1udWxsfW9uRW5kRWxlbWVudChlKXtjb25zdCB0PXN1cGVyLm9uRW5kRWxlbWVudChlKTtpZih0JiYieGZhOmRhdGFzZXRzIj09PWUpe3RoaXMubm9kZT10O3Rocm93IG5ldyBFcnJvcigiQWJvcnRpbmcgRGF0YXNldFhNTFBhcnNlci4iKX19fXQuRGF0YXNldFJlYWRlcj1jbGFzcyBEYXRhc2V0UmVhZGVye2NvbnN0cnVjdG9yKGUpe2lmKGUuZGF0YXNldHMpdGhpcy5ub2RlPW5ldyBuLlNpbXBsZVhNTFBhcnNlcih7aGFzQXR0cmlidXRlczohMH0pLnBhcnNlRnJvbVN0cmluZyhlLmRhdGFzZXRzKS5kb2N1bWVudEVsZW1lbnQ7ZWxzZXtjb25zdCB0PW5ldyBEYXRhc2V0WE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSk7dHJ5e3QucGFyc2VGcm9tU3RyaW5nKGVbInhkcDp4ZHAiXSl9Y2F0Y2goZSl7fXRoaXMubm9kZT10Lm5vZGV9fWdldFZhbHVlKGUpe2lmKCF0aGlzLm5vZGV8fCFlKXJldHVybiIiO2NvbnN0IHQ9dGhpcy5ub2RlLnNlYXJjaE5vZGUoKDAsaS5wYXJzZVhGQVBhdGgpKGUpLDApO2lmKCF0KXJldHVybiIiO2NvbnN0IGE9dC5maXJzdENoaWxkO3JldHVybiJ2YWx1ZSI9PT1hPy5ub2RlTmFtZT90LmNoaWxkcmVuLm1hcCgoZT0+ZGVjb2RlU3RyaW5nKGUudGV4dENvbnRlbnQpKSk6ZGVjb2RlU3RyaW5nKHQudGV4dENvbnRlbnQpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YUmVmPXZvaWQgMDt2YXIgcj1hKDIpLGk9YSg0KSxuPWEoMTYpLHM9YSgzKSxvPWEoNSksYz1hKDY4KTt0LlhSZWY9Y2xhc3MgWFJlZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc3RyZWFtPWU7dGhpcy5wZGZNYW5hZ2VyPXQ7dGhpcy5lbnRyaWVzPVtdO3RoaXMuX3hyZWZTdG1zPW5ldyBTZXQ7dGhpcy5fY2FjaGVNYXA9bmV3IE1hcDt0aGlzLl9wZW5kaW5nUmVmcz1uZXcgaS5SZWZTZXQ7dGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsO3RoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsfWdldE5ld1BlcnNpc3RlbnRSZWYoZSl7bnVsbD09PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0mJih0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO2NvbnN0IHQ9dGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bSsrO3RoaXMuX2NhY2hlTWFwLnNldCh0LGUpO3JldHVybiBpLlJlZi5nZXQodCwwKX1nZXROZXdUZW1wb3JhcnlSZWYoKXtudWxsPT09dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtJiYodGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3JldHVybiBpLlJlZi5nZXQodGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtKyssMCl9cmVzZXROZXdUZW1wb3JhcnlSZWYoKXt0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09bnVsbH1zZXRTdGFydFhSZWYoZSl7dGhpcy5zdGFydFhSZWZRdWV1ZT1bZV19cGFyc2UoZT0hMSl7bGV0IHQsYSxuO2lmKGUpeygwLHIud2FybikoIkluZGV4aW5nIGFsbCBQREYgb2JqZWN0cyIpO3Q9dGhpcy5pbmRleE9iamVjdHMoKX1lbHNlIHQ9dGhpcy5yZWFkWFJlZigpO3QuYXNzaWduWHJlZih0aGlzKTt0aGlzLnRyYWlsZXI9dDt0cnl7YT10LmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKGEgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9dC5nZXQoIklEIikscj1lPy5sZW5ndGg/ZVswXToiIjthLnN1cHByZXNzRW5jcnlwdGlvbj0hMDt0aGlzLmVuY3J5cHQ9bmV3IGMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeShhLHIsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7bj10LmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKG4gaW5zdGFuY2VvZiBpLkRpY3QpdHJ5e2lmKG4uZ2V0KCJQYWdlcyIpaW5zdGFuY2VvZiBpLkRpY3Qpe3RoaXMucm9vdD1uO3JldHVybn19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxyLndhcm4pKGBYUmVmLnBhcnNlIC0gSW52YWxpZCAiUGFnZXMiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKCFlKXRocm93IG5ldyBzLlhSZWZQYXJzZUV4Y2VwdGlvbjt0aHJvdyBuZXcgci5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFJvb3QgcmVmZXJlbmNlLiIpfXByb2Nlc3NYUmVmVGFibGUoZSl7InRhYmxlU3RhdGUiaW4gdGhpc3x8KHRoaXMudGFibGVTdGF0ZT17ZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5sZXhlci5zdHJlYW0ucG9zLHBhcnNlckJ1ZjE6ZS5idWYxLHBhcnNlckJ1ZjI6ZS5idWYyfSk7Y29uc3QgdD10aGlzLnJlYWRYUmVmVGFibGUoZSk7aWYoISgwLGkuaXNDbWQpKHQsInRyYWlsZXIiKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgZmluZCB0cmFpbGVyIGRpY3Rpb25hcnkiKTtsZXQgYT1lLmdldE9iaigpO2EgaW5zdGFuY2VvZiBpLkRpY3R8fCFhLmRpY3R8fChhPWEuZGljdCk7aWYoIShhIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgcGFyc2UgdHJhaWxlciBkaWN0aW9uYXJ5Iik7ZGVsZXRlIHRoaXMudGFibGVTdGF0ZTtyZXR1cm4gYX1yZWFkWFJlZlRhYmxlKGUpe2NvbnN0IHQ9ZS5sZXhlci5zdHJlYW0sYT10aGlzLnRhYmxlU3RhdGU7dC5wb3M9YS5zdHJlYW1Qb3M7ZS5idWYxPWEucGFyc2VyQnVmMTtlLmJ1ZjI9YS5wYXJzZXJCdWYyO2xldCBuO2Zvcig7Oyl7aWYoISgiZmlyc3RFbnRyeU51bSJpbiBhKXx8ISgiZW50cnlDb3VudCJpbiBhKSl7aWYoKDAsaS5pc0NtZCkobj1lLmdldE9iaigpLCJ0cmFpbGVyIikpYnJlYWs7YS5maXJzdEVudHJ5TnVtPW47YS5lbnRyeUNvdW50PWUuZ2V0T2JqKCl9bGV0IHM9YS5maXJzdEVudHJ5TnVtO2NvbnN0IG89YS5lbnRyeUNvdW50O2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHMpfHwhTnVtYmVyLmlzSW50ZWdlcihvKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB3cm9uZyB0eXBlcyBpbiBzdWJzZWN0aW9uIGhlYWRlciIpO2ZvcihsZXQgbj1hLmVudHJ5TnVtO248bztuKyspe2Euc3RyZWFtUG9zPXQucG9zO2EuZW50cnlOdW09bjthLnBhcnNlckJ1ZjE9ZS5idWYxO2EucGFyc2VyQnVmMj1lLmJ1ZjI7Y29uc3QgYz17fTtjLm9mZnNldD1lLmdldE9iaigpO2MuZ2VuPWUuZ2V0T2JqKCk7Y29uc3QgbD1lLmdldE9iaigpO2lmKGwgaW5zdGFuY2VvZiBpLkNtZClzd2l0Y2gobC5jbWQpe2Nhc2UiZiI6Yy5mcmVlPSEwO2JyZWFrO2Nhc2UibiI6Yy51bmNvbXByZXNzZWQ9ITB9aWYoIU51bWJlci5pc0ludGVnZXIoYy5vZmZzZXQpfHwhTnVtYmVyLmlzSW50ZWdlcihjLmdlbil8fCFjLmZyZWUmJiFjLnVuY29tcHJlc3NlZCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICR7c30sICR7b31gKTswPT09biYmYy5mcmVlJiYxPT09cyYmKHM9MCk7dGhpcy5lbnRyaWVzW24rc118fCh0aGlzLmVudHJpZXNbbitzXT1jKX1hLmVudHJ5TnVtPTA7YS5zdHJlYW1Qb3M9dC5wb3M7YS5wYXJzZXJCdWYxPWUuYnVmMTthLnBhcnNlckJ1ZjI9ZS5idWYyO2RlbGV0ZSBhLmZpcnN0RW50cnlOdW07ZGVsZXRlIGEuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB1bmV4cGVjdGVkIGZpcnN0IG9iamVjdCIpO3JldHVybiBufXByb2Nlc3NYUmVmU3RyZWFtKGUpe2lmKCEoInN0cmVhbVN0YXRlImluIHRoaXMpKXtjb25zdCB0PWUuZGljdCxhPXQuZ2V0KCJXIik7bGV0IHI9dC5nZXQoIkluZGV4Iik7cnx8KHI9WzAsdC5nZXQoIlNpemUiKV0pO3RoaXMuc3RyZWFtU3RhdGU9e2VudHJ5UmFuZ2VzOnIsYnl0ZVdpZHRoczphLGVudHJ5TnVtOjAsc3RyZWFtUG9zOmUucG9zfX10aGlzLnJlYWRYUmVmU3RyZWFtKGUpO2RlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlO3JldHVybiBlLmRpY3R9cmVhZFhSZWZTdHJlYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbVN0YXRlO2UucG9zPXQuc3RyZWFtUG9zO2NvbnN0W2EsaSxuXT10LmJ5dGVXaWR0aHMscz10LmVudHJ5UmFuZ2VzO2Zvcig7cy5sZW5ndGg+MDspe2NvbnN0W28sY109cztpZighTnVtYmVyLmlzSW50ZWdlcihvKXx8IU51bWJlci5pc0ludGVnZXIoYykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6ICR7b30sICR7Y31gKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG4pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogJHtvfSwgJHtjfWApO2ZvcihsZXQgcz10LmVudHJ5TnVtO3M8YzsrK3Mpe3QuZW50cnlOdW09czt0LnN0cmVhbVBvcz1lLnBvcztsZXQgYz0wLGw9MCxoPTA7Zm9yKGxldCB0PTA7dDxhOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtjPWM8PDh8dH0wPT09YSYmKGM9MSk7Zm9yKGxldCB0PTA7dDxpOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdvZmZzZXQnLiIpO2w9bDw8OHx0fWZvcihsZXQgdD0wO3Q8bjsrK3Qpe2NvbnN0IHQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnZ2VuZXJhdGlvbicuIik7aD1oPDw4fHR9Y29uc3QgdT17fTt1Lm9mZnNldD1sO3UuZ2VuPWg7c3dpdGNoKGMpe2Nhc2UgMDp1LmZyZWU9ITA7YnJlYWs7Y2FzZSAxOnUudW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogJHtjfWApfXRoaXMuZW50cmllc1tvK3NdfHwodGhpcy5lbnRyaWVzW28rc109dSl9dC5lbnRyeU51bT0wO3Quc3RyZWFtUG9zPWUucG9zO3Muc3BsaWNlKDAsMil9fWluZGV4T2JqZWN0cygpe2Z1bmN0aW9uIHJlYWRUb2tlbihlLHQpe2xldCBhPSIiLHI9ZVt0XTtmb3IoOzEwIT09ciYmMTMhPT1yJiY2MCE9PXImJiEoKyt0Pj1lLmxlbmd0aCk7KXthKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpO3I9ZVt0XX1yZXR1cm4gYX1mdW5jdGlvbiBza2lwVW50aWwoZSx0LGEpe2NvbnN0IHI9YS5sZW5ndGgsaT1lLmxlbmd0aDtsZXQgbj0wO2Zvcig7dDxpOyl7bGV0IGk9MDtmb3IoO2k8ciYmZVt0K2ldPT09YVtpXTspKytpO2lmKGk+PXIpYnJlYWs7dCsrO24rK31yZXR1cm4gbn1jb25zdCBlPS9cYihlbmRvYmp8XGQrXHMrXGQrXHMrb2JqfHhyZWZ8dHJhaWxlcilcYi9nLHQ9L1xiKHN0YXJ0eHJlZnxcZCtccytcZCtccytvYmopXGIvZyxhPS9eKFxkKylccysoXGQrKVxzK29ialxiLyxvPW5ldyBVaW50OEFycmF5KFsxMTYsMTE0LDk3LDEwNSwxMDgsMTAxLDExNF0pLGM9bmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsOTcsMTE0LDExNiwxMjAsMTE0LDEwMSwxMDJdKSxsPW5ldyBVaW50OEFycmF5KFs0Nyw4OCw4MiwxMDEsMTAyXSk7dGhpcy5lbnRyaWVzLmxlbmd0aD0wO3RoaXMuX2NhY2hlTWFwLmNsZWFyKCk7Y29uc3QgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2NvbnN0IHU9aC5nZXRCeXRlcygpLGQ9KDAsci5ieXRlc1RvU3RyaW5nKSh1KSxmPXUubGVuZ3RoO2xldCBnPWguc3RhcnQ7Y29uc3QgcD1bXSxtPVtdO2Zvcig7ZzxmOyl7bGV0IGk9dVtnXTtpZig5PT09aXx8MTA9PT1pfHwxMz09PWl8fDMyPT09aSl7KytnO2NvbnRpbnVlfWlmKDM3PT09aSl7ZG97KytnO2lmKGc+PWYpYnJlYWs7aT11W2ddfXdoaWxlKDEwIT09aSYmMTMhPT1pKTtjb250aW51ZX1jb25zdCBiPXJlYWRUb2tlbih1LGcpO2xldCB5O2lmKGIuc3RhcnRzV2l0aCgieHJlZiIpJiYoND09PWIubGVuZ3RofHwvXHMvLnRlc3QoYls0XSkpKXtnKz1za2lwVW50aWwodSxnLG8pO3AucHVzaChnKTtnKz1za2lwVW50aWwodSxnLGMpfWVsc2UgaWYoeT1hLmV4ZWMoYikpe2NvbnN0IHQ9MHx5WzFdLGE9MHx5WzJdLGk9ZytiLmxlbmd0aDtsZXQgbyxjPSExO2lmKHRoaXMuZW50cmllc1t0XSl7aWYodGhpcy5lbnRyaWVzW3RdLmdlbj09PWEpdHJ5e25ldyBuLlBhcnNlcih7bGV4ZXI6bmV3IG4uTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKGkpKX0pLmdldE9iaigpO2M9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIHMuUGFyc2VyRU9GRXhjZXB0aW9uPygwLHIud2FybikoYGluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCR7Yn0pOiAiJHtlfSIuYCk6Yz0hMH19ZWxzZSBjPSEwO2MmJih0aGlzLmVudHJpZXNbdF09e29mZnNldDpnLWguc3RhcnQsZ2VuOmEsdW5jb21wcmVzc2VkOiEwfSk7ZS5sYXN0SW5kZXg9aTtjb25zdCBwPWUuZXhlYyhkKTtpZihwKXtvPWUubGFzdEluZGV4KzEtZztpZigiZW5kb2JqIiE9PXBbMV0peygwLHIud2FybikoYGluZGV4T2JqZWN0czogRm91bmQgIiR7cFsxXX0iIGluc2lkZSBvZiBhbm90aGVyICJvYmoiLCBjYXVzZWQgYnkgbWlzc2luZyAiZW5kb2JqIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci5gKTtvLT1wWzFdLmxlbmd0aCsxfX1lbHNlIG89Zi1nO2NvbnN0IHc9dS5zdWJhcnJheShnLGcrbyksUz1za2lwVW50aWwodywwLGwpO2lmKFM8byYmd1tTKzVdPDY0KXttLnB1c2goZy1oLnN0YXJ0KTt0aGlzLl94cmVmU3Rtcy5hZGQoZy1oLnN0YXJ0KX1nKz1vfWVsc2UgaWYoYi5zdGFydHNXaXRoKCJ0cmFpbGVyIikmJig3PT09Yi5sZW5ndGh8fC9ccy8udGVzdChiWzddKSkpe3AucHVzaChnKTtjb25zdCBlPWcrYi5sZW5ndGg7bGV0IGE7dC5sYXN0SW5kZXg9ZTtjb25zdCBpPXQuZXhlYyhkKTtpZihpKXthPXQubGFzdEluZGV4KzEtZztpZigic3RhcnR4cmVmIiE9PWlbMV0peygwLHIud2FybikoYGluZGV4T2JqZWN0czogRm91bmQgIiR7aVsxXX0iIGFmdGVyICJ0cmFpbGVyIiwgY2F1c2VkIGJ5IG1pc3NpbmcgInN0YXJ0eHJlZiIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuYCk7YS09aVsxXS5sZW5ndGgrMX19ZWxzZSBhPWYtZztnKz1hfWVsc2UgZys9Yi5sZW5ndGgrMX1mb3IoY29uc3QgZSBvZiBtKXt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goZSk7dGhpcy5yZWFkWFJlZighMCl9Y29uc3QgYj1bXTtsZXQgeSx3LFM9ITE7Zm9yKGNvbnN0IGUgb2YgcCl7aC5wb3M9ZTtjb25zdCB0PW5ldyBuLlBhcnNlcih7bGV4ZXI6bmV3IG4uTGV4ZXIoaCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMCxyZWNvdmVyeU1vZGU6ITB9KSxhPXQuZ2V0T2JqKCk7aWYoISgwLGkuaXNDbWQpKGEsInRyYWlsZXIiKSljb250aW51ZTtjb25zdCByPXQuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIGkuRGljdCl7Yi5wdXNoKHIpO3IuaGFzKCJFbmNyeXB0IikmJihTPSEwKX19Zm9yKGNvbnN0IGUgb2ZbLi4uYiwiZ2VuRmFsbGJhY2siLC4uLmJdKXtpZigiZ2VuRmFsbGJhY2siPT09ZSl7aWYoIXcpYnJlYWs7dGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrPSEwO2NvbnRpbnVlfWxldCB0PSExO3RyeXtjb25zdCBhPWUuZ2V0KCJSb290Iik7aWYoIShhIGluc3RhbmNlb2YgaS5EaWN0KSljb250aW51ZTtjb25zdCByPWEuZ2V0KCJQYWdlcyIpO2lmKCEociBpbnN0YW5jZW9mIGkuRGljdCkpY29udGludWU7Y29uc3Qgbj1yLmdldCgiQ291bnQiKTtOdW1iZXIuaXNJbnRlZ2VyKG4pJiYodD0hMCl9Y2F0Y2goZSl7dz1lO2NvbnRpbnVlfWlmKHQmJighU3x8ZS5oYXMoIkVuY3J5cHQiKSkmJmUuaGFzKCJJRCIpKXJldHVybiBlO3k9ZX1pZih5KXJldHVybiB5O2lmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O3Rocm93IG5ldyByLkludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUERGIHN0cnVjdHVyZS4iKX1yZWFkWFJlZihlPSExKXtjb25zdCB0PXRoaXMuc3RyZWFtLGE9bmV3IFNldDtmb3IoO3RoaXMuc3RhcnRYUmVmUXVldWUubGVuZ3RoOyl7dHJ5e2NvbnN0IGU9dGhpcy5zdGFydFhSZWZRdWV1ZVswXTtpZihhLmhhcyhlKSl7KDAsci53YXJuKSgicmVhZFhSZWYgLSBza2lwcGluZyBYUmVmIHRhYmxlIHNpbmNlIGl0IHdhcyBhbHJlYWR5IHBhcnNlZC4iKTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7Y29udGludWV9YS5hZGQoZSk7dC5wb3M9ZSt0LnN0YXJ0O2NvbnN0IHM9bmV3IG4uUGFyc2VyKHtsZXhlcjpuZXcgbi5MZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7bGV0IGMsbD1zLmdldE9iaigpO2lmKCgwLGkuaXNDbWQpKGwsInhyZWYiKSl7Yz10aGlzLnByb2Nlc3NYUmVmVGFibGUocyk7dGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWMpO2w9Yy5nZXQoIlhSZWZTdG0iKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiYhdGhpcy5feHJlZlN0bXMuaGFzKGwpKXt0aGlzLl94cmVmU3Rtcy5hZGQobCk7dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKGwpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihzLmdldE9iaigpKSYmKDAsaS5pc0NtZCkocy5nZXRPYmooKSwib2JqIikmJihsPXMuZ2V0T2JqKCkpaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7Yz10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpO3RoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1jKTtpZighYyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWMuZ2V0KCJQcmV2Iik7TnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIGkuUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBzLlhSZWZQYXJzZUV4Y2VwdGlvbn1nZXQgbGFzdFhSZWZTdHJlYW1Qb3MoKXtyZXR1cm4gdGhpcy5feHJlZlN0bXMuc2l6ZT4wP01hdGgubWF4KC4uLnRoaXMuX3hyZWZTdG1zKTpudWxsfWdldEVudHJ5KGUpe2NvbnN0IHQ9dGhpcy5lbnRyaWVzW2VdO3JldHVybiB0JiYhdC5mcmVlJiZ0Lm9mZnNldD90Om51bGx9ZmV0Y2hJZlJlZihlLHQ9ITEpe3JldHVybiBlIGluc3RhbmNlb2YgaS5SZWY/dGhpcy5mZXRjaChlLHQpOmV9ZmV0Y2goZSx0PSExKXtpZighKGUgaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IEVycm9yKCJyZWYgb2JqZWN0IGlzIG5vdCBhIHJlZmVyZW5jZSIpO2NvbnN0IGE9ZS5udW0sbj10aGlzLl9jYWNoZU1hcC5nZXQoYSk7aWYodm9pZCAwIT09bil7biBpbnN0YW5jZW9mIGkuRGljdCYmIW4ub2JqSWQmJihuLm9iaklkPWUudG9TdHJpbmcoKSk7cmV0dXJuIG59bGV0IHM9dGhpcy5nZXRFbnRyeShhKTtpZihudWxsPT09cyl7dGhpcy5fY2FjaGVNYXAuc2V0KGEscyk7cmV0dXJuIHN9aWYodGhpcy5fcGVuZGluZ1JlZnMuaGFzKGUpKXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7KDAsci53YXJuKShgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke2V9LmApO3JldHVybiBpLkNJUkNVTEFSX1JFRn10aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e3M9cy51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLHMsdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxzLHQpO3RoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7dGhyb3cgdH1zIGluc3RhbmNlb2YgaS5EaWN0P3Mub2JqSWQ9ZS50b1N0cmluZygpOnMgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJihzLmRpY3Qub2JqSWQ9ZS50b1N0cmluZygpKTtyZXR1cm4gc31mZXRjaFVuY29tcHJlc3NlZChlLHQsYT0hMSl7Y29uc3QgYz1lLmdlbjtsZXQgbD1lLm51bTtpZih0LmdlbiE9PWMpe2NvbnN0IG49YEluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICR7ZX1gO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48Yyl7KDAsci53YXJuKShuKTtyZXR1cm4gdGhpcy5mZXRjaFVuY29tcHJlc3NlZChpLlJlZi5nZXQobCx0LmdlbiksdCxhKX10aHJvdyBuZXcgcy5YUmVmRW50cnlFeGNlcHRpb24obil9Y29uc3QgaD10aGlzLnN0cmVhbS5tYWtlU3ViU3RyZWFtKHQub2Zmc2V0K3RoaXMuc3RyZWFtLnN0YXJ0KSx1PW5ldyBuLlBhcnNlcih7bGV4ZXI6bmV3IG4uTGV4ZXIoaCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pLGQ9dS5nZXRPYmooKSxmPXUuZ2V0T2JqKCksZz11LmdldE9iaigpO2lmKGQhPT1sfHxmIT09Y3x8IShnIGluc3RhbmNlb2YgaS5DbWQpKXRocm93IG5ldyBzLlhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7ZX1gKTtpZigib2JqIiE9PWcuY21kKXtpZihnLmNtZC5zdGFydHNXaXRoKCJvYmoiKSl7bD1wYXJzZUludChnLmNtZC5zdWJzdHJpbmcoMyksMTApO2lmKCFOdW1iZXIuaXNOYU4obCkpcmV0dXJuIGx9dGhyb3cgbmV3IHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApfSh0PXRoaXMuZW5jcnlwdCYmIWE/dS5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShsLGMpKTp1LmdldE9iaigpKWluc3RhbmNlb2Ygby5CYXNlU3RyZWFtfHx0aGlzLl9jYWNoZU1hcC5zZXQobCx0KTtyZXR1cm4gdH1mZXRjaENvbXByZXNzZWQoZSx0LGE9ITEpe2NvbnN0IGM9dC5vZmZzZXQsbD10aGlzLmZldGNoKGkuUmVmLmdldChjLDApKTtpZighKGwgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJiYWQgT2JqU3RtIHN0cmVhbSIpO2NvbnN0IGg9bC5kaWN0LmdldCgiRmlyc3QiKSx1PWwuZGljdC5nZXQoIk4iKTtpZighTnVtYmVyLmlzSW50ZWdlcihoKXx8IU51bWJlci5pc0ludGVnZXIodSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpO2xldCBkPW5ldyBuLlBhcnNlcih7bGV4ZXI6bmV3IG4uTGV4ZXIobCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pO2NvbnN0IGY9bmV3IEFycmF5KHUpLGc9bmV3IEFycmF5KHUpO2ZvcihsZXQgZT0wO2U8dTsrK2Upe2NvbnN0IHQ9ZC5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcih0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke3R9YCk7Y29uc3QgYT1kLmdldE9iaigpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7YX1gKTtmW2VdPXQ7Z1tlXT1hfWNvbnN0IHA9KGwuc3RhcnR8fDApK2gsbT1uZXcgQXJyYXkodSk7Zm9yKGxldCBlPTA7ZTx1OysrZSl7Y29uc3QgdD1lPHUtMT9nW2UrMV0tZ1tlXTp2b2lkIDA7aWYodDwwKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbS4iKTtkPW5ldyBuLlBhcnNlcih7bGV4ZXI6bmV3IG4uTGV4ZXIobC5tYWtlU3ViU3RyZWFtKHArZ1tlXSx0LGwuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBhPWQuZ2V0T2JqKCk7bVtlXT1hO2lmKGEgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pY29udGludWU7Y29uc3QgaT1mW2VdLHM9dGhpcy5lbnRyaWVzW2ldO3MmJnMub2Zmc2V0PT09YyYmcy5nZW49PT1lJiZ0aGlzLl9jYWNoZU1hcC5zZXQoaSxhKX1pZih2b2lkIDA9PT0odD1tW3QuZ2VuXSkpdGhyb3cgbmV3IHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7ZX1gKTtyZXR1cm4gdH1hc3luYyBmZXRjaElmUmVmQXN5bmMoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuUmVmP3RoaXMuZmV0Y2hBc3luYyhlLHQpOmV9YXN5bmMgZmV0Y2hBc3luYyhlLHQpe3RyeXtyZXR1cm4gdGhpcy5mZXRjaChlLHQpfWNhdGNoKGEpe2lmKCEoYSBpbnN0YW5jZW9mIHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pKXRocm93IGE7YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLnJlcXVlc3RSYW5nZShhLmJlZ2luLGEuZW5kKTtyZXR1cm4gdGhpcy5mZXRjaEFzeW5jKGUsdCl9fWdldENhdGFsb2dPYmooKXtyZXR1cm4gdGhpcy5yb290fX19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuaXNOb2RlSlM9dm9pZCAwO2NvbnN0IGE9ISgib2JqZWN0IiE9dHlwZW9mIHByb2Nlc3N8fHByb2Nlc3MrIiIhPSJbb2JqZWN0IHByb2Nlc3NdInx8cHJvY2Vzcy52ZXJzaW9ucy5ud3x8cHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbiYmcHJvY2Vzcy50eXBlJiYiYnJvd3NlciIhPT1wcm9jZXNzLnR5cGUpO3QuaXNOb2RlSlM9YX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk1lc3NhZ2VIYW5kbGVyPXZvaWQgMDt2YXIgcj1hKDIpO2NvbnN0IGk9MSxuPTIscz0xLG89MixjPTMsbD00LGg9NSx1PTYsZD03LGY9ODtmdW5jdGlvbiB3cmFwUmVhc29uKGUpe2UgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KDAsci51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyk7c3dpdGNoKGUubmFtZSl7Y2FzZSJBYm9ydEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLkFib3J0RXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJNaXNzaW5nUERGRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuTWlzc2luZ1BERkV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOnJldHVybiBuZXcgci5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKTtjYXNlIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2Nhc2UiVW5rbm93bkVycm9yRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLmRldGFpbHMpO2RlZmF1bHQ6cmV0dXJuIG5ldyByLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKX19dC5NZXNzYWdlSGFuZGxlcj1jbGFzcyBNZXNzYWdlSGFuZGxlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5zb3VyY2VOYW1lPWU7dGhpcy50YXJnZXROYW1lPXQ7dGhpcy5jb21PYmo9YTt0aGlzLmNhbGxiYWNrSWQ9MTt0aGlzLnN0cmVhbUlkPTE7dGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZT0+e2NvbnN0IHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZSE9PXRoaXMuc291cmNlTmFtZSlyZXR1cm47aWYodC5zdHJlYW0pe3RoaXMuI3QodCk7cmV0dXJufWlmKHQuY2FsbGJhY2spe2NvbnN0IGU9dC5jYWxsYmFja0lkLGE9dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZighYSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGNhbGxiYWNrICR7ZX1gKTtkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZih0LmNhbGxiYWNrPT09aSlhLnJlc29sdmUodC5kYXRhKTtlbHNle2lmKHQuY2FsbGJhY2shPT1uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlIik7YS5yZWplY3Qod3JhcFJlYXNvbih0LnJlYXNvbikpfXJldHVybn1jb25zdCByPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHt0LmFjdGlvbn1gKTtpZih0LmNhbGxiYWNrSWQpe2NvbnN0IGU9dGhpcy5zb3VyY2VOYW1lLHM9dC5zb3VyY2VOYW1lO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHIodC5kYXRhKSl9KSkudGhlbigoZnVuY3Rpb24ocil7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTplLHRhcmdldE5hbWU6cyxjYWxsYmFjazppLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLGRhdGE6cn0pfSksKGZ1bmN0aW9uKHIpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6ZSx0YXJnZXROYW1lOnMsY2FsbGJhY2s6bixjYWxsYmFja0lkOnQuY2FsbGJhY2tJZCxyZWFzb246d3JhcFJlYXNvbihyKX0pfSkpfWVsc2UgdC5zdHJlYW1JZD90aGlzLiNhKHQpOnIodC5kYXRhKX07YS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9b24oZSx0KXtjb25zdCBhPXRoaXMuYWN0aW9uSGFuZGxlcjtpZihhW2VdKXRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCAiJHtlfSJgKTthW2VdPXR9c2VuZChlLHQsYSl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dH0sYSl9c2VuZFdpdGhQcm9taXNlKGUsdCxhKXtjb25zdCBpPXRoaXMuY2FsbGJhY2tJZCsrLG49bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tpXT1uO3RyeXt0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsY2FsbGJhY2tJZDppLGRhdGE6dH0sYSl9Y2F0Y2goZSl7bi5yZWplY3QoZSl9cmV0dXJuIG4ucHJvbWlzZX1zZW5kV2l0aFN0cmVhbShlLHQsYSxpKXtjb25zdCBuPXRoaXMuc3RyZWFtSWQrKyxvPXRoaXMuc291cmNlTmFtZSxjPXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmE9Pntjb25zdCBzPW5ldyByLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbbl09e2NvbnRyb2xsZXI6YSxzdGFydENhbGw6cyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX07bC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6YyxhY3Rpb246ZSxzdHJlYW1JZDpuLGRhdGE6dCxkZXNpcmVkU2l6ZTphLmRlc2lyZWRTaXplfSxpKTtyZXR1cm4gcy5wcm9taXNlfSxwdWxsOmU9Pntjb25zdCB0PW5ldyByLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbbl0ucHVsbENhbGw9dDtsLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOm8sdGFyZ2V0TmFtZTpjLHN0cmVhbTp1LHN0cmVhbUlkOm4sZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZX0pO3JldHVybiB0LnByb21pc2V9LGNhbmNlbDplPT57KDAsci5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO2NvbnN0IHQ9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tuXS5jYW5jZWxDYWxsPXQ7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tuXS5pc0Nsb3NlZD0hMDtsLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOm8sdGFyZ2V0TmFtZTpjLHN0cmVhbTpzLHN0cmVhbUlkOm4scmVhc29uOndyYXBSZWFzb24oZSl9KTtyZXR1cm4gdC5wcm9taXNlfX0sYSl9I2EoZSl7Y29uc3QgdD1lLnN0cmVhbUlkLGE9dGhpcy5zb3VyY2VOYW1lLGk9ZS5zb3VyY2VOYW1lLG49dGhpcy5jb21PYmoscz10aGlzLG89dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXSx1PXtlbnF1ZXVlKGUscz0xLG8pe2lmKHRoaXMuaXNDYW5jZWxsZWQpcmV0dXJuO2NvbnN0IGM9dGhpcy5kZXNpcmVkU2l6ZTt0aGlzLmRlc2lyZWRTaXplLT1zO2lmKGM+MCYmdGhpcy5kZXNpcmVkU2l6ZTw9MCl7dGhpcy5zaW5rQ2FwYWJpbGl0eT1uZXcgci5Qcm9taXNlQ2FwYWJpbGl0eTt0aGlzLnJlYWR5PXRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZX1uLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTppLHN0cmVhbTpsLHN0cmVhbUlkOnQsY2h1bms6ZX0sbyl9LGNsb3NlKCl7aWYoIXRoaXMuaXNDYW5jZWxsZWQpe3RoaXMuaXNDYW5jZWxsZWQ9ITA7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6aSxzdHJlYW06YyxzdHJlYW1JZDp0fSk7ZGVsZXRlIHMuc3RyZWFtU2lua3NbdF19fSxlcnJvcihlKXsoMCxyLmFzc2VydCkoZSBpbnN0YW5jZW9mIEVycm9yLCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTppLHN0cmVhbTpoLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX19LHNpbmtDYXBhYmlsaXR5Om5ldyByLlByb21pc2VDYXBhYmlsaXR5LG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTt1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZTt0aGlzLnN0cmVhbVNpbmtzW3RdPXU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobyhlLmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6aSxzdHJlYW06ZixzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTppLHN0cmVhbTpmLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX0pKX0jdChlKXtjb25zdCB0PWUuc3RyZWFtSWQsYT10aGlzLnNvdXJjZU5hbWUsaT1lLnNvdXJjZU5hbWUsbj10aGlzLmNvbU9iaixnPXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF0scD10aGlzLnN0cmVhbVNpbmtzW3RdO3N3aXRjaChlLnN0cmVhbSl7Y2FzZSBmOmUuc3VjY2Vzcz9nLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6Zy5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIGQ6ZS5zdWNjZXNzP2cucHVsbENhbGwucmVzb2x2ZSgpOmcucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIHU6aWYoIXApe24ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOmksc3RyZWFtOmQsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSk7YnJlYWt9cC5kZXNpcmVkU2l6ZTw9MCYmZS5kZXNpcmVkU2l6ZT4wJiZwLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtwLmRlc2lyZWRTaXplPWUuZGVzaXJlZFNpemU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2UocC5vblB1bGw/LigpKX0pKS50aGVuKChmdW5jdGlvbigpe24ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOmksc3RyZWFtOmQsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6aSxzdHJlYW06ZCxzdHJlYW1JZDp0LHJlYXNvbjp3cmFwUmVhc29uKGUpfSl9KSk7YnJlYWs7Y2FzZSBsOigwLHIuYXNzZXJ0KShnLCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7aWYoZy5pc0Nsb3NlZClicmVhaztnLmNvbnRyb2xsZXIuZW5xdWV1ZShlLmNodW5rKTticmVhaztjYXNlIGM6KDAsci5hc3NlcnQpKGcsImNsb3NlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7aWYoZy5pc0Nsb3NlZClicmVhaztnLmlzQ2xvc2VkPSEwO2cuY29udHJvbGxlci5jbG9zZSgpO3RoaXMuI3IoZyx0KTticmVhaztjYXNlIGg6KDAsci5hc3NlcnQpKGcsImVycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7Zy5jb250cm9sbGVyLmVycm9yKHdyYXBSZWFzb24oZS5yZWFzb24pKTt0aGlzLiNyKGcsdCk7YnJlYWs7Y2FzZSBvOmUuc3VjY2Vzcz9nLmNhbmNlbENhbGwucmVzb2x2ZSgpOmcuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuI3IoZyx0KTticmVhaztjYXNlIHM6aWYoIXApYnJlYWs7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocC5vbkNhbmNlbD8uKHdyYXBSZWFzb24oZS5yZWFzb24pKSl9KSkudGhlbigoZnVuY3Rpb24oKXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTppLHN0cmVhbTpvLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe24ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOmksc3RyZWFtOm8sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpO3Auc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTtwLmlzQ2FuY2VsbGVkPSEwO2RlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jI3IoZSx0KXthd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsPy5wcm9taXNlLGUucHVsbENhbGw/LnByb21pc2UsZS5jYW5jZWxDYWxsPy5wcm9taXNlXSk7ZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF19ZGVzdHJveSgpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUERGV29ya2VyU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDIpO3QuUERGV29ya2VyU3RyZWFtPWNsYXNzIFBERldvcmtlclN0cmVhbXtjb25zdHJ1Y3RvcihlKXt0aGlzLl9tc2dIYW5kbGVyPWU7dGhpcy5fY29udGVudExlbmd0aD1udWxsO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGw7dGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1nZXRGdWxsUmVhZGVyKCl7KDAsci5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGV29ya2VyU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIik7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IFBERldvcmtlclN0cmVhbVJlYWRlcih0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9Z2V0UmFuZ2VSZWFkZXIoZSx0KXtjb25zdCBhPW5ldyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcihlLHQsdGhpcy5fbXNnSGFuZGxlcik7dGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKGEpO3JldHVybiBhfWNhbmNlbEFsbFJlcXVlc3RzKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKSl0LmNhbmNlbChlKX19O2NsYXNzIFBERldvcmtlclN0cmVhbVJlYWRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLl9tc2dIYW5kbGVyPWU7dGhpcy5vblByb2dyZXNzPW51bGw7dGhpcy5fY29udGVudExlbmd0aD1udWxsO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITE7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ITE7Y29uc3QgdD10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSZWFkZXIiKTt0aGlzLl9yZWFkZXI9dC5nZXRSZWFkZXIoKTt0aGlzLl9oZWFkZXJzUmVhZHk9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIlJlYWRlckhlYWRlcnNSZWFkeSIpLnRoZW4oKGU9Pnt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD1lLmlzU3RyZWFtaW5nU3VwcG9ydGVkO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ZS5pc1JhbmdlU3VwcG9ydGVkO3RoaXMuX2NvbnRlbnRMZW5ndGg9ZS5jb250ZW50TGVuZ3RofSkpfWdldCBoZWFkZXJzUmVhZHkoKXtyZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5fWdldCBjb250ZW50TGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGh9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWdldCBpc1JhbmdlU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9YXN5bmMgcmVhZCgpe2NvbnN0e3ZhbHVlOmUsZG9uZTp0fT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO3JldHVybiB0P3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOmUuYnVmZmVyLGRvbmU6ITF9fWNhbmNlbChlKXt0aGlzLl9yZWFkZXIuY2FuY2VsKGUpfX1jbGFzcyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5fbXNnSGFuZGxlcj1hO3RoaXMub25Qcm9ncmVzcz1udWxsO2NvbnN0IHI9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmFuZ2VSZWFkZXIiLHtiZWdpbjplLGVuZDp0fSk7dGhpcy5fcmVhZGVyPXIuZ2V0UmVhZGVyKCl9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuITF9YXN5bmMgcmVhZCgpe2NvbnN0e3ZhbHVlOmUsZG9uZTp0fT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO3JldHVybiB0P3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOmUuYnVmZmVyLGRvbmU6ITF9fWNhbmNlbChlKXt0aGlzLl9yZWFkZXIuY2FuY2VsKGUpfX19XSx0PXt9O2Z1bmN0aW9uIF9fd19wZGZqc19yZXF1aXJlX18oYSl7dmFyIHI9dFthXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIGk9dFthXT17ZXhwb3J0czp7fX07ZVthXShpLGkuZXhwb3J0cyxfX3dfcGRmanNfcmVxdWlyZV9fKTtyZXR1cm4gaS5leHBvcnRzfV9fd19wZGZqc19yZXF1aXJlX18uZD0oZSx0KT0+e2Zvcih2YXIgYSBpbiB0KV9fd19wZGZqc19yZXF1aXJlX18ubyh0LGEpJiYhX193X3BkZmpzX3JlcXVpcmVfXy5vKGUsYSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGEse2VudW1lcmFibGU6ITAsZ2V0OnRbYV19KX07X193X3BkZmpzX3JlcXVpcmVfXy5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KTtfX3dfcGRmanNfcmVxdWlyZV9fLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBhPXt9OygoKT0+e3ZhciBlPWE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9X193X3BkZmpzX3JlcXVpcmVfXygxKX0pKCk7cmV0dXJuIGF9KSgpKSk7";function tl(l){return!!(typeof l=="object"&&l&&"gen"in l&&"num"in l)}async function Cl(l,t){return typeof t=="string"?l.getDestination(t):t}async function nl(l,t){return t&&tl(t[0])?t[0]:null}const Kl=l=>l.type==="XYZ"&&l.spec.length===3,ol=l=>l.type==="Fit"&&l.spec.length===0,Ql=l=>l.type==="FitH"&&l.spec.length===1,El=l=>l.type==="FitV"&&l.spec.length===1,gl=l=>l.type==="FitR"&&l.spec.length===4,Hl=l=>l.type==="FitB"&&l.spec.length===0,Pl=l=>l.type==="FitBH"&&l.spec.length===1,Bl=l=>l.type==="FitBV"&&l.spec.length===1;function vl(l,t){const c={type:l,spec:t};return Kl(c)||ol(c)||Ql(c)||El(c)||gl(c)||Hl(c)||Pl(c)||Bl(c)?c:(console.warn("no location type found for ",l,t),null)}const el=l=>l&&l.every(t=>!isNaN(t));function Al(l){pdfExports.GlobalWorkerOptions.workerSrc=l}function ql(l,t={onProgress:void 0,onPassword:void 0,onError:void 0,password:""}){var c;(c=pdfExports.GlobalWorkerOptions)!=null&&c.workerSrc||Al(Ol);const s=shallowRef(),d=shallowRef(0),Z=shallowRef({});function i(W){const G=pdfExports.getDocument(W);if(t.onProgress&&(G.onProgress=t.onProgress),t.onPassword)G.onPassword=t.onPassword;else if(t.password){const u=(X,z)=>{X(t.password??"")};G.onPassword=u}G.promise.then(async u=>{s.value=u.loadingTask,d.value=u.numPages;const X=await u.getMetadata(),z=await u.getAttachments(),R=await u.getJavaScript(),S=await u.getOutline();Z.value={metadata:X,attachments:z,javascript:R,outline:S}},u=>{typeof t.onError=="function"&&t.onError(u)})}async function o(W){var G;const u=await((G=s.value)==null?void 0:G.promise);if(!u)return null;const X=await Cl(u,W),z=await nl(u,X);if(!z||!X)return null;const R=await u.getPageIndex(z),S=X[1].name,k=X.slice(2),L=el(k)?vl(S,k):null;return{pageIndex:R,location:L??{type:"Fit",spec:[]}}}return isRef(l)?(l.value!==void 0&&i(l.value),watch(l,()=>{l.value!==void 0&&i(l.value)})):l!==void 0&&i(l),{pdf:s,pages:d,info:Z,getPDFDestination:o}}const _sfc_main$i={__name:"AllPages",setup(l){const{pdf:t,pages:c}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf");return(s,d)=>(openBlock(!0),createElementBlock(Fragment,null,renderList(unref(c),Z=>(openBlock(),createElementBlock("div",{key:Z,class:"container"},[createVNode(unref(ll),{pdf:unref(t),page:Z},null,8,["pdf","page"])]))),128))}},AllPages=_export_sfc(_sfc_main$i,[["__file","AllPages.vue"]]),_hoisted_1$h={class:"language-json","data-ext":"json"},_hoisted_2$a={class:"language-json"},_hoisted_3$7=createBaseVNode("br",null,null,-1),_hoisted_4$3={class:"container"},_sfc_main$h={__name:"AnnoAttachment",setup(l){const{pdf:t}=ql(withBase("/example_041.pdf")),c=ref({});function s(d){console.log(d),c.value=d}return(d,Z)=>(openBlock(),createElementBlock(Fragment,null,[createBaseVNode("div",_hoisted_1$h,[createBaseVNode("pre",_hoisted_2$a,[createBaseVNode("code",null,[createTextVNode('// "content" is a uint8Array'),_hoisted_3$7,createTextVNode(toDisplayString(c.value),1)])])]),createBaseVNode("div",_hoisted_4$3,[createVNode(unref(ll),{pdf:unref(t),"annotation-layer":"","image-resources-path":"https://unpkg.com/pdfjs-dist@latest/web/images/",onAnnotation:s},null,8,["pdf"])])],64))}},AnnoAttachment=_export_sfc(_sfc_main$h,[["__file","AnnoAttachment.vue"]]),_hoisted_1$g={class:"language-json","data-ext":"json"},_hoisted_2$9={class:"language-json"},_hoisted_3$6={class:"container"},_sfc_main$g={__name:"AnnoForms",setup(l){const{pdf:t}=ql(withBase("/example_014.pdf")),c=ref({});function s(d){console.log(d),c.value=d}return(d,Z)=>(openBlock(),createElementBlock(Fragment,null,[createBaseVNode("div",_hoisted_1$g,[createBaseVNode("pre",_hoisted_2$9,[createBaseVNode("code",null,toDisplayString(c.value),1)])]),createBaseVNode("div",_hoisted_3$6,[createVNode(unref(ll),{pdf:unref(t),"annotation-layer":"",onAnnotation:s},null,8,["pdf"])])],64))}},AnnoForms=_export_sfc(_sfc_main$g,[["__file","AnnoForms.vue"]]),_hoisted_1$f={class:"language-json","data-ext":"json"},_hoisted_2$8={class:"language-json"},_hoisted_3$5={class:"container"},_sfc_main$f={__name:"AnnoLinks",setup(l){const{pdf:t}=ql(withBase("/example_045.pdf")),c=ref({});function s(d){console.log(d),c.value=d}return(d,Z)=>(openBlock(),createElementBlock(Fragment,null,[createBaseVNode("div",_hoisted_1$f,[createBaseVNode("pre",_hoisted_2$8,[createBaseVNode("code",null,toDisplayString(c.value),1)])]),createBaseVNode("div",_hoisted_3$5,[createVNode(unref(ll),{pdf:unref(t),"annotation-layer":"",onAnnotation:s},null,8,["pdf"]),createVNode(unref(ll),{pdf:unref(t),page:6,"annotation-layer":"",onAnnotation:s},null,8,["pdf"])])],64))}},AnnoLinks=_export_sfc(_sfc_main$f,[["__file","AnnoLinks.vue"]]),_hoisted_1$e={class:"container"},_hoisted_2$7=["value"],_sfc_main$e={__name:"AnnotationFilter",setup(l){const{pdf:t}=ql(withBase("/example_014.pdf")),c=ref(["Widget","Widget.Tx","Widget.Btn","Widget.Ch"]),s=ref(["Widget"]),d=ref(null);function Z(){d.value.reload()}return(i,o)=>(openBlock(),createElementBlock("div",_hoisted_1$e,[createBaseVNode("div",null,[withDirectives(createBaseVNode("select",{"onUpdate:modelValue":o[0]||(o[0]=W=>s.value[0]=W),class:"select-example",onChange:Z},[(openBlock(!0),createElementBlock(Fragment,null,renderList(c.value,W=>(openBlock(),createElementBlock("option",{key:W,value:W},toDisplayString(W),9,_hoisted_2$7))),128))],544),[[vModelSelect,s.value[0]]])]),createVNode(unref(ll),{ref_key:"vuePDFRef",ref:d,pdf:unref(t),"annotation-layer":"","annotations-filter":s.value},null,8,["pdf","annotations-filter"])]))}},AnnotationFilter=_export_sfc(_sfc_main$e,[["__file","AnnotationFilter.vue"]]),_hoisted_1$d={class:"container"},_sfc_main$d={__name:"AnnotationLayer",setup(l){const t=ref(!1),{pdf:c}=ql(withBase("/example_014.pdf"));return(s,d)=>(openBlock(),createElementBlock("div",_hoisted_1$d,[createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:d[0]||(d[0]=Z=>t.value=!t.value)},[createTextVNode(" Change to "),createBaseVNode("strong",null,toDisplayString(!t.value),1)])]),createVNode(unref(ll),{pdf:unref(c),"annotation-layer":t.value},null,8,["pdf","annotation-layer"])]))}},AnnotationLayer=_export_sfc(_sfc_main$d,[["__file","AnnotationLayer.vue"]]),_hoisted_1$c={class:"container"},_sfc_main$c={__name:"FitParent",setup(l){const{pdf:t}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"),c=ref(null),s=ref(300);function d(Z){s.value=s.value+Z,c.value.reload()}return(Z,i)=>(openBlock(),createElementBlock("div",_hoisted_1$c,[createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:i[0]||(i[0]=o=>d(-50))}," Remove 50px "),createBaseVNode("span",null,"Parent width: "+toDisplayString(s.value)+"px",1),createBaseVNode("button",{class:"button-example",onClick:i[1]||(i[1]=o=>d(50))}," Add 50px ")]),createBaseVNode("div",{style:normalizeStyle(`width: ${s.value}px`)},[createVNode(unref(ll),{ref_key:"vuePDFRef",ref:c,pdf:unref(t),"fit-parent":""},null,8,["pdf"])],4)]))}},FitParent=_export_sfc(_sfc_main$c,[["__file","FitParent.vue"]]),_hoisted_1$b={class:"language-json","data-ext":"json"},_hoisted_2$6={class:"language-json"},_hoisted_3$4={class:"container"},_sfc_main$b={__name:"Loaded",setup(l){const{pdf:t}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"),c=ref({});function s(d){console.log(d),c.value=d}return(d,Z)=>(openBlock(),createElementBlock(Fragment,null,[createBaseVNode("div",_hoisted_1$b,[createBaseVNode("pre",_hoisted_2$6,[createBaseVNode("code",null,toDisplayString(c.value),1)])]),createBaseVNode("div",_hoisted_3$4,[createVNode(unref(ll),{pdf:unref(t),onLoaded:s},null,8,["pdf"])])],64))}},Loaded=_export_sfc(_sfc_main$b,[["__file","Loaded.vue"]]),_hoisted_1$a={class:"container"},_sfc_main$a={__name:"MultiplePDF",setup(l){const t=[withBase("/example_014.pdf"),withBase("/example_036.pdf"),withBase("/example_041.pdf"),withBase("/example_045.pdf"),"https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"],c=ref(0),s=ref(t[0]),{pdf:d}=ql(s);function Z(){c.value+=1,c.value>=t.length&&(c.value=0),s.value=t[c.value]}return(i,o)=>(openBlock(),createElementBlock("div",_hoisted_1$a,[createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:Z}," Next PDF (Current index: "+toDisplayString(c.value)+") ",1)]),createVNode(unref(ll),{pdf:unref(d)},null,8,["pdf"])]))}},MultiplePDF=_export_sfc(_sfc_main$a,[["__file","MultiplePDF.vue"]]),_hoisted_1$9={class:"container"},_hoisted_2$5={style:{width:"500px"}},_sfc_main$9={__name:"OnePage",setup(l){const t=ref(1),{pdf:c,pages:s}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf");return(d,Z)=>(openBlock(),createElementBlock("div",_hoisted_1$9,[createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:Z[0]||(Z[0]=i=>t.value=t.value>1?t.value-1:t.value)}," PREV "),createBaseVNode("span",null,toDisplayString(t.value)+"/"+toDisplayString(unref(s)),1),createBaseVNode("button",{class:"button-example",onClick:Z[1]||(Z[1]=i=>t.value=t.value(openBlock(),createElementBlock("div",_hoisted_1$8,[createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:d[0]||(d[0]=Z=>t.value=t.value-90)}," - 90° "),createBaseVNode("span",null,toDisplayString(t.value)+"°",1),createBaseVNode("button",{class:"button-example",onClick:d[1]||(d[1]=Z=>t.value=t.value+90)}," + 90° ")]),createVNode(unref(ll),{pdf:unref(c),rotation:t.value},null,8,["pdf","rotation"])]))}},Rotation=_export_sfc(_sfc_main$8,[["__file","Rotation.vue"]]),_hoisted_1$7={class:"container"},_sfc_main$7={__name:"Scale",setup(l){const t=ref(1),{pdf:c}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf");return(s,d)=>(openBlock(),createElementBlock("div",_hoisted_1$7,[createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:d[0]||(d[0]=Z=>t.value=t.value>.25?t.value-.25:t.value)}," - "),createBaseVNode("span",null,toDisplayString(t.value*100)+"%",1),createBaseVNode("button",{class:"button-example",onClick:d[1]||(d[1]=Z=>t.value=t.value<2?t.value+.25:t.value)}," + ")]),createVNode(unref(ll),{pdf:unref(c),scale:t.value},null,8,["pdf","scale"])]))}},Scale=_export_sfc(_sfc_main$7,[["__file","Scale.vue"]]),style="",_hoisted_1$6={class:"container"},_sfc_main$6={__name:"TextLayer",setup(l){const t=ref(!1),{pdf:c}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf");return(s,d)=>(openBlock(),createElementBlock("div",_hoisted_1$6,[createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:d[0]||(d[0]=Z=>t.value=!t.value)},[createTextVNode(" Change to "),createBaseVNode("strong",null,toDisplayString(!t.value),1)])]),createVNode(unref(ll),{pdf:unref(c),"text-layer":t.value},null,8,["pdf","text-layer"])]))}},TextLayer=_export_sfc(_sfc_main$6,[["__file","TextLayer.vue"]]),_hoisted_1$5={class:"container"},_sfc_main$5={__name:"XFALayer",setup(l){const{pdf:t}=ql({url:withBase("/example_xfa.pdf"),enableXfa:!0});return(c,s)=>(openBlock(),createElementBlock("div",_hoisted_1$5,[createVNode(unref(ll),{pdf:unref(t)},null,8,["pdf"])]))}},XFALayer=_export_sfc(_sfc_main$5,[["__file","XFALayer.vue"]]),_hoisted_1$4={class:"container"},_hoisted_2$4=createBaseVNode("td",{colspan:"2"}," Text ",-1),_hoisted_3$3={colspan:"2"},_hoisted_4$2=createBaseVNode("td",{colspan:"2"}," Color ",-1),_hoisted_5$2={colspan:"2"},_hoisted_6=createBaseVNode("td",null,"Columns",-1),_hoisted_7=createBaseVNode("td",null,"Rows",-1),_hoisted_8=createBaseVNode("td",null,"Rotation",-1),_hoisted_9=createBaseVNode("td",null,"FontSize",-1),_sfc_main$4={__name:"Watermark",setup(l){const{pdf:t}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"),c=ref(null),s=ref("sample"),d=ref({columns:4,rows:4,color:"rgba(211, 210, 211, 0.4)",rotation:45,fontSize:18});function Z(){c.value.reload()}return(i,o)=>(openBlock(),createElementBlock("div",_hoisted_1$4,[createBaseVNode("table",null,[createBaseVNode("tr",null,[_hoisted_2$4,createBaseVNode("td",_hoisted_3$3,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":o[0]||(o[0]=W=>s.value=W),class:"input-example"},null,512),[[vModelText,s.value]])])]),createBaseVNode("tr",null,[_hoisted_4$2,createBaseVNode("td",_hoisted_5$2,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":o[1]||(o[1]=W=>d.value.color=W),class:"input-example"},null,512),[[vModelText,d.value.color]])])]),createBaseVNode("tr",null,[_hoisted_6,createBaseVNode("td",null,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":o[2]||(o[2]=W=>d.value.columns=W),class:"input-example"},null,512),[[vModelText,d.value.columns]])]),_hoisted_7,createBaseVNode("td",null,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":o[3]||(o[3]=W=>d.value.rows=W),class:"input-example"},null,512),[[vModelText,d.value.rows]])])]),createBaseVNode("tr",null,[_hoisted_8,createBaseVNode("td",null,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":o[4]||(o[4]=W=>d.value.rotation=W),class:"input-example"},null,512),[[vModelText,d.value.rotation]])]),_hoisted_9,createBaseVNode("td",null,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":o[5]||(o[5]=W=>d.value.fontSize=W),class:"input-example"},null,512),[[vModelText,d.value.fontSize]])])])]),createBaseVNode("div",null,[createBaseVNode("button",{class:"button-example",onClick:Z}," Reload ")]),createVNode(unref(ll),{ref_key:"pdfRef",ref:c,pdf:unref(t),"watermark-text":s.value,"watermark-options":d.value},null,8,["pdf","watermark-text","watermark-options"])]))}},Watermark=_export_sfc(_sfc_main$4,[["__file","Watermark.vue"]]),_sfc_main$3={name:"ChaptersList",props:{items:Array},methods:{onChapterClick:function(l){this.$emit("chapterClick",l)}}},_hoisted_1$3=["onClick"],_hoisted_2$3={key:0};function _sfc_render(l,t,c,s,d,Z){const i=resolveComponent("ChaptersList",!0);return openBlock(),createElementBlock("ol",null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(c.items,o=>(openBlock(),createElementBlock("li",null,[createBaseVNode("a",{href:"#",onClick:withModifiers(W=>l.$emit("chapterClick",o.destination),["prevent"])},toDisplayString(o.title),9,_hoisted_1$3),o.items.length?(openBlock(),createElementBlock("div",_hoisted_2$3,[createVNode(i,{items:o.items,onChapterClick:Z.onChapterClick},null,8,["items","onChapterClick"])])):createCommentVNode("v-if",!0)]))),256))])}const ChaptersList=_export_sfc(_sfc_main$3,[["render",_sfc_render],["__file","ChaptersList.vue"]]),TOC_vue_vue_type_style_index_0_lang="",_hoisted_1$2={id:"toc_wrapper"},_hoisted_2$2={class:"toc"},_hoisted_3$2={class:"language-json","data-ext":"json"},_hoisted_4$1={class:"language-json"},_hoisted_5$1={class:"container"},_sfc_main$2={__name:"TOC",setup(l){const{pdf:t,info:c,getPDFDestination:s}=ql(withBase("/example_045.pdf")),d=ref({}),Z=ref([]);watchEffect(()=>{c.value.outline!==void 0&&(Z.value=c.value.outline.map(function o(W){return{title:W.title,destination:s(W.dest),items:W.items.map(G=>o(G))}}))}),triggerRef(c);function i(o){o.then(W=>{console.log(W),d.value=W})}return(o,W)=>(openBlock(),createElementBlock("div",_hoisted_1$2,[createBaseVNode("div",_hoisted_2$2,[createVNode(ChaptersList,{items:Z.value,onChapterClick:i},null,8,["items"])]),createBaseVNode("div",null,[createBaseVNode("div",_hoisted_3$2,[createBaseVNode("pre",_hoisted_4$1,[createBaseVNode("code",null,toDisplayString(d.value),1)])]),createBaseVNode("div",_hoisted_5$1,[createVNode(unref(ll),{pdf:unref(t),scale:.75},null,8,["pdf"])])])]))}},TOC=_export_sfc(_sfc_main$2,[["__file","TOC.vue"]]),_hoisted_1$1={class:"container"},_hoisted_2$1=createBaseVNode("td",{colspan:"2"}," Text ",-1),_hoisted_3$1={colspan:"2"},_hoisted_4=createBaseVNode("td",null,"Complete words",-1),_hoisted_5=createBaseVNode("td",null,"Ignore case",-1),_sfc_main$1={__name:"HighlightText",setup(l){const{pdf:t}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"),c=ref("javascript"),s=ref({completeWords:!1,ignoreCase:!0});return(d,Z)=>(openBlock(),createElementBlock("div",_hoisted_1$1,[createBaseVNode("table",null,[createBaseVNode("tr",null,[_hoisted_2$1,createBaseVNode("td",_hoisted_3$1,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":Z[0]||(Z[0]=i=>c.value=i),class:"input-example"},null,512),[[vModelText,c.value]])])]),createBaseVNode("tr",null,[_hoisted_4,createBaseVNode("td",null,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":Z[1]||(Z[1]=i=>s.value.completeWords=i),type:"checkbox",class:"checkbox-example"},null,512),[[vModelCheckbox,s.value.completeWords]])]),_hoisted_5,createBaseVNode("td",null,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":Z[2]||(Z[2]=i=>s.value.ignoreCase=i),type:"checkbox",class:"checkbox-example"},null,512),[[vModelCheckbox,s.value.ignoreCase]])])])]),createVNode(unref(ll),{scale:1.1,pdf:unref(t),"text-layer":"","highlight-text":c.value,"highlight-options":s.value},null,8,["pdf","highlight-text","highlight-options"])]))}},HighlightText=_export_sfc(_sfc_main$1,[["__file","HighlightText.vue"]]),_hoisted_1={class:"container"},_hoisted_2=createBaseVNode("td",{colspan:"2"}," Text ",-1),_hoisted_3={colspan:"2"},_sfc_main={__name:"TextHighlight",setup(l){const{pdf:t}=ql("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"),c=ref("Trace-based"),s=ref({completeWords:!1,ignoreCase:!0}),d=ref({});function Z(i){console.log(i),d.value=i}return(i,o)=>(openBlock(),createElementBlock("div",_hoisted_1,[createBaseVNode("table",null,[createBaseVNode("tr",null,[_hoisted_2,createBaseVNode("td",_hoisted_3,[withDirectives(createBaseVNode("input",{"onUpdate:modelValue":o[0]||(o[0]=W=>c.value=W),class:"input-example"},null,512),[[vModelText,c.value]])])])]),createVNode(unref(ll),{scale:1.1,pdf:unref(t),"text-layer":"","highlight-text":c.value,"highlight-options":s.value,onHighlight:Z},null,8,["pdf","highlight-text","highlight-options"])]))}},TextHighlight=_export_sfc(_sfc_main,[["__file","TextHighlight.vue"]]),clientConfig8=defineClientConfig({enhance({app:l}){l.component("OnePage",OnePage),l.component("Watermark",Watermark),l.component("AllPages",AllPages),l.component("Scale",Scale),l.component("Rotation",Rotation),l.component("TextLayer",TextLayer),l.component("AnnotationLayer",AnnotationLayer),l.component("XFALayer",XFALayer),l.component("FitParent",FitParent),l.component("AnnotationFilter",AnnotationFilter),l.component("MultiplePDF",MultiplePDF),l.component("AnnoAttachment",AnnoAttachment),l.component("AnnoForms",AnnoForms),l.component("AnnoLinks",AnnoLinks),l.component("Loaded",Loaded),l.component("TOC",TOC),l.component("HighlightText",HighlightText),l.component("TextHighlight",TextHighlight)}}),clientConfigs=[clientConfig0,clientConfig1,clientConfig2,clientConfig3,clientConfig4,clientConfig5,clientConfig6,clientConfig7,clientConfig8],pagesRoutes=[["v-8daa1a0e","/",{title:"Home"},["/index.html","/README.md"]],["v-0aca7ba6","/examples/",{title:"Examples List"},["/examples/index.html","/examples/README.md"]],["v-7b0cac7f","/guide/composables.html",{title:"Composables"},["/guide/composables","/guide/composables.md"]],["v-10633a18","/guide/events.html",{title:"Events"},["/guide/events","/guide/events.md"]],["v-1c7b2593","/guide/introduction.html",{title:"Introduction"},["/guide/introduction","/guide/introduction.md"]],["v-f69aa95a","/guide/methods.html",{title:"Methods"},["/guide/methods","/guide/methods.md"]],["v-0c5edf55","/guide/props.html",{title:"Props"},["/guide/props","/guide/props.md"]],["v-433985b0","/guide/slots.html",{title:"Slots"},["/guide/slots","/guide/slots.md"]],["v-65618cd9","/examples/annotation_events/annotation_attachment.html",{title:"File attachment"},["/examples/annotation_events/annotation_attachment","/examples/annotation_events/annotation_attachment.md"]],["v-7393d4e7","/examples/annotation_events/annotation_forms.html",{title:"Forms fields"},["/examples/annotation_events/annotation_forms","/examples/annotation_events/annotation_forms.md"]],["v-ab3e90c6","/examples/annotation_events/annotation_links.html",{title:"Links"},["/examples/annotation_events/annotation_links","/examples/annotation_events/annotation_links.md"]],["v-d74a6fde","/examples/advanced/annotation_filter.html",{title:"Annotations Filter"},["/examples/advanced/annotation_filter","/examples/advanced/annotation_filter.md"]],["v-f2c952fe","/examples/advanced/fit_parent.html",{title:"Fit parent"},["/examples/advanced/fit_parent","/examples/advanced/fit_parent.md"]],["v-169eb141","/examples/advanced/highlight_text.html",{title:"Highlight Text"},["/examples/advanced/highlight_text","/examples/advanced/highlight_text.md"]],["v-0f2bcfb6","/examples/advanced/multiple_pdf.html",{title:"Multiples PDF"},["/examples/advanced/multiple_pdf","/examples/advanced/multiple_pdf.md"]],["v-c7ab6d5e","/examples/advanced/toc.html",{title:"Table of content"},["/examples/advanced/toc","/examples/advanced/toc.md"]],["v-67ec23b5","/examples/advanced/watermark.html",{title:"Watermark Text"},["/examples/advanced/watermark","/examples/advanced/watermark.md"]],["v-94f282be","/examples/basic/all_pages.html",{title:"All pages"},["/examples/basic/all_pages","/examples/basic/all_pages.md"]],["v-1612306c","/examples/basic/annotation_layer.html",{title:"Annotation Layer"},["/examples/basic/annotation_layer","/examples/basic/annotation_layer.md"]],["v-d24dc4ba","/examples/basic/one_page.html",{title:"One page"},["/examples/basic/one_page","/examples/basic/one_page.md"]],["v-52b5ccad","/examples/basic/rotation.html",{title:"Rotation"},["/examples/basic/rotation","/examples/basic/rotation.md"]],["v-42931b06","/examples/basic/scale.html",{title:"Scale"},["/examples/basic/scale","/examples/basic/scale.md"]],["v-1570d88c","/examples/basic/text_layer.html",{title:"Text Layer"},["/examples/basic/text_layer","/examples/basic/text_layer.md"]],["v-e08bb73c","/examples/basic/xfa_layer.html",{title:"XFA Forms"},["/examples/basic/xfa_layer","/examples/basic/xfa_layer.md"]],["v-f45dcaf4","/examples/text_events/text_highlight.html",{title:"Highlight Event"},["/examples/text_events/text_highlight","/examples/text_events/text_highlight.md"]],["v-0ac90ceb","/examples/loaded_events/loaded.html",{title:"Loaded Event"},["/examples/loaded_events/loaded","/examples/loaded_events/loaded.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var Vuepress=defineComponent({name:"Vuepress",setup(){const l=usePageLayout();return()=>h(l.value)}}),createRoutes=()=>pagesRoutes.reduce((l,[t,c,s,d])=>(l.push({name:t,path:c,component:Vuepress,meta:s},...d.map(Z=>({path:Z,redirect:c}))),l),[{name:"404",path:"/:catchAll(.*)",component:Vuepress}]),historyCreator=createWebHistory,createVueRouter=()=>{const l=createRouter({history:historyCreator(removeEndingSlash("/VuePDF/")),routes:createRoutes(),scrollBehavior:(t,c,s)=>s||(t.hash?{el:t.hash}:{top:0})});return l.beforeResolve(async(t,c)=>{var s;(t.path!==c.path||c===START_LOCATION_NORMALIZED)&&([pageData.value]=await Promise.all([resolvers.resolvePageData(t.name),(s=pagesComponents[t.name])==null?void 0:s.__asyncLoader()]))}),l},setupGlobalComponents=l=>{l.component("ClientOnly",ClientOnly),l.component("Content",Content)},setupGlobalComputed=(l,t,c)=>{const s=ref(t.currentRoute.value.path);watch(()=>t.currentRoute.value.path,z=>s.value=z);const d=computed(()=>resolvers.resolveLayouts(c)),Z=computed(()=>resolvers.resolveRouteLocale(siteData.value.locales,s.value)),i=computed(()=>resolvers.resolveSiteLocaleData(siteData.value,Z.value)),o=computed(()=>resolvers.resolvePageFrontmatter(pageData.value)),W=computed(()=>resolvers.resolvePageHeadTitle(pageData.value,i.value)),G=computed(()=>resolvers.resolvePageHead(W.value,o.value,i.value)),u=computed(()=>resolvers.resolvePageLang(pageData.value)),X=computed(()=>resolvers.resolvePageLayout(pageData.value,d.value));return l.provide(layoutsSymbol,d),l.provide(pageFrontmatterSymbol,o),l.provide(pageHeadTitleSymbol,W),l.provide(pageHeadSymbol,G),l.provide(pageLangSymbol,u),l.provide(pageLayoutSymbol,X),l.provide(routeLocaleSymbol,Z),l.provide(siteLocaleDataSymbol,i),Object.defineProperties(l.config.globalProperties,{$frontmatter:{get:()=>o.value},$head:{get:()=>G.value},$headTitle:{get:()=>W.value},$lang:{get:()=>u.value},$page:{get:()=>pageData.value},$routeLocale:{get:()=>Z.value},$site:{get:()=>siteData.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>withBase}}),{layouts:d,pageData,pageFrontmatter:o,pageHead:G,pageHeadTitle:W,pageLang:u,pageLayout:X,routeLocale:Z,siteData,siteLocaleData:i}},setupUpdateHead=()=>{const l=usePageHead(),t=usePageLang(),c=ref([]),s=()=>{l.value.forEach(Z=>{const i=queryHeadTag(Z);i&&c.value.push(i)})},d=()=>{document.documentElement.lang=t.value,c.value.forEach(Z=>{Z.parentNode===document.head&&document.head.removeChild(Z)}),c.value.splice(0,c.value.length),l.value.forEach(Z=>{const i=createHeadTag(Z);i!==null&&(document.head.appendChild(i),c.value.push(i))})};provide(updateHeadSymbol,d),onMounted(()=>{s(),d(),watch(()=>l.value,()=>d())})},queryHeadTag=([l,t,c=""])=>{const s=Object.entries(t).map(([o,W])=>isString(W)?`[${o}=${JSON.stringify(W)}]`:W===!0?`[${o}]`:"").join(""),d=`head > ${l}${s}`;return Array.from(document.querySelectorAll(d)).find(o=>o.innerText===c)||null},createHeadTag=([l,t,c])=>{if(!isString(l))return null;const s=document.createElement(l);return isPlainObject(t)&&Object.entries(t).forEach(([d,Z])=>{isString(Z)?s.setAttribute(d,Z):Z===!0&&s.setAttribute(d,"")}),isString(c)&&s.appendChild(document.createTextNode(c)),s},appCreator=createSSRApp,createVueApp=async()=>{var c;const l=appCreator({name:"VuepressApp",setup(){var s;setupUpdateHead();for(const d of clientConfigs)(s=d.setup)==null||s.call(d);return()=>[h(RouterView),...clientConfigs.flatMap(({rootComponents:d=[]})=>d.map(Z=>h(Z)))]}}),t=createVueRouter();setupGlobalComponents(l),setupGlobalComputed(l,t,clientConfigs);for(const s of clientConfigs)await((c=s.enhance)==null?void 0:c.call(s,{app:l,router:t,siteData}));return l.use(t),{app:l,router:t}};createVueApp().then(({app:l,router:t})=>{t.isReady().then(()=>{l.mount("#app")})});export{_export_sfc as _,createVNode as a,createBaseVNode as b,createElementBlock as c,createVueApp,createTextVNode as d,createStaticVNode as e,createCommentVNode as f,openBlock as o,resolveComponent as r,withCtx as w}; diff --git a/assets/composables.html-c510aae4.js b/assets/composables.html-c510aae4.js new file mode 100644 index 0000000..501038e --- /dev/null +++ b/assets/composables.html-c510aae4.js @@ -0,0 +1,66 @@ +import{_ as c,r as o,o as i,c as l,b as n,d as s,a,w as u,e}from"./app-6fe4962f.js";const r={},d=e(`

Composables

usePDF

This package provides a default composable named usePDF that loads and prepare the PDF Document for it usage with VuePDF component, also let you get some basic information and properties about the document.

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf, pages, info } = usePDF('sample.pdf')
+</script>
+
+<template>
+  <VuePDF :pdf="pdf" />
+</template>
+

Parameters

src

Type: string | URL | TypedArray | DocumentInitParameters
Required: True

`,7),k=n("code",null,"src",-1),m={href:"https://github.com/mozilla/pdf.js/blob/38287d943532eee939ceffbe6861163f93805ca7/src/display/api.js#L145",target:"_blank",rel:"noopener noreferrer"},v=e(`
const { pdf, pages, info } = usePDF('sample.pdf')
+

options

Type: object

An object with the following properties:

  • onPassword: Callback function to request the document password if no password (or wrong password) was provided.
  • onProgress: Callback function to enable progress monitor.
  • onError: function to handle pdf loading errors
function onPassword(updatePassword, reason) {
+  console.log(\`Reason for callback: \${reason}\`)
+  updatePassword('password1234')
+}
+
+function onProgress({ loaded, total }) {
+  console.log(\`\${loaded / total * 100}% Loaded\`)
+}
+
+function onError(reason) {
+  console.error(\`PDF loading error: \${reason}\`)
+}
+
+const { pdf, pages, info } = usePDF('sample.pdf', {
+  onPassword,
+  onProgress,
+  onError
+})
+

Properties

`,7),h=n("a",{href:"#usepdf-composable"},[n("code",null,"usePDF")],-1),b={href:"https://vuejs.org/api/reactivity-advanced.html#shallowref",target:"_blank",rel:"noopener noreferrer"},g=n("code",null,"shallowRef",-1),f=n("h4",{id:"pdf",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pdf","aria-hidden":"true"},"#"),s(" pdf")],-1),_=n("p",null,[s("Type: "),n("code",null,"PDFDocumentLoadingTask")],-1),D={href:"https://mozilla.github.io/pdf.js/api/draft/module-pdfjsLib-PDFDocumentLoadingTask.html",target:"_blank",rel:"noopener noreferrer"},P=e(`

pages

Type: int

Document number pages.

info

Type: object

Document information object.

{
+  "metadata": {...}, // Metadata object
+  "attachments": {...}, // File attachments object
+  "javascript": [...], // Array of embedded scripts
+}
+

Document API

`,8),y={href:"https://mozilla.github.io/pdf.js/api/draft/module-pdfjsLib-PDFDocumentProxy.html",target:"_blank",rel:"noopener noreferrer"},w=n("a",{href:"#pdf"},"pdf's",-1),j=n("code",null,"annotationStorage",-1),F=n("code",null,"saveDocument",-1),x=n("code",null,"cleanup",-1),T=e(`
const { pdf } = usePDF('document.pdf')
+
+function doSomething() {
+  pdf.value.promise.then((doc) => {
+    // doc.annotationsStorage
+    // doc.saveDocument()
+    // doc.cleanup()
+    // doc.getData()
+    // ...
+  })
+}
+

Custom

`,2),q=n("code",null,"usePDF",-1),L=n("code",null,"pdf",-1),V=n("code",null,"shallowRef | ref",-1),A={href:"https://mozilla.github.io/pdf.js/api/draft/module-pdfjsLib-PDFDocumentLoadingTask.html",target:"_blank",rel:"noopener noreferrer"},R=e(`
<script setup>
+import { onMounted, ref } from 'vue'
+import * as PDFJS from 'pdfjs-dist'
+
+const pdf = ref()
+
+function loadPDF() {
+  const loadingTask = PDFJS.getDocument('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+  pdf.value = loadingTask
+}
+
+onMounted(() => {
+  loadPDF()
+})
+</script>
+
+<template>
+  <div>
+    <VuePDF :pdf="pdf" />
+  </div>
+</template>
+
`,1);function C(E,I){const t=o("ExternalLinkIcon"),p=o("RouterLink");return i(),l("div",null,[d,n("p",null,[s("This parameter is the same "),k,s(" of "),n("a",m,[s("pdf.js"),a(t)])]),v,n("blockquote",null,[n("p",null,[s("All values returned by "),h,s(" are "),n("a",b,[g,a(t)]),s(" objects.")])]),f,_,n("p",null,[s("Document loading task, see "),n("a",D,[s("PDFDocumentLoadingTask"),a(t)]),s(" for more details.")]),P,n("p",null,[s("You can access to "),n("a",y,[s("PDFDocumentProxy"),a(t)]),s(" through "),w,s(" promise property and use its API methods to get more document's info like "),j,s(" or use functions like "),F,s(", "),x,s(", etc.")]),T,n("p",null,[s("Using "),q,s(" it's not required, you can use the pdf.js API in the component or build your own composable by yourself. Just need to ensure send on "),a(p,{to:"/guide/props.html#pdf"},{default:u(()=>[L]),_:1}),s(" prop a "),V,s(),n("a",A,[s("PDFDocumentLoadingTask"),a(t)]),s(" object.")]),R])}const z=c(r,[["render",C],["__file","composables.html.vue"]]);export{z as default}; diff --git a/assets/events.html-231531a4.js b/assets/events.html-231531a4.js new file mode 100644 index 0000000..ebf4c39 --- /dev/null +++ b/assets/events.html-231531a4.js @@ -0,0 +1 @@ +const l=JSON.parse('{"key":"v-10633a18","path":"/guide/events.html","title":"Events","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"loaded","slug":"loaded","link":"#loaded","children":[]},{"level":2,"title":"highlight","slug":"highlight","link":"#highlight","children":[]},{"level":2,"title":"annotation","slug":"annotation","link":"#annotation","children":[{"level":3,"title":"internal-link","slug":"internal-link","link":"#internal-link","children":[]},{"level":3,"title":"link","slug":"link","link":"#link","children":[]},{"level":3,"title":"file-attachment","slug":"file-attachment","link":"#file-attachment","children":[]},{"level":3,"title":"form-text","slug":"form-text","link":"#form-text","children":[]},{"level":3,"title":"form-select","slug":"form-select","link":"#form-select","children":[]},{"level":3,"title":"form-checkbox","slug":"form-checkbox","link":"#form-checkbox","children":[]},{"level":3,"title":"form-radio","slug":"form-radio","link":"#form-radio","children":[]},{"level":3,"title":"form-button","slug":"form-button","link":"#form-button","children":[]}]}],"git":{"updatedTime":1688947342000,"contributors":[{"name":"TaTo30","email":"aldo.hernandez3012@gmail.com","commits":3}]},"filePathRelative":"guide/events.md"}');export{l as data}; diff --git a/assets/events.html-89f93546.js b/assets/events.html-89f93546.js new file mode 100644 index 0000000..c64ff1a --- /dev/null +++ b/assets/events.html-89f93546.js @@ -0,0 +1,97 @@ +import{_ as p,r as l,o as i,c,b as s,d as n,a as t,w as e,e as o}from"./app-6fe4962f.js";const u={},r=o(`

Events

loaded

<VuePDF :pdf="pdf" @loaded="onLoaded" />
+

Emitted when page has finished rendering task in view, the value contains page information.

Value example:

{
+  "viewBox": [0, 0, 595.276, 841.89],
+  "scale": 1,
+  "rotation": 90,
+  "offsetX": 0,
+  "offsetY": 0,
+  "transform": [0, 1, 1, 0, 0, 0],
+  "width": 841.89,
+  "height": 595.276
+}
+

highlight

<VuePDF :pdf="pdf" @highlight="onHighlight" />
+
`,8),d=s("code",null,"textDivs",-1),k=s("code",null,"textContent",-1),v=o(`

annotation

<VuePDF :pdf="pdf" @annotation="onAnnotation" />
+

Emitted when user has interaction with any annotation.

Annotation event data depends on what type of annotation has triggered the event, in general, the events value follows this structure:

PropertyValue
typePossible values: internal-link, link, file-attachment, form-text, form-select, form-checkbox, form-radio, form-button
dataAnnotation associated data

internal-link emitted when user clicks a link that redirects to another content within the document.

{
+  "type": "internal-link",
+  "data": {
+    "referencedPage": 3,
+    "offset": {
+      "left": 82,
+      "bottom": 716
+    }
+  }
+}
+

link emitted when user clicks an external content link.

{
+  "type": "link",
+  "data": {
+    "url": "mailto:aor@testmail.com",
+    "unsafeUrl": "mailto:aor@testmail.com"
+  }
+}
+

file-attachment

file-attachment emitted when user double-click an attachment annotation.

{
+  "type": "file-attachment",
+  "data": {
+    "filename": "utf8test.txt",
+    "content": [83, 101, 110] // Uint8Array
+  }
+}
+

form-text

form-text emitted when user inputs a value in an text-field element.

{
+  "type": "form-text",
+  "data": {
+    "fieldName": "firstname",
+    "value": "Aldo Hernandez"
+  }
+}
+

form-select

form-select emitted when user inputs a value in an one-select or multi-select element.

{
+  "type": "form-select",
+  "data": {
+    "fieldName": "gender",
+    "value": [
+      {
+        "value": "M",
+        "label": "Male"
+      }
+    ],
+    "options": [
+      {
+        "value": "",
+        "label": "-"
+      },
+      {
+        "value": "M",
+        "label": "Male"
+      },
+      {
+        "value": "F",
+        "label": "Female"
+      }
+    ]
+  }
+}
+

form-checkbox

form-checkbox emitted when user changes a checkbox field element.

{
+  "type": "form-checkbox",
+  "data": {
+    "fieldName": "newsletter",
+    "checked": true
+  }
+}
+

form-radio

form-radio emitted when user changes a radio field.

{
+  "type": "form-radio",
+  "data": {
+    "fieldName": "drink",
+    "value": "Wine",
+    "defaultValue": "Beer",
+    "options": ["Water", "Beer", "Wine", "Milk"]
+  }
+}
+

form-button

form-button emitted when user click on push button element.

{
+  "type": "form-button",
+  "data": {
+    "fieldName": "Print",
+    "actions": {
+      "Mouse Down": ["Print()"]
+    },
+    "reset": false
+  }
+}
+
`,29);function m(q,h){const a=l("RouterLink");return i(),c("div",null,[r,s("p",null,[n("Emitted when a text has been searched in page using "),t(a,{to:"/guide/props.html#highlight-text"},{default:e(()=>[n("highlight-text")]),_:1}),n(" and "),t(a,{to:"/guide/props.html#highlight-options"},{default:e(()=>[n("highlight-options")]),_:1}),n(", this event return a list of matches and the page where the text was found with its "),d,n(" and "),k,n(".")]),s("p",null,[n("Check the example: "),t(a,{to:"/examples/text_events/text_highlight.html"},{default:e(()=>[n("Highlight Event")]),_:1})]),v])}const g=p(u,[["render",m],["__file","events.html.vue"]]);export{g as default}; diff --git a/assets/fit_parent.html-8b8c8689.js b/assets/fit_parent.html-8b8c8689.js new file mode 100644 index 0000000..9758257 --- /dev/null +++ b/assets/fit_parent.html-8b8c8689.js @@ -0,0 +1,32 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Fit parent

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+
+const vuePDFRef = ref(null)
+const parentWidth = ref(300)
+
+function fitParentWidth(pxs) {
+  parentWidth.value = parentWidth.value + pxs
+  vuePDFRef.value.reload()
+}
+</script>
+
+<template>
+  <div>
+    <div>
+      <button @click="fitParentWidth(-50)">
+        Remove 50px
+      </button>
+      <span>Parent width: {{ parentWidth }}px</span>
+      <button @click="fitParentWidth(50)">
+        Add 50px
+      </button>
+    </div>
+    <div :style="\`width: \${parentWidth}px\`">
+      <VuePDF ref="vuePDFRef" :pdf="pdf" fit-parent />
+    </div>
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("FitParent"),t=n("ClientOnly");return e(),o("div",null,[i,s(t,null,{default:c(()=>[s(a)]),_:1})])}const m=p(u,[["render",k],["__file","fit_parent.html.vue"]]);export{m as default}; diff --git a/assets/highlight_text.html-0778f069.js b/assets/highlight_text.html-0778f069.js new file mode 100644 index 0000000..829b3fc --- /dev/null +++ b/assets/highlight_text.html-0778f069.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-169eb141","path":"/examples/advanced/highlight_text.html","title":"Highlight Text","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":null,"contributors":[]},"filePathRelative":"examples/advanced/highlight_text.md"}');export{t as data}; diff --git a/assets/highlight_text.html-c49d46c1.js b/assets/highlight_text.html-c49d46c1.js new file mode 100644 index 0000000..a34fff8 --- /dev/null +++ b/assets/highlight_text.html-c49d46c1.js @@ -0,0 +1,25 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const i={},u=l(`

Highlight Text

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf';
+import '@tato30/vue-pdf/style.css';
+import { ref } from 'vue';
+
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+
+const highlightText = ref('javascript')
+const highlightOptions = ref({
+  completeWords: false,
+  ignoreCase: true,
+})
+</script>
+
+<template>
+  <div>
+    <div>
+      <input v-model="highlightText">
+      <input v-model="highlightOptions.completeWords" type="checkbox">
+      <input v-model="highlightOptions.ignoreCase" type="checkbox">
+    </div>
+    <VuePDF :pdf="pdf" text-layer :highlight-text="highlightText" :highlight-options="highlightOptions" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("HighlightText"),t=n("ClientOnly");return e(),o("div",null,[u,s(t,null,{default:c(()=>[s(a)]),_:1})])}const v=p(i,[["render",k],["__file","highlight_text.html.vue"]]);export{v as default}; diff --git a/assets/index.html-68bc146c.js b/assets/index.html-68bc146c.js new file mode 100644 index 0000000..a0e0a2b --- /dev/null +++ b/assets/index.html-68bc146c.js @@ -0,0 +1 @@ +import{_ as t,o as s,c as a,b as e,d as c}from"./app-6fe4962f.js";const n={},o=e("h1",{id:"examples-list",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#examples-list","aria-hidden":"true"},"#"),c(" Examples List")],-1),r=[o];function d(i,_){return s(),a("div",null,r)}const h=t(n,[["render",d],["__file","index.html.vue"]]);export{h as default}; diff --git a/assets/index.html-8aafe416.js b/assets/index.html-8aafe416.js new file mode 100644 index 0000000..bc0b2bf --- /dev/null +++ b/assets/index.html-8aafe416.js @@ -0,0 +1 @@ +import{_ as c,r as e,o as l,c as _,a as n,w as a}from"./app-6fe4962f.js";const s={};function r(i,m){const t=e("OnePage"),o=e("ClientOnly");return l(),_("div",null,[n(o,null,{default:a(()=>[n(t)]),_:1})])}const f=c(s,[["render",r],["__file","index.html.vue"]]);export{f as default}; diff --git a/assets/introduction.html-26ff885b.js b/assets/introduction.html-26ff885b.js new file mode 100644 index 0000000..aa7f265 --- /dev/null +++ b/assets/introduction.html-26ff885b.js @@ -0,0 +1,46 @@ +import{_ as i,r as l,o as c,c as u,b as n,a as s,w as t,d as a,e as o}from"./app-6fe4962f.js";const r={},d=o(`

Introduction

VuePDF is a Vue 3 client-side component for pdf.js that allows you to flexibly display PDF pages within your project.

Installation

npm i @tato30/vue-pdf
+
yarn add @tato30/vue-pdf
+

Basic Usage

The most basic usage is so simple as import the VuePDF component and usePDF composable and display on <template> 😃

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf } = usePDF('sample.pdf')
+</script>
+
+<template>
+  <VuePDF :pdf="pdf" />
+</template>
+

Working With Layers

Text and Annotations

This component supports text-selection and annotation-interaction by enabling them with text-layer and annotation-layer props respectively, but for this layers renders correctly is necessary setting css styles, it can be done by importing default styles from @tato30/vue-pdf/style.css.

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import '@tato30/vue-pdf/style.css'
+
+const { pdf } = usePDF('sample.pdf')
+</script>
+
+<template>
+  <VuePDF :pdf="pdf" text-layer annotation-layer />
+</template>
+

Check the examples:

`,13),k=n("p",null,"You can also create your own custom styles and set them in your project, use this examples as guide:",-1),m={href:"https://github.com/mozilla/pdf.js/blob/master/web/text_layer_builder.css",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/mozilla/pdf.js/blob/master/web/annotation_layer_builder.css",target:"_blank",rel:"noopener noreferrer"},g=o(`

XFA Forms

XFA forms also can be supported by enabling them from usePDF.

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import '@tato30/vue-pdf/style.css'
+
+const { pdf } = usePDF({
+  url: '/example_xfa.pdf',
+  enableXfa: true,
+})
+</script>
+
+<template>
+  <VuePDF :pdf="pdf" />
+</template>
+

Check the example:

`,4),b=o(`

Server-Side Rendering

VuePDF is a client-side library, so if you are working with SSR frameworks like nuxt, surely will throw error during building stage, if that the case, you could wrap library in some "client only" directive or component, also usePDF should be wrapped.

Contributing

Any idea, suggestion or contribution to the code or documentation are very welcome.

# Clone the repository
+git clone https://github.com/TaTo30/VuePDF.git
+
+# Change to code folder
+cd VuePDF
+
+# Install node_modules
+npm install
+
+# Run code with hot reload
+npm run dev
+
`,5);function h(f,y){const e=l("RouterLink"),p=l("ExternalLinkIcon");return c(),u("div",null,[d,n("ul",null,[n("li",null,[s(e,{to:"/examples/basic/text_layer.html"},{default:t(()=>[a("Text Layer")]),_:1})]),n("li",null,[s(e,{to:"/examples/basic/annotation_layer.md.html"},{default:t(()=>[a("Annotation Layer")]),_:1})])]),k,n("ul",null,[n("li",null,[n("a",m,[a("text-layer styles"),s(p)])]),n("li",null,[n("a",v,[a("annotation-layer styles"),s(p)])])]),g,n("ul",null,[n("li",null,[s(e,{to:"/examples/basic/xfa_layer.html"},{default:t(()=>[a("XFA Forms")]),_:1})])]),b])}const _=i(r,[["render",h],["__file","introduction.html.vue"]]);export{_ as default}; diff --git a/assets/loaded.html-8a1cb111.js b/assets/loaded.html-8a1cb111.js new file mode 100644 index 0000000..4d9ba6f --- /dev/null +++ b/assets/loaded.html-8a1cb111.js @@ -0,0 +1,16 @@ +import{_ as e,r as n,o as p,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Loaded Event

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const { pdf } = usePDF('/example_014.pdf')
+function onLoaded(value) {
+  console.log(value)
+}
+</script>
+
+<template>
+  <div>
+    <VuePDF :pdf="pdf" @loaded="onLoaded" />
+  </div>
+</template>
+
`,2);function d(k,r){const a=n("Loaded"),t=n("ClientOnly");return p(),o("div",null,[i,s(t,null,{default:c(()=>[s(a)]),_:1})])}const m=e(u,[["render",d],["__file","loaded.html.vue"]]);export{m as default}; diff --git a/assets/methods.html-29c635bd.js b/assets/methods.html-29c635bd.js new file mode 100644 index 0000000..03a0d5b --- /dev/null +++ b/assets/methods.html-29c635bd.js @@ -0,0 +1,25 @@ +import{_ as t,r as e,o as p,c,b as n,d as s,a as o,w as l,e as u}from"./app-6fe4962f.js";const i={},r=n("h1",{id:"methods",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#methods","aria-hidden":"true"},"#"),s(" Methods")],-1),k=n("h2",{id:"reload",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#reload","aria-hidden":"true"},"#"),s(" reload")],-1),d=n("code",null,"fit-parent",-1),v=u(`
<script setup>
+import { ref } from 'vue'
+
+const VPDF = ref({})
+function someEvent() {
+  VPDF.value.reload()
+}
+</script>
+
+<template>
+  <VuePDF ref="VPDF" :pdf="pdf" />
+</template>
+

cancel

Cancel the render task if page is currently rendering.

<script setup>
+import { ref } from 'vue'
+
+const VPDF = ref({})
+function someEvent() {
+  VPDF.value.cancel()
+}
+</script>
+
+<template>
+  <VuePDF ref="VPDF" :pdf="pdf" />
+</template>
+
`,4);function m(g,f){const a=e("RouterLink");return p(),c("div",null,[r,k,n("p",null,[s("Allows to reload page render task, useful to update parent width when "),o(a,{to:"/guide/props.html#fit-parent"},{default:l(()=>[d]),_:1}),s(" prop is used")]),v])}const b=t(i,[["render",m],["__file","methods.html.vue"]]);export{b as default}; diff --git a/assets/multiple_pdf.html-59f29d33.js b/assets/multiple_pdf.html-59f29d33.js new file mode 100644 index 0000000..ceca3ca --- /dev/null +++ b/assets/multiple_pdf.html-59f29d33.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-0f2bcfb6","path":"/examples/advanced/multiple_pdf.html","title":"Multiples PDF","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":1700166862000,"contributors":[{"name":"TaTo30","email":"aldo.hernandez3012@gmail.com","commits":5}]},"filePathRelative":"examples/advanced/multiple_pdf.md"}');export{e as data}; diff --git a/assets/multiple_pdf.html-7275aea6.js b/assets/multiple_pdf.html-7275aea6.js new file mode 100644 index 0000000..87a3782 --- /dev/null +++ b/assets/multiple_pdf.html-7275aea6.js @@ -0,0 +1,36 @@ +import{_ as p,r as n,o as e,c,a as s,w as o,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Multiples PDF

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import { ref } from 'vue'
+
+const pdfSources = [
+  '/example_014.pdf',
+  '/example_036.pdf',
+  '/example_041.pdf',
+  '/example_045.pdf',
+  'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf',
+]
+// Setting the first (or default) PDF
+const pdfSource = ref(pdfSources[0])
+const pdfSourceIdx = ref(0)
+
+const { pdf } = usePDF(pdfSource)
+
+function nextPdf() {
+  pdfSourceIdx.value += 1
+  if (pdfSourceIdx.value >= pdfSources.length)
+    pdfSourceIdx.value = 0
+  pdfSource.value = pdfSources[pdfSourceIdx.value]
+}
+</script>
+
+<template>
+  <div>
+    <div>
+      <button @click="nextPdf">
+        Next PDF (Current index: {{ pdfSourceIdx }})
+      </button>
+    </div>
+    <VuePDF :pdf="pdf" />
+  </div>
+</template>
+
`,2);function d(k,r){const a=n("MultiplePDF"),t=n("ClientOnly");return e(),c("div",null,[i,s(t,null,{default:o(()=>[s(a)]),_:1})])}const m=p(u,[["render",d],["__file","multiple_pdf.html.vue"]]);export{m as default}; diff --git a/assets/one_page.html-042a751a.js b/assets/one_page.html-042a751a.js new file mode 100644 index 0000000..18b8d2e --- /dev/null +++ b/assets/one_page.html-042a751a.js @@ -0,0 +1,23 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

One page

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const page = ref(1)
+const { pdf, pages } = usePDF('https://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf')
+</script>
+
+<template>
+  <div>
+    <div>
+      <button @click="page = page > 1 ? page - 1 : page">
+        Prev
+      </button>
+      <span>{{ page }} / {{ pages }}</span>
+      <button @click="page = page < pages ? page + 1 : page">
+        Next
+      </button>
+    </div>
+    <VuePDF :pdf="pdf" :page="page" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("OnePage"),t=n("ClientOnly");return e(),o("div",null,[i,s(t,null,{default:c(()=>[s(a)]),_:1})])}const v=p(u,[["render",k],["__file","one_page.html.vue"]]);export{v as default}; diff --git a/assets/props.html-65d0d4f8.js b/assets/props.html-65d0d4f8.js new file mode 100644 index 0000000..3b67ff8 --- /dev/null +++ b/assets/props.html-65d0d4f8.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-0c5edf55","path":"/guide/props.html","title":"Props","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"pdf","slug":"pdf","link":"#pdf","children":[]},{"level":2,"title":"page","slug":"page","link":"#page","children":[]},{"level":2,"title":"scale","slug":"scale","link":"#scale","children":[]},{"level":2,"title":"fit-parent","slug":"fit-parent","link":"#fit-parent","children":[]},{"level":2,"title":"width","slug":"width","link":"#width","children":[]},{"level":2,"title":"height","slug":"height","link":"#height","children":[]},{"level":2,"title":"rotation","slug":"rotation","link":"#rotation","children":[]},{"level":2,"title":"text-layer","slug":"text-layer","link":"#text-layer","children":[]},{"level":2,"title":"highlight-text","slug":"highlight-text","link":"#highlight-text","children":[]},{"level":2,"title":"highlight-options","slug":"highlight-options","link":"#highlight-options","children":[]},{"level":2,"title":"annotation-layer","slug":"annotation-layer","link":"#annotation-layer","children":[]},{"level":2,"title":"watermark-text","slug":"watermark-text","link":"#watermark-text","children":[]},{"level":2,"title":"watermark-options","slug":"watermark-options","link":"#watermark-options","children":[]},{"level":2,"title":"image-resources-path","slug":"image-resources-path","link":"#image-resources-path","children":[]},{"level":2,"title":"hide-forms","slug":"hide-forms","link":"#hide-forms","children":[]},{"level":2,"title":"annotations-filter","slug":"annotations-filter","link":"#annotations-filter","children":[]},{"level":2,"title":"annotations-map","slug":"annotations-map","link":"#annotations-map","children":[]}],"git":{"updatedTime":1700166862000,"contributors":[{"name":"TaTo30","email":"aldo.hernandez3012@gmail.com","commits":4}]},"filePathRelative":"guide/props.md"}');export{e as data}; diff --git a/assets/props.html-ef6b26fc.js b/assets/props.html-ef6b26fc.js new file mode 100644 index 0000000..38c89a0 --- /dev/null +++ b/assets/props.html-ef6b26fc.js @@ -0,0 +1,51 @@ +import{_ as p,r as o,o as c,c as l,b as a,d as e,a as t,f as i,e as n}from"./app-6fe4962f.js";const u={},d=n(`

Props

pdf

Type: PDFDocumentLoadingTask
Required: true

The PDFDocumentLoadingTask obtained from usePDF

<VuePDF :pdf="pdf" />
+

page

Type: int
Required: false
Default: 1

Page to render, this prop must be a page number starting at 1

<VuePDF :pdf="pdf" :page="1" />
+

scale

Type: int
Required: false
Default: 1

Page scale

<VuePDF :pdf="pdf" :scale="0.5" />
+

fit-parent

Type: boolean
Required: false
Default: false

Fit page with the parent width. This prop replace scale in size calculation and has more precedence than width

<VuePDF :pdf="pdf" fit-parent />
+

width

Type: number
Required: false
Default: null

Scale the page with a width in px. This prop replace scale in size calculation and has more precedence than height

<VuePDF :pdf="pdf" :width="500" />
+

height

Type: number
Required: false
Default: null

Scale the page with a height in px. This prop replace scale in size calculation.

<VuePDF :pdf="pdf" :height="500" />
+

rotation

Type: int
Required: false
Default: Document Default

Rotate the page in 90° multiples eg. (90, 180, 270)

<VuePDF :pdf="pdf" :rotation="90" />
+

text-layer

Type: boolean
Required: false
Default: false

Enable text selection in page

<VuePDF :pdf="pdf" text-layer />
+
`,33),r={id:"highlight-text",tabindex:"-1"},k=a("a",{class:"header-anchor",href:"#highlight-text","aria-hidden":"true"},"#",-1),v=n(`

Type: string
Required: false
Default: null

Highlight on the page the searched text

<VuePDF :pdf="pdf" text-layer hightlight-text="javascript" />
+
`,3),h={id:"highlight-options",tabindex:"-1"},g=a("a",{class:"header-anchor",href:"#highlight-options","aria-hidden":"true"},"#",-1),m=n(`

Type: object
Required: false
Default:

{
+  completeWords: false,
+  ignoreCase: true
+}
+

Settings for how to search the highlight-text

<VuePDF :pdf="pdf" text-layer hightlight-text="javascript" :highlight-options="{
+    completeWords: true,
+    ignoreCase: false
+  }"
+/>
+

annotation-layer

Type: boolean
Required: false
Default: false

Enable document annotations like links, popups, widgets, etc.

<VuePDF :pdf="pdf" annotation-layer />
+

watermark-text

Type: string
Required: false
Default: null

Prints a watermark pattern over canvas.

<VuePDF :pdf="pdf" watermark-text="Sample" />
+

watermark-options

Type: object
Required: false
Default:

{
+  columns: 4,
+  rows: 4,
+  rotation: 45,
+  fontSize: 18,
+  color: 'rgba(211, 210, 211, 0.4)',
+}
+

Customize how watermark is printed over canvas.

<script setup>
+const watermarkOptions = ref({
+  columns: 1,
+  rows: 1,
+  color: '#23FFFF',
+  rotation: 45,
+  fontSize: 20,
+})
+</script>
+
+<VuePDF :pdf="pdf" watermark-text="Sample" :watermark-options="watermarkOptions" />
+

image-resources-path

Type: string
Required: false
Default: null

Path to image resources needed to render some graphics when required.

<VuePDF :pdf="pdf" image-resources-path="https://unpkg.com/pdfjs-dist@latest/web/images/" />
+

hide-forms

Type: boolean
Required: false
Default: false

Hide AcroForms from annotation-layer.

<VuePDF :pdf="pdf" annotation-layer hide-forms />
+

annotations-filter

Type: array
Required: false
Default: null

Allows to choose which annotations display on page, the following options are available:

  • Link
  • Text
  • Stamp
  • Popup
  • FreeText
  • Line
  • Square
  • Circle
  • PolyLine
  • Caret
  • Ink
  • Polygon
  • Highlight
  • Underline
  • Squiggly
  • StrikeOut
  • FileAttachment
  • Widget
    • Widget.Tx
    • Widget.Btn
    • Widget.Ch
    • Widget.Sig

NOTE: Widget shows all Widget subtypes like Widget.Tx, Widget.Btn, etc.

<script setup>
+const filter = ref(['Link', 'Text', 'Widget'])
+</script>
+
+<VuePDF :pdf="pdf" annotation-layer :annotations-filter="filter" />
+

annotations-map

Type: object
Required: false
Default: null

Allows to map values to annotation's storage, useful for edit annotation's data before rendering.

<script setup>
+const annotationMap = ref({ '7R': { value: 'Modified value' } })
+</script>
+
+<VuePDF :pdf="pdf" annotation-layer :annotations-map="annotationMap" />
+
`,35);function b(f,q){const s=o("badge");return c(),l("div",null,[d,a("h2",r,[k,e(" highlight-text "),t(s,{type:"tip",text:"v1.9",vertical:"middle"})]),v,a("h2",h,[g,e(" highlight-options "),t(s,{type:"tip",text:"v1.9",vertical:"middle"})]),m,i(" > NOTE: `annotations-filter` has more precedence than `annotations-map`, so if both used, annotations will be first filter and then mapped. ")])}const y=p(u,[["render",b],["__file","props.html.vue"]]);export{y as default}; diff --git a/assets/rotation.html-362dea84.js b/assets/rotation.html-362dea84.js new file mode 100644 index 0000000..a557312 --- /dev/null +++ b/assets/rotation.html-362dea84.js @@ -0,0 +1,23 @@ +import{_ as p,r as n,o,c as e,a as s,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Rotation

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const rotation = ref(1)
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+</script>
+
+<template>
+  <div>
+    <div>
+      <button @click="rotation = rotation - 90">
+        -90
+      </button>
+      <span>{{ rotation }}</span>
+      <button @click="rotation = rotation + 90">
+        +90
+      </button>
+    </div>
+    <VuePDF :pdf="pdf" :rotation="rotation" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("Rotation"),t=n("ClientOnly");return o(),e("div",null,[i,s(t,null,{default:c(()=>[s(a)]),_:1})])}const g=p(u,[["render",k],["__file","rotation.html.vue"]]);export{g as default}; diff --git a/assets/scale.html-84a9ac8a.js b/assets/scale.html-84a9ac8a.js new file mode 100644 index 0000000..3e5b780 --- /dev/null +++ b/assets/scale.html-84a9ac8a.js @@ -0,0 +1,23 @@ +import{_ as p,r as n,o as e,c,a as s,w as l,e as o}from"./app-6fe4962f.js";const u={},i=o(`

Scale

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+
+const scale = ref(1)
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+</script>
+
+<template>
+  <div>
+    <div>
+      <button @click="scale = scale > 0.25 ? scale - 0.25 : scale">
+        -
+      </button>
+      <span>{{ scale * 100 }}%</span>
+      <button @click="scale = scale < 2 ? scale + 0.25 : scale">
+        +
+      </button>
+    </div>
+    <VuePDF :pdf="pdf" :scale="scale" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("Scale"),t=n("ClientOnly");return e(),c("div",null,[i,s(t,null,{default:l(()=>[s(a)]),_:1})])}const g=p(u,[["render",k],["__file","scale.html.vue"]]);export{g as default}; diff --git a/assets/slots.html-33cff15b.js b/assets/slots.html-33cff15b.js new file mode 100644 index 0000000..ea0f66a --- /dev/null +++ b/assets/slots.html-33cff15b.js @@ -0,0 +1,8 @@ +import{_ as a,o as n,c as s,e as t}from"./app-6fe4962f.js";const e={},p=t(`

Slots

loading: default

Slot to display when page is rendering

<template>
+  <VuePDF :pdf="pdf">
+    <div>
+      Loading...
+    </div>
+  </VuePDF>
+</template>
+
`,4),l=[p];function o(c,i){return n(),s("div",null,l)}const d=a(e,[["render",o],["__file","slots.html.vue"]]);export{d as default}; diff --git a/assets/style-e2ee7e0d.css b/assets/style-e2ee7e0d.css new file mode 100644 index 0000000..b30e520 --- /dev/null +++ b/assets/style-e2ee7e0d.css @@ -0,0 +1 @@ +:root{--back-to-top-z-index: 5;--back-to-top-color: #3eaf7c;--back-to-top-color-hover: #71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/VuePDF/assets/back-to-top-8efcbe56.svg) no-repeat;mask:url(/VuePDF/assets/back-to-top-8efcbe56.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width: 959px){.back-to-top{display:none}}@media print{.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--medium-zoom-z-index: 100;--medium-zoom-bg-color: #ffffff;--medium-zoom-opacity: 1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #42b983;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #660000;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px}.back-to-top{--back-to-top-color: var(--c-brand);--back-to-top-color-hover: var(--c-brand-light)}.DocSearch{--docsearch-primary-color: var(--c-brand);--docsearch-text-color: var(--c-text);--docsearch-highlight-color: var(--c-brand);--docsearch-muted-color: var(--c-text-quote);--docsearch-container-background: rgba(9, 10, 17, .8);--docsearch-modal-background: var(--c-bg-light);--docsearch-searchbox-background: var(--c-bg-lighter);--docsearch-searchbox-focus-background: var(--c-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);--docsearch-hit-color: var(--c-text-light);--docsearch-hit-active-color: var(--c-bg);--docsearch-hit-background: var(--c-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background: var(--c-bg)}.external-link-icon{--external-link-icon-color: var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color: var(--c-bg)}#nprogress{--nprogress-color: var(--c-brand)}.pwa-popup{--pwa-popup-text-color: var(--c-text);--pwa-popup-bg-color: var(--c-bg);--pwa-popup-border-color: var(--c-brand);--pwa-popup-shadow: 0 4px 16px var(--c-brand);--pwa-popup-btn-text-color: var(--c-bg);--pwa-popup-btn-bg-color: var(--c-brand);--pwa-popup-btn-hover-bg-color: var(--c-brand-light)}.search-box{--search-bg-color: var(--c-bg);--search-accent-color: var(--c-brand);--search-text-color: var(--c-text);--search-border-color: var(--c-border);--search-item-text-color: var(--c-text-lighter);--search-item-focus-bg-color: var(--c-bg-light)}html.dark{--c-brand: #3aa675;--c-brand-light: #349469;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-bg-dark: #343b44;--c-bg-darker: #37404c;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #318a62;--c-warning: #e0ad15;--c-warning-bg: #2d2f2d;--c-warning-bg-light: #423e2a;--c-warning-bg-lighter: #44442f;--c-warning-border-dark: #957c35;--c-warning-details-bg: #39392d;--c-warning-title: #fdca31;--c-warning-text: #d8d96d;--c-warning-text-accent: #ffbf00;--c-warning-text-light: #ddb84b;--c-warning-text-quote: #ccab49;--c-danger: #fc1e38;--c-danger-bg: #39232c;--c-danger-bg-light: #4b2b35;--c-danger-bg-lighter: #553040;--c-danger-border-dark: #a25151;--c-danger-details-bg: #482936;--c-danger-title: #fc2d3b;--c-danger-text: #ea9ca0;--c-danger-text-accent: #fd3636;--c-danger-text-light: #d9777c;--c-danger-text-quote: #d56b6b;--c-details-bg: #323843;--c-badge-warning: var(--c-warning);--c-badge-warning-text: #3c2e05;--c-badge-danger: var(--c-danger);--c-badge-danger-text: #401416;--code-hl-bg-color: #363b46}html.dark .DocSearch{--docsearch-logo-color: var(--c-text);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)}html,body{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}html.dark{color-scheme:dark}html{font-size:16px}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1rem;color:var(--c-text)}a{font-weight:500;color:var(--c-text-accent);text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400;color:var(--c-text-accent)}kbd{font-family:var(--font-family-code);color:var(--c-text);background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{font-family:var(--font-family-code);color:var(--c-text-lighter);padding:.25rem .5rem;margin:0;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem;overflow-wrap:break-word}blockquote>p{margin:0}ul,ol{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{a.header-anchor{display:none}}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}@media print{a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}}p,ul,ol{line-height:1.7;overflow-wrap:break-word}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto;transition:border-color var(--t-color)}tr{border-top:1px solid var(--c-border-dark);transition:border-color var(--t-color)}tr:nth-child(2n){background-color:var(--c-bg-light);transition:background-color var(--t-color)}tr:nth-child(2n) code{background-color:var(--c-bg-dark)}th,td{padding:.6em 1em;border:1px solid var(--c-border-dark);transition:border-color var(--t-color)}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--c-bg-arrow)}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid var(--c-bg-arrow)}.badge{display:inline-block;font-size:14px;font-weight:600;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning);color:var(--c-badge-warning-text)}.badge.danger{background-color:var(--c-badge-danger);color:var(--c-badge-danger-text)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.375;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent!important;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{content:attr(data-ext);position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.375}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.375;counter-reset:line-number}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;-webkit-user-select:none;-moz-user-select:none;user-select:none;height:1.375em}div[class*=language-].line-numbers-mode .line-numbers .line-number:before{counter-increment:line-number;content:counter(line-number);font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}@media (max-width: 419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:none}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width: 419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.tip,.custom-container.warning,.custom-container.danger{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.tip code{background-color:var(--c-bg-dark)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.warning blockquote{border-left-color:var(--c-warning-border-dark);color:var(--c-warning-text-quote)}.custom-container.warning code{color:var(--c-warning-text-light);background-color:var(--c-warning-bg-light)}.custom-container.warning details{background-color:var(--c-warning-details-bg)}.custom-container.warning details code{background-color:var(--c-warning-bg-lighter)}.custom-container.warning .external-link-icon{--external-link-icon-color: var(--c-warning-text-quote)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.danger blockquote{border-left-color:var(--c-danger-border-dark);color:var(--c-danger-text-quote)}.custom-container.danger code{color:var(--c-danger-text-light);background-color:var(--c-danger-bg-light)}.custom-container.danger details{background-color:var(--c-danger-details-bg)}.custom-container.danger details code{background-color:var(--c-danger-bg-lighter)}.custom-container.danger .external-link-icon{--external-link-icon-color: var(--c-danger-text-quote)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details code{background-color:var(--c-bg-darker)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:none;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p{color:var(--c-text-lighter)}.home .theme-default-content{padding:0;margin:0}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;color:var(--c-text-lighter);transition:border-color var(--t-color)}@media (max-width: 719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width: 419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:var(--navbar-height);box-sizing:border-box;border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);position:fixed;z-index:10;margin:0;top:var(--navbar-height);left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content h1,.theme-container.no-navbar .theme-default-content h2,.theme-container.no-navbar .theme-default-content h3,.theme-container.no-navbar .theme-default-content h4,.theme-container.no-navbar .theme-default-content h5,.theme-container.no-navbar .theme-default-content h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar{display:none}@media (max-width: 719px){.theme-container.no-sidebar .sidebar{display:block}}.theme-container.no-sidebar .page{padding-left:0}.theme-default-content a:hover{text-decoration:underline}.theme-default-content img{max-width:100%}.theme-default-content h1,.theme-default-content h2,.theme-default-content h3,.theme-default-content h4,.theme-default-content h5,.theme-default-content h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content h1:first-child,.theme-default-content h2:first-child,.theme-default-content h3:first-child,.theme-default-content h4:first-child,.theme-default-content h5:first-child,.theme-default-content h6:first-child{margin-bottom:1rem}.theme-default-content h1:first-child+p,.theme-default-content h1:first-child+pre,.theme-default-content h1:first-child+.custom-container,.theme-default-content h2:first-child+p,.theme-default-content h2:first-child+pre,.theme-default-content h2:first-child+.custom-container,.theme-default-content h3:first-child+p,.theme-default-content h3:first-child+pre,.theme-default-content h3:first-child+.custom-container,.theme-default-content h4:first-child+p,.theme-default-content h4:first-child+pre,.theme-default-content h4:first-child+.custom-container,.theme-default-content h5:first-child+p,.theme-default-content h5:first-child+pre,.theme-default-content h5:first-child+.custom-container,.theme-default-content h6:first-child+p,.theme-default-content h6:first-child+pre,.theme-default-content h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width: 419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media screen and (max-width: 719px){.navbar{padding-left:4rem}.navbar .site-name{display:block;width:calc(100vw - 11rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.navbar .can-hide{display:none}}.navbar-items{display:inline-block}@media print{.navbar-items{display:none}}.navbar-items a{display:inline-block;line-height:1.4rem;color:inherit}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}@media (max-width: 719px){.navbar-items .navbar-item{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:0;border-bottom:none}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width: 719px){.toggle-sidebar-button{display:block}}.toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--c-text);opacity:.8;cursor:pointer}@media print{.toggle-color-mode-button{display:none}}.toggle-color-mode-button:hover{opacity:1}.toggle-color-mode-button .icon{width:1.25rem;height:1.25rem}.DocSearch{transition:background-color var(--t-color)}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title:hover,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:none}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper.mobile .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle,.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}.navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.navbar-dropdown-wrapper:not(.mobile):hover .navbar-dropdown,.navbar-dropdown-wrapper:not(.mobile).open .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper:not(.mobile).open:blur{display:none}.navbar-dropdown-wrapper:not(.mobile) .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.page{padding-bottom:2rem;display:block}.page .theme-default-content{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.page .theme-default-content{padding:2rem}}@media (max-width: 419px){.page .theme-default-content{padding:1.5rem}}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width: 959px){.page-meta{padding:2rem}}@media (max-width: 419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}@media print{.page-meta .edit-link{display:none}}.page-meta .last-updated{float:right}@media (max-width: 719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width: 959px){.page-nav{padding:2rem}}@media (max-width: 419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"←"}.page-nav .next{float:right}.page-nav .next a:after{content:"→"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width: 719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default;border-left:.25rem solid transparent;color:var(--c-text)}.sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.sidebar-item.active:not(p.sidebar-heading){font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item.sidebar-heading{transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0}.sidebar-item.sidebar-heading+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.collapsible{cursor:pointer}.sidebar-item.collapsible .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-heading+.sidebar-item-children .sidebar-item:not(.sidebar-heading).active{border-left-color:transparent}a.sidebar-item{cursor:pointer}a.sidebar-item:hover{color:var(--c-text-accent)}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}:root{--search-bg-color: #ffffff;--search-accent-color: #3eaf7c;--search-text-color: #2c3e50;--search-border-color: #eaecef;--search-item-text-color: #5d81a5;--search-item-focus-bg-color: #f3f4f5;--search-input-width: 8rem;--search-result-width: 20rem}.search-box{display:inline-block;position:relative;margin-left:1rem}@media print{.search-box{display:none}}.search-box input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:text;width:var(--search-input-width);height:2rem;color:var(--search-text-color);display:inline-block;border:1px solid var(--search-border-color);border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all ease .3s;background:var(--search-bg-color) url(/VuePDF/assets/search-0782d0d1.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:var(--search-accent-color)}.search-box .suggestions{background:var(--search-bg-color);width:var(--search-result-width);position:absolute;top:2rem;right:0;border:1px solid var(--search-border-color);border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion.focus{background-color:var(--search-item-focus-bg-color)}.search-box .suggestion.focus a{color:var(--search-accent-color)}.search-box .suggestion a{white-space:normal;color:var(--search-item-text-color)}.search-box .suggestion .page-title{font-weight:600}.search-box .suggestion .page-header{font-size:.9em;margin-left:.25em}@media (max-width: 719px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (max-width: 419px){.search-box input:focus{width:8rem}.search-box .suggestions{width:calc(100vw - 4rem);right:-.5rem}}.button-example{background-color:var(--c-brand);color:#fff;padding:10px;margin:7px;border-radius:4px;border:none;cursor:pointer}.button-example:hover{background-color:var(--c-brand-light)}.checkbox-example{width:15px;height:15px}.input-example{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:7px 15px;border:1px solid transparent;border-radius:6px;outline:none}.input-example:focus{cursor:auto;border-color:var(--search-accent-color)}.select-example{background-color:var(--c-brand);color:#fff;padding:10px;margin:7px;border-radius:4px;border:none}.container{display:flex;align-items:center;flex-direction:column}:root{--highlight-bg-color: rgba(180, 0, 170, 1);--highlight-selected-bg-color: rgba(0, 100, 0, 1)}@media screen and (forced-colors: active){:root{--highlight-bg-color: Highlight;--highlight-selected-bg-color: ButtonText}}.textLayer{position:absolute;text-align:initial;inset:0;overflow:hidden;opacity:.25;line-height:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;z-index:2}.textLayer :is(span,br){color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0% 0%}.textLayer span.markedContent{top:0;height:0}.textLayer .highlight{margin:-1px;padding:1px;background-color:var(--highlight-bg-color);border-radius:4px}.textLayer .highlight.appended{position:initial}.textLayer .highlight.begin{border-radius:4px 0 0 4px}.textLayer .highlight.end{border-radius:0 4px 4px 0}.textLayer .highlight.middle{border-radius:0}.textLayer .highlight.selected{background-color:var(--highlight-selected-bg-color)}.textLayer ::-moz-selection{background:blue;background:AccentColor}.textLayer ::selection{background:blue;background:AccentColor}.textLayer br::-moz-selection{background:transparent}.textLayer br::selection{background:transparent}.textLayer .endOfContent{display:block;position:absolute;inset:100% 0 0;z-index:-1;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}.textLayer .endOfContent.active{top:0}:root{--annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,");--input-focus-border-color: Highlight;--input-focus-outline: 1px solid Canvas;--input-unfocused-border-color: transparent;--input-disabled-border-color: transparent;--input-hover-border-color: black;--link-outline: none}@media screen and (forced-colors: active){:root{--input-focus-border-color: CanvasText;--input-unfocused-border-color: ActiveText;--input-disabled-border-color: GrayText;--input-hover-border-color: Highlight;--link-outline: 1.5px solid LinkText}.annotationLayer .textWidgetAnnotation :is(input,textarea):required,.annotationLayer .choiceWidgetAnnotation select:required,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:required{outline:1.5px solid selectedItem}.annotationLayer .linkAnnotation:hover{-webkit-backdrop-filter:invert(100%);backdrop-filter:invert(100%)}}.annotationLayer{position:absolute;top:0;left:0;pointer-events:none;transform-origin:0 0;z-index:3}.annotationLayer[data-main-rotation="90"] .norotate{transform:rotate(270deg) translate(-100%)}.annotationLayer[data-main-rotation="180"] .norotate{transform:rotate(180deg) translate(-100%,-100%)}.annotationLayer[data-main-rotation="270"] .norotate{transform:rotate(90deg) translateY(-100%)}.annotationLayer canvas{position:absolute;width:100%;height:100%}.annotationLayer section{position:absolute;text-align:initial;pointer-events:auto;box-sizing:border-box;transform-origin:0 0}.annotationLayer .linkAnnotation{outline:var(--link-outline)}.annotationLayer :is(.linkAnnotation,.buttonWidgetAnnotation.pushButton)>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%}.annotationLayer :is(.linkAnnotation,.buttonWidgetAnnotation.pushButton)>a:hover{opacity:.2;background:rgba(255,255,0,1);box-shadow:0 2px 10px #ff0}.annotationLayer .textAnnotation img{position:absolute;cursor:pointer;width:100%;height:100%;top:0;left:0}.annotationLayer .textWidgetAnnotation :is(input,textarea),.annotationLayer .choiceWidgetAnnotation select,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input{background-image:var(--annotation-unfocused-field-background);border:2px solid var(--input-unfocused-border-color);box-sizing:border-box;font:calc(9px * var(--scale-factor)) sans-serif;height:100%;margin:0;vertical-align:top;width:100%}.annotationLayer .textWidgetAnnotation :is(input,textarea):required,.annotationLayer .choiceWidgetAnnotation select:required,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:required{outline:1.5px solid red}.annotationLayer .choiceWidgetAnnotation select option{padding:0}.annotationLayer .buttonWidgetAnnotation.radioButton input{border-radius:50%}.annotationLayer .textWidgetAnnotation textarea{resize:none}.annotationLayer .textWidgetAnnotation :is(input,textarea)[disabled],.annotationLayer .choiceWidgetAnnotation select[disabled],.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input[disabled]{background:none;border:2px solid var(--input-disabled-border-color);cursor:not-allowed}.annotationLayer .textWidgetAnnotation :is(input,textarea):hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:hover{border:2px solid var(--input-hover-border-color)}.annotationLayer .textWidgetAnnotation :is(input,textarea):hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation.checkBox input:hover{border-radius:2px}.annotationLayer .textWidgetAnnotation :is(input,textarea):focus,.annotationLayer .choiceWidgetAnnotation select:focus{background:none;border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) :focus{background-image:none;background-color:transparent}.annotationLayer .buttonWidgetAnnotation.checkBox :focus{border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.radioButton :focus{border:2px solid var(--input-focus-border-color);outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{background-color:CanvasText;content:"";display:block;position:absolute}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{height:80%;left:45%;width:1px}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before{transform:rotate(45deg)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{transform:rotate(-45deg)}.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{border-radius:50%;height:50%;left:30%;top:20%;width:50%}.annotationLayer .textWidgetAnnotation input.comb{font-family:monospace;padding-left:2px;padding-right:0}.annotationLayer .textWidgetAnnotation input.comb:focus{width:103%}.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input{-webkit-appearance:none;-moz-appearance:none;appearance:none}.annotationLayer .popupTriggerArea{height:100%;width:100%}.annotationLayer .fileAttachmentAnnotation .popupTriggerArea{position:absolute}.annotationLayer .popupWrapper{position:absolute;font-size:calc(9px * var(--scale-factor));width:100%;min-width:calc(180px * var(--scale-factor));pointer-events:none}.annotationLayer .popup{position:absolute;max-width:calc(180px * var(--scale-factor));background-color:#ff9;box-shadow:0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor)) #888;border-radius:calc(2px * var(--scale-factor));padding:calc(6px * var(--scale-factor));margin-left:calc(5px * var(--scale-factor));cursor:pointer;font:message-box;white-space:normal;word-wrap:break-word;pointer-events:auto}.annotationLayer .popup>*{font-size:calc(9px * var(--scale-factor))}.annotationLayer .popup h1{display:inline-block}.annotationLayer .popupDate{display:inline-block;margin-left:calc(5px * var(--scale-factor))}.annotationLayer .popupContent{border-top:1px solid rgba(51,51,51,1);margin-top:calc(2px * var(--scale-factor));padding-top:calc(2px * var(--scale-factor))}.annotationLayer .richText>*{white-space:pre-wrap;font-size:calc(9px * var(--scale-factor))}.annotationLayer .highlightAnnotation,.annotationLayer .underlineAnnotation,.annotationLayer .squigglyAnnotation,.annotationLayer .strikeoutAnnotation,.annotationLayer .freeTextAnnotation,.annotationLayer .lineAnnotation svg line,.annotationLayer .squareAnnotation svg rect,.annotationLayer .circleAnnotation svg ellipse,.annotationLayer .polylineAnnotation svg polyline,.annotationLayer .polygonAnnotation svg polygon,.annotationLayer .caretAnnotation,.annotationLayer .inkAnnotation svg polyline,.annotationLayer .stampAnnotation,.annotationLayer .fileAttachmentAnnotation{cursor:pointer}.annotationLayer section svg{position:absolute;width:100%;height:100%;top:0;left:0}.annotationLayer .annotationTextContent{position:absolute;width:100%;height:100%;opacity:0;color:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.annotationLayer .annotationTextContent span{width:100%;display:inline-block}:root{--xfa-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,");--xfa-focus-outline: auto}@media screen and (forced-colors: active){:root{--xfa-focus-outline: 2px solid CanvasText}.xfaLayer *:required{outline:1.5px solid selectedItem}}.xfaLayer{background-color:transparent}.xfaLayer .highlight{margin:-1px;padding:1px;background-color:#efcbed;border-radius:4px}.xfaLayer .highlight.appended{position:initial}.xfaLayer .highlight.begin{border-radius:4px 0 0 4px}.xfaLayer .highlight.end{border-radius:0 4px 4px 0}.xfaLayer .highlight.middle{border-radius:0}.xfaLayer .highlight.selected{background-color:#cbdfcb}.xfaPage{overflow:hidden;position:relative}.xfaContentarea{position:absolute}.xfaPrintOnly{display:none}.xfaLayer{position:absolute;text-align:initial;top:0;left:0;transform-origin:0 0;line-height:1.2}.xfaLayer *{color:inherit;font:inherit;font-style:inherit;font-weight:inherit;font-kerning:inherit;letter-spacing:-.01px;text-align:inherit;text-decoration:inherit;box-sizing:border-box;background-color:transparent;padding:0;margin:0;pointer-events:auto;line-height:inherit}.xfaLayer *:required{outline:1.5px solid red}.xfaLayer div,.xfaLayer svg,.xfaLayer svg *{pointer-events:none}.xfaLayer a{color:#00f}.xfaRich li{margin-left:3em}.xfaFont{color:#000;font-weight:400;font-kerning:none;font-size:10px;font-style:normal;letter-spacing:0;text-decoration:none;vertical-align:0}.xfaCaption{overflow:hidden;flex:0 0 auto}.xfaCaptionForCheckButton{overflow:hidden;flex:1 1 auto}.xfaLabel{height:100%;width:100%}.xfaLeft{display:flex;flex-direction:row;align-items:center}.xfaRight{display:flex;flex-direction:row-reverse;align-items:center}:is(.xfaLeft,.xfaRight)>:is(.xfaCaption,.xfaCaptionForCheckButton){max-height:100%}.xfaTop{display:flex;flex-direction:column;align-items:flex-start}.xfaBottom{display:flex;flex-direction:column-reverse;align-items:flex-start}:is(.xfaTop,.xfaBottom)>:is(.xfaCaption,.xfaCaptionForCheckButton){width:100%}.xfaBorder{background-color:transparent;position:absolute;pointer-events:none}.xfaWrapped{width:100%;height:100%}:is(.xfaTextfield,.xfaSelect):focus{background-image:none;background-color:transparent;outline:var(--xfa-focus-outline);outline-offset:-1px}:is(.xfaCheckbox,.xfaRadio):focus{outline:var(--xfa-focus-outline)}.xfaTextfield,.xfaSelect{height:100%;width:100%;flex:1 1 auto;border:none;resize:none;background-image:var(--xfa-unfocused-field-background)}.xfaSelect{padding-inline:2px}:is(.xfaTop,.xfaBottom)>:is(.xfaTextfield,.xfaSelect){flex:0 1 auto}.xfaButton{cursor:pointer;width:100%;height:100%;border:none;text-align:center}.xfaLink{width:100%;height:100%;position:absolute;top:0;left:0}.xfaCheckbox,.xfaRadio{width:100%;height:100%;flex:0 0 auto;border:none}.xfaRich{white-space:pre-wrap;width:100%;height:100%}.xfaImage{-o-object-position:left top;object-position:left top;-o-object-fit:contain;object-fit:contain;width:100%;height:100%}.xfaLrTb,.xfaRlTb,.xfaTb{display:flex;flex-direction:column;align-items:stretch}.xfaLr{display:flex;flex-direction:row;align-items:stretch}.xfaRl{display:flex;flex-direction:row-reverse;align-items:stretch}.xfaTb>div{justify-content:left}.xfaPosition,.xfaArea{position:relative}.xfaValignMiddle{display:flex;align-items:center}.xfaTable{display:flex;flex-direction:column;align-items:stretch}.xfaTable .xfaRow{display:flex;flex-direction:row;align-items:stretch}.xfaTable .xfaRlRow{display:flex;flex-direction:row-reverse;align-items:stretch;flex:1}.xfaTable .xfaRlRow>div{flex:1}:is(.xfaNonInteractive,.xfaDisabled,.xfaReadOnly) :is(input,textarea){background:initial}@media print{.xfaTextfield,.xfaSelect{background:transparent}.xfaSelect{-webkit-appearance:none;-moz-appearance:none;appearance:none;text-indent:1px;text-overflow:""}}:root{--focus-outline: solid 2px blue;--hover-outline: dashed 2px blue;--freetext-line-height: 1.35;--freetext-padding: 2px;--editorFreeText-editing-cursor: text;--editorInk-editing-cursor: pointer}@media screen and (forced-colors: active){:root{--focus-outline: solid 3px ButtonText;--hover-outline: dashed 3px ButtonText}}[data-editor-rotation="90"]{transform:rotate(90deg)}[data-editor-rotation="180"]{transform:rotate(180deg)}[data-editor-rotation="270"]{transform:rotate(270deg)}.annotationEditorLayer{background:transparent;position:absolute;top:0;left:0;font-size:calc(100px * var(--scale-factor));transform-origin:0 0;cursor:auto;z-index:4}.annotationEditorLayer.freeTextEditing{cursor:var(--editorFreeText-editing-cursor)}.annotationEditorLayer.inkEditing{cursor:var(--editorInk-editing-cursor)}.annotationEditorLayer :is(.freeTextEditor,.inkEditor)[draggable=true]{cursor:move}.annotationEditorLayer .selectedEditor{outline:var(--focus-outline);resize:none}.annotationEditorLayer .freeTextEditor{position:absolute;background:transparent;border-radius:3px;padding:calc(var(--freetext-padding) * var(--scale-factor));resize:none;width:auto;height:auto;z-index:1;transform-origin:0 0;touch-action:none;cursor:auto}.annotationEditorLayer .freeTextEditor .internal{background:transparent;border:none;top:0;left:0;overflow:visible;white-space:nowrap;resize:none;font:10px sans-serif;line-height:var(--freetext-line-height)}.annotationEditorLayer .freeTextEditor .overlay{position:absolute;display:none;background:transparent;top:0;left:0;width:100%;height:100%}.annotationEditorLayer .freeTextEditor .overlay.enabled{display:block}.annotationEditorLayer .freeTextEditor .internal:empty:before{content:attr(default-content);color:gray}.annotationEditorLayer .freeTextEditor .internal:focus{outline:none}.annotationEditorLayer .inkEditor.disabled{resize:none}.annotationEditorLayer .inkEditor.disabled.selectedEditor{resize:horizontal}.annotationEditorLayer :is(.freeTextEditor,.inkEditor):hover:not(.selectedEditor){outline:var(--hover-outline)}.annotationEditorLayer .inkEditor{position:absolute;background:transparent;border-radius:3px;overflow:auto;width:100%;height:100%;z-index:1;transform-origin:0 0;cursor:auto}.annotationEditorLayer .inkEditor.editing{resize:none;cursor:inherit}.annotationEditorLayer .inkEditor .inkEditorCanvas{position:absolute;top:0;left:0;width:100%;height:100%;touch-action:none}:root{--viewer-container-height: 0;--pdfViewer-padding-bottom: 0;--page-margin: 1px auto -8px;--page-border: 9px solid transparent;--spreadHorizontalWrapped-margin-LR: -3.5px;--loading-icon-delay: .4s}@media screen and (forced-colors: active){:root{--pdfViewer-padding-bottom: 9px;--page-margin: 8px auto -1px;--page-border: 1px solid CanvasText;--spreadHorizontalWrapped-margin-LR: 3.5px}}[data-main-rotation="90"]{transform:rotate(90deg) translateY(-100%)}[data-main-rotation="180"]{transform:rotate(180deg) translate(-100%,-100%)}[data-main-rotation="270"]{transform:rotate(270deg) translate(-100%)}#hiddenCopyElement{position:absolute;top:0;left:0;width:0;height:0;display:none}.pdfViewer{--scale-factor: 1;padding-bottom:var(--pdfViewer-padding-bottom)}.pdfViewer .canvasWrapper{overflow:hidden;width:100%;height:100%;z-index:1}.pdfViewer .page{direction:ltr;width:816px;height:1056px;margin:var(--page-margin);position:relative;overflow:visible;border:var(--page-border);background-clip:content-box;background-color:#fff}.pdfViewer .dummyPage{position:relative;width:0;height:var(--viewer-container-height)}.pdfViewer.removePageBorders .page{margin:0 auto 10px;border:none}.pdfViewer.singlePageView{display:inline-block}.pdfViewer.singlePageView .page{margin:0;border:none}.pdfViewer:is(.scrollHorizontal,.scrollWrapped),.spread{margin-inline:3.5px;text-align:center}.pdfViewer.scrollHorizontal,.spread{white-space:nowrap}.pdfViewer.removePageBorders,.pdfViewer:is(.scrollHorizontal,.scrollWrapped) .spread{margin-inline:0}.spread :is(.page,.dummyPage),.pdfViewer:is(.scrollHorizontal,.scrollWrapped) :is(.page,.spread){display:inline-block;vertical-align:middle}.spread .page,.pdfViewer:is(.scrollHorizontal,.scrollWrapped) .page{margin-inline:var(--spreadHorizontalWrapped-margin-LR)}.pdfViewer.removePageBorders .spread .page,.pdfViewer.removePageBorders:is(.scrollHorizontal,.scrollWrapped) .page{margin-inline:5px}.pdfViewer .page canvas{margin:0;display:block}.pdfViewer .page canvas .structTree{contain:strict}.pdfViewer .page canvas[hidden]{display:none}.pdfViewer .page canvas[zooming]{width:100%;height:100%}.pdfViewer .page.loadingIcon:after{position:absolute;top:0;left:0;content:"";width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhGAAYAPQAAP///wAAAM7Ozvr6+uDg4LCwsOjo6I6OjsjIyJycnNjY2KioqMDAwPLy8nZ2doaGhri4uGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJBwAAACwAAAAAGAAYAAAFriAgjiQAQWVaDgr5POSgkoTDjFE0NoQ8iw8HQZQTDQjDn4jhSABhAAOhoTqSDg7qSUQwxEaEwwFhXHhHgzOA1xshxAnfTzotGRaHglJqkJcaVEqCgyoCBQkJBQKDDXQGDYaIioyOgYSXA36XIgYMBWRzXZoKBQUMmil0lgalLSIClgBpO0g+s26nUWddXyoEDIsACq5SsTMMDIECwUdJPw0Mzsu0qHYkw72bBmozIQAh+QQJBwAAACwAAAAAGAAYAAAFsCAgjiTAMGVaDgR5HKQwqKNxIKPjjFCk0KNXC6ATKSI7oAhxWIhezwhENTCQEoeGCdWIPEgzESGxEIgGBWstEW4QCGGAIJEoxGmGt5ZkgCRQQHkGd2CESoeIIwoMBQUMP4cNeQQGDYuNj4iSb5WJnmeGng0CDGaBlIQEJziHk3sABidDAHBgagButSKvAAoyuHuUYHgCkAZqebw0AgLBQyyzNKO3byNuoSS8x8OfwIchACH5BAkHAAAALAAAAAAYABgAAAW4ICCOJIAgZVoOBJkkpDKoo5EI43GMjNPSokXCINKJCI4HcCRIQEQvqIOhGhBHhUTDhGo4diOZyFAoKEQDxra2mAEgjghOpCgz3LTBIxJ5kgwMBShACREHZ1V4Kg1rS44pBAgMDAg/Sw0GBAQGDZGTlY+YmpyPpSQDiqYiDQoCliqZBqkGAgKIS5kEjQ21VwCyp76dBHiNvz+MR74AqSOdVwbQuo+abppo10ssjdkAnc0rf8vgl8YqIQAh+QQJBwAAACwAAAAAGAAYAAAFrCAgjiQgCGVaDgZZFCQxqKNRKGOSjMjR0qLXTyciHA7AkaLACMIAiwOC1iAxCrMToHHYjWQiA4NBEA0Q1RpWxHg4cMXxNDk4OBxNUkPAQAEXDgllKgMzQA1pSYopBgonCj9JEA8REQ8QjY+RQJOVl4ugoYssBJuMpYYjDQSliwasiQOwNakALKqsqbWvIohFm7V6rQAGP6+JQLlFg7KDQLKJrLjBKbvAor3IKiEAIfkECQcAAAAsAAAAABgAGAAABbUgII4koChlmhokw5DEoI4NQ4xFMQoJO4uuhignMiQWvxGBIQC+AJBEUyUcIRiyE6CR0CllW4HABxBURTUw4nC4FcWo5CDBRpQaCoF7VjgsyCUDYDMNZ0mHdwYEBAaGMwwHDg4HDA2KjI4qkJKUiJ6faJkiA4qAKQkRB3E0i6YpAw8RERAjA4tnBoMApCMQDhFTuySKoSKMJAq6rD4GzASiJYtgi6PUcs9Kew0xh7rNJMqIhYchACH5BAkHAAAALAAAAAAYABgAAAW0ICCOJEAQZZo2JIKQxqCOjWCMDDMqxT2LAgELkBMZCoXfyCBQiFwiRsGpku0EshNgUNAtrYPT0GQVNRBWwSKBMp98P24iISgNDAS4ipGA6JUpA2WAhDR4eWM/CAkHBwkIDYcGiTOLjY+FmZkNlCN3eUoLDmwlDW+AAwcODl5bYl8wCVYMDw5UWzBtnAANEQ8kBIM0oAAGPgcREIQnVloAChEOqARjzgAQEbczg8YkWJq8nSUhACH5BAkHAAAALAAAAAAYABgAAAWtICCOJGAYZZoOpKKQqDoORDMKwkgwtiwSBBYAJ2owGL5RgxBziQQMgkwoMkhNqAEDARPSaiMDFdDIiRSFQowMXE8Z6RdpYHWnEAWGPVkajPmARVZMPUkCBQkJBQINgwaFPoeJi4GVlQ2Qc3VJBQcLV0ptfAMJBwdcIl+FYjALQgimoGNWIhAQZA4HXSpLMQ8PIgkOSHxAQhERPw7ASTSFyCMMDqBTJL8tf3y2fCEAIfkECQcAAAAsAAAAABgAGAAABa8gII4k0DRlmg6kYZCoOg5EDBDEaAi2jLO3nEkgkMEIL4BLpBAkVy3hCTAQKGAznM0AFNFGBAbj2cA9jQixcGZAGgECBu/9HnTp+FGjjezJFAwFBQwKe2Z+KoCChHmNjVMqA21nKQwJEJRlbnUFCQlFXlpeCWcGBUACCwlrdw8RKGImBwktdyMQEQciB7oACwcIeA4RVwAODiIGvHQKERAjxyMIB5QlVSTLYLZ0sW8hACH5BAkHAAAALAAAAAAYABgAAAW0ICCOJNA0ZZoOpGGQrDoOBCoSxNgQsQzgMZyIlvOJdi+AS2SoyXrK4umWPM5wNiV0UDUIBNkdoepTfMkA7thIECiyRtUAGq8fm2O4jIBgMBA1eAZ6Knx+gHaJR4QwdCMKBxEJRggFDGgQEREPjjAMBQUKIwIRDhBDC2QNDDEKoEkDoiMHDigICGkJBS2dDA6TAAnAEAkCdQ8ORQcHTAkLcQQODLPMIgIJaCWxJMIkPIoAt3EhACH5BAkHAAAALAAAAAAYABgAAAWtICCOJNA0ZZoOpGGQrDoOBCoSxNgQsQzgMZyIlvOJdi+AS2SoyXrK4umWHM5wNiV0UN3xdLiqr+mENcWpM9TIbrsBkEck8oC0DQqBQGGIz+t3eXtob0ZTPgNrIwQJDgtGAgwCWSIMDg4HiiUIDAxFAAoODwxDBWINCEGdSTQkCQcoegADBaQ6MggHjwAFBZUFCm0HB0kJCUy9bAYHCCPGIwqmRq0jySMGmj6yRiEAIfkECQcAAAAsAAAAABgAGAAABbIgII4k0DRlmg6kYZCsOg4EKhLE2BCxDOAxnIiW84l2L4BLZKipBopW8XRLDkeCiAMyMvQAA+uON4JEIo+vqukkKQ6RhLHplVGN+LyKcXA4Dgx5DWwGDXx+gIKENnqNdzIDaiMECwcFRgQCCowiCAcHCZIlCgICVgSfCEMMnA0CXaU2YSQFoQAKUQMMqjoyAglcAAyBAAIMRUYLCUkFlybDeAYJryLNk6xGNCTQXY0juHghACH5BAkHAAAALAAAAAAYABgAAAWzICCOJNA0ZVoOAmkY5KCSSgSNBDE2hDyLjohClBMNij8RJHIQvZwEVOpIekRQJyJs5AMoHA+GMbE1lnm9EcPhOHRnhpwUl3AsknHDm5RN+v8qCAkHBwkIfw1xBAYNgoSGiIqMgJQifZUjBhAJYj95ewIJCQV7KYpzBAkLLQADCHOtOpY5PgNlAAykAEUsQ1wzCgWdCIdeArczBQVbDJ0NAqyeBb64nQAGArBTt8R8mLuyPyEAOwAAAAAAAAAAAA==) center no-repeat;display:none;transition-property:display;transition-delay:var(--loading-icon-delay);z-index:5;contain:strict}.pdfViewer .page.loading:after{display:block}.pdfViewer .page:not(.loading):after{transition-property:none;display:none}.pdfPresentationMode .pdfViewer{padding-bottom:0}.pdfPresentationMode .spread{margin:0}.pdfPresentationMode .pdfViewer .page{margin:0 auto;border:2px solid transparent}.annotationLayer{right:0;bottom:0}.annotationLayer section{z-index:1!important}.xfaLayer{z-index:5}#toc_wrapper{display:flex;flex-direction:row}#toc_wrapper .toc{width:300px;background-color:#eaeaea}#toc_wrapper ol ol{padding-left:20px}#toc_wrapper ol{padding-left:2em}#toc_wrapper a{color:#000} diff --git a/assets/text_highlight.html-51fa3454.js b/assets/text_highlight.html-51fa3454.js new file mode 100644 index 0000000..afb5d8e --- /dev/null +++ b/assets/text_highlight.html-51fa3454.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-f45dcaf4","path":"/examples/text_events/text_highlight.html","title":"Highlight Event","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":null,"contributors":[]},"filePathRelative":"examples/text_events/text_highlight.md"}');export{t as data}; diff --git a/assets/text_highlight.html-d3b79b62.js b/assets/text_highlight.html-d3b79b62.js new file mode 100644 index 0000000..9057341 --- /dev/null +++ b/assets/text_highlight.html-d3b79b62.js @@ -0,0 +1,25 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const i={},u=l(`

Highlight Event

WARNING

Highlight event payload has too much data to display on screen, open the console instead.

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import '@tato30/vue-pdf/style.css'
+import { ref } from 'vue'
+
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+
+const highlightText = ref('Trace-based')
+const highlightOptions = ref({
+  completeWords: false,
+  ignoreCase: true,
+})
+
+function onHighlight(value) {
+  console.log(value)
+}
+</script>
+
+<template>
+  <div>
+    <input v-model="highlightText">
+    <VuePDF :pdf="pdf" text-layer :highlight-text="highlightText" :highlight-options="highlightOptions" @highlight="onHighlight" />
+  </div>
+</template>
+
`,3);function r(k,d){const a=n("TextHighlight"),t=n("ClientOnly");return e(),o("div",null,[u,s(t,null,{default:c(()=>[s(a)]),_:1})])}const g=p(i,[["render",r],["__file","text_highlight.html.vue"]]);export{g as default}; diff --git a/assets/text_layer.html-b50a143a.js b/assets/text_layer.html-b50a143a.js new file mode 100644 index 0000000..9127325 --- /dev/null +++ b/assets/text_layer.html-b50a143a.js @@ -0,0 +1,20 @@ +import{_ as e,r as n,o as p,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Text Layer

<script setup>
+import { ref } from 'vue'
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import '@tato30/vue-pdf/style.css'
+
+const text_layer = ref(false)
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+</script>
+
+<template>
+  <div>
+    <div>
+      <button @click="text_layer = !text_layer">
+        Change to {{ !text_layer }}
+      </button>
+    </div>
+    <VuePDF :pdf="pdf" :text-layer="text_layer" />
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("TextLayer"),t=n("ClientOnly");return p(),o("div",null,[i,s(t,null,{default:c(()=>[s(a)]),_:1})])}const m=e(u,[["render",k],["__file","text_layer.html.vue"]]);export{m as default}; diff --git a/assets/toc.html-7317742a.js b/assets/toc.html-7317742a.js new file mode 100644 index 0000000..e703ad3 --- /dev/null +++ b/assets/toc.html-7317742a.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-c7ab6d5e","path":"/examples/advanced/toc.html","title":"Table of content","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":1700470489000,"contributors":[{"name":"Dmitry Pupinin","email":"dlnsk@mail.ru","commits":1}]},"filePathRelative":"examples/advanced/toc.md"}');export{e as data}; diff --git a/assets/toc.html-d62adc1c.js b/assets/toc.html-d62adc1c.js new file mode 100644 index 0000000..60b9c2a --- /dev/null +++ b/assets/toc.html-d62adc1c.js @@ -0,0 +1,46 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Table of content

<script setup>
+  import { ref, triggerRef, watchEffect } from 'vue';
+  import { VuePDF, getPDFDestination, usePDF } from '@tato30/vue-pdf';
+  import { withBase } from '@vuepress/client';
+  import ChaptersList from './ChaptersList.vue';
+
+  const { pdf, info } = usePDF(withBase('/example_045.pdf'))
+  const outlineTree = ref([])
+
+  watchEffect(() => {
+    if (info.value.outline !== undefined) {
+      outlineTree.value = info.value.outline.map(function convert(node) {
+        return {
+          title: node.title,
+          destination: getPDFDestination(info.value.document, node.dest),
+          items: node.items.map((item) => {
+            return convert(item)
+          }),
+        }
+      })
+    }
+  })
+  triggerRef(info)
+
+  function onChapterClick(value) {
+    value.then(v => {
+      console.log(v)
+    })
+  }
+</script>
+
+<template>
+  <div id="toc_wrapper">
+    <div class="toc">
+      <ChaptersList
+          :items="outlineTree"
+          @chapterClick="onChapterClick"
+      >
+      </ChaptersList>
+    </div>
+    <div class="container">
+      <VuePDF :pdf="pdf" />
+    </div>
+  </div>
+</template>
+
`,2);function k(r,d){const a=n("TOC"),t=n("ClientOnly");return e(),o("div",null,[i,s(t,null,{default:c(()=>[s(a)]),_:1})])}const m=p(u,[["render",k],["__file","toc.html.vue"]]);export{m as default}; diff --git a/assets/watermark.html-1285d86c.js b/assets/watermark.html-1285d86c.js new file mode 100644 index 0000000..1cf17ac --- /dev/null +++ b/assets/watermark.html-1285d86c.js @@ -0,0 +1 @@ +const a=JSON.parse('{"key":"v-67ec23b5","path":"/examples/advanced/watermark.html","title":"Watermark Text","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":1700166862000,"contributors":[{"name":"TaTo30","email":"aldo.hernandez3012@gmail.com","commits":1}]},"filePathRelative":"examples/advanced/watermark.md"}');export{a as data}; diff --git a/assets/watermark.html-aef68484.js b/assets/watermark.html-aef68484.js new file mode 100644 index 0000000..d528c02 --- /dev/null +++ b/assets/watermark.html-aef68484.js @@ -0,0 +1,35 @@ +import{_ as p,r as n,o as e,c as o,a,w as c,e as l}from"./app-6fe4962f.js";const u={},i=l(`

Watermark Text

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import { ref } from 'vue'
+
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+
+const pdfRef = ref(null)
+const watermarkText = ref('sample')
+const watermarkOptions = ref({
+  columns: 4,
+  rows: 4,
+  color: 'rgba(211, 210, 211, 0.8)',
+  rotation: 45,
+  fontSize: 18,
+})
+
+function reload() {
+  pdfRef.value.reload()
+}
+</script>
+
+<template>
+  <div>
+    <div>
+      <input v-model="watermarkText">
+      <input v-model="watermarkOptions.color">
+      <input v-model="watermarkOptions.columns">
+      <input v-model="watermarkOptions.rows">
+      <input v-model="watermarkOptions.rotation">
+      <input v-model="watermarkOptions.fontSize">
+    </div>
+    <VuePDF ref="pdfRef" :pdf="pdf" :watermark-text="watermarkText" :watermark-options="watermarkOptions" />
+  </div>
+</template>
+
`,2);function r(k,d){const s=n("Watermark"),t=n("ClientOnly");return e(),o("div",null,[i,a(t,null,{default:c(()=>[a(s)]),_:1})])}const m=p(u,[["render",r],["__file","watermark.html.vue"]]);export{m as default}; diff --git a/assets/xfa_layer.html-a367bc28.js b/assets/xfa_layer.html-a367bc28.js new file mode 100644 index 0000000..ebc8c05 --- /dev/null +++ b/assets/xfa_layer.html-a367bc28.js @@ -0,0 +1,16 @@ +import{_ as p,r as n,o as e,c as o,a as s,w as c,e as l}from"./app-6fe4962f.js";const i={},u=l(`

XFA Forms

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import '@tato30/vue-pdf/style.css'
+
+const { pdf } = usePDF({
+  url: '/example_xfa.pdf',
+  enableXfa: true,
+})
+</script>
+
+<template>
+  <div class="container">
+    <VuePDF :pdf="pdf" />
+  </div>
+</template>
+
`,2);function r(k,d){const a=n("XFALayer"),t=n("ClientOnly");return e(),o("div",null,[u,s(t,null,{default:c(()=>[s(a)]),_:1})])}const m=p(i,[["render",r],["__file","xfa_layer.html.vue"]]);export{m as default}; diff --git a/examples/advanced/annotation_filter.html b/examples/advanced/annotation_filter.html index 535ebcc..0875e02 100644 --- a/examples/advanced/annotation_filter.html +++ b/examples/advanced/annotation_filter.html @@ -23,11 +23,11 @@ } Annotations Filter | VuePDF - - + + -

Annotations Filter

<script setup>
+    
-    
+    
   
 
diff --git a/examples/advanced/fit_parent.html b/examples/advanced/fit_parent.html
index 4bf3b6d..227d961 100644
--- a/examples/advanced/fit_parent.html
+++ b/examples/advanced/fit_parent.html
@@ -23,11 +23,11 @@
 			}
     
     Fit parent | VuePDF
-    
-    
+    
+    
   
   
-    
+    
   
 
diff --git a/examples/advanced/highlight_text.html b/examples/advanced/highlight_text.html
new file mode 100644
index 0000000..d26a479
--- /dev/null
+++ b/examples/advanced/highlight_text.html
@@ -0,0 +1,57 @@
+
+
+  
+    
+    
+    
+    
+    
+    Highlight Text | VuePDF
+    
+    
+  
+  
+    

Highlight Text

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf';
+import '@tato30/vue-pdf/style.css';
+import { ref } from 'vue';
+
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+
+const highlightText = ref('javascript')
+const highlightOptions = ref({
+  completeWords: false,
+  ignoreCase: true,
+})
+</script>
+
+<template>
+  <div>
+    <div>
+      <input v-model="highlightText">
+      <input v-model="highlightOptions.completeWords" type="checkbox">
+      <input v-model="highlightOptions.ignoreCase" type="checkbox">
+    </div>
+    <VuePDF :pdf="pdf" text-layer :highlight-text="highlightText" :highlight-options="highlightOptions" />
+  </div>
+</template>
+
+ + + diff --git a/examples/advanced/multiple_pdf.html b/examples/advanced/multiple_pdf.html index 424c615..f13cb3c 100644 --- a/examples/advanced/multiple_pdf.html +++ b/examples/advanced/multiple_pdf.html @@ -23,11 +23,11 @@ } Multiples PDF | VuePDF - - + + - + diff --git a/examples/advanced/toc.html b/examples/advanced/toc.html new file mode 100644 index 0000000..e504f9b --- /dev/null +++ b/examples/advanced/toc.html @@ -0,0 +1,78 @@ + + + + + + + + + Table of content | VuePDF + + + + +

Table of content

<script setup>
+  import { ref, triggerRef, watchEffect } from 'vue';
+  import { VuePDF, getPDFDestination, usePDF } from '@tato30/vue-pdf';
+  import { withBase } from '@vuepress/client';
+  import ChaptersList from './ChaptersList.vue';
+
+  const { pdf, info } = usePDF(withBase('/example_045.pdf'))
+  const outlineTree = ref([])
+
+  watchEffect(() => {
+    if (info.value.outline !== undefined) {
+      outlineTree.value = info.value.outline.map(function convert(node) {
+        return {
+          title: node.title,
+          destination: getPDFDestination(info.value.document, node.dest),
+          items: node.items.map((item) => {
+            return convert(item)
+          }),
+        }
+      })
+    }
+  })
+  triggerRef(info)
+
+  function onChapterClick(value) {
+    value.then(v => {
+      console.log(v)
+    })
+  }
+</script>
+
+<template>
+  <div id="toc_wrapper">
+    <div class="toc">
+      <ChaptersList
+          :items="outlineTree"
+          @chapterClick="onChapterClick"
+      >
+      </ChaptersList>
+    </div>
+    <div class="container">
+      <VuePDF :pdf="pdf" />
+    </div>
+  </div>
+</template>
+
+ + + diff --git a/examples/advanced/watermark.html b/examples/advanced/watermark.html index 5f34654..32a0800 100644 --- a/examples/advanced/watermark.html +++ b/examples/advanced/watermark.html @@ -23,11 +23,11 @@ } Watermark Text | VuePDF - - + + - + diff --git a/examples/annotation_events/annotation_attachment.html b/examples/annotation_events/annotation_attachment.html index 78e87f6..e67e763 100644 --- a/examples/annotation_events/annotation_attachment.html +++ b/examples/annotation_events/annotation_attachment.html @@ -23,11 +23,11 @@ } File attachment | VuePDF - - + + -

File attachment

<script setup>
+    
-    
+    
   
 
diff --git a/examples/annotation_events/annotation_forms.html b/examples/annotation_events/annotation_forms.html
index edd4e4d..19dc5bf 100644
--- a/examples/annotation_events/annotation_forms.html
+++ b/examples/annotation_events/annotation_forms.html
@@ -23,11 +23,11 @@
 			}
     
     Forms fields | VuePDF
-    
-    
+    
+    
   
   
-    

Forms fields

<script setup>
+    
-    
+    
   
 
diff --git a/examples/annotation_events/annotation_links.html b/examples/annotation_events/annotation_links.html
index 7617e9f..db651c3 100644
--- a/examples/annotation_events/annotation_links.html
+++ b/examples/annotation_events/annotation_links.html
@@ -23,11 +23,11 @@
 			}
     
     Links | VuePDF
-    
-    
+    
+    
   
   
-    

Links

<script setup>
+    
-    
+    
   
 
diff --git a/examples/basic/all_pages.html b/examples/basic/all_pages.html
index 9518888..5e5a793 100644
--- a/examples/basic/all_pages.html
+++ b/examples/basic/all_pages.html
@@ -23,11 +23,11 @@
 			}
     
     All pages | VuePDF
-    
-    
+    
+    
   
   
-    

All pages

<script setup>
+    

All pages

<script setup>
 import { VuePDF, usePDF } from '@tato30/vue-pdf'
 
 const { pdf, pages } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
@@ -39,6 +39,6 @@
   </div>
 </template>
 
- + diff --git a/examples/basic/annotation_layer.html b/examples/basic/annotation_layer.html index 4e05e9e..8c5cd6c 100644 --- a/examples/basic/annotation_layer.html +++ b/examples/basic/annotation_layer.html @@ -23,11 +23,11 @@ } Annotation Layer | VuePDF - - + + -

Annotation Layer

<script setup>
+    
-    
+    
   
 
diff --git a/examples/basic/one_page.html b/examples/basic/one_page.html
index 06934c1..3299b30 100644
--- a/examples/basic/one_page.html
+++ b/examples/basic/one_page.html
@@ -23,11 +23,11 @@
 			}
     
     One page | VuePDF
-    
-    
+    
+    
   
   
-    

One page

<script setup>
+    
-    
+    
   
 
diff --git a/examples/basic/rotation.html b/examples/basic/rotation.html
index 48d8cf7..749cfb2 100644
--- a/examples/basic/rotation.html
+++ b/examples/basic/rotation.html
@@ -23,11 +23,11 @@
 			}
     
     Rotation | VuePDF
-    
-    
+    
+    
   
   
-    

Rotation

<script setup>
+    
-    
+    
   
 
diff --git a/examples/basic/scale.html b/examples/basic/scale.html
index 72f3379..41ca3c7 100644
--- a/examples/basic/scale.html
+++ b/examples/basic/scale.html
@@ -23,11 +23,11 @@
 			}
     
     Scale | VuePDF
-    
-    
+    
+    
   
   
-    

Scale

<script setup>
+    
-    
+    
   
 
diff --git a/examples/basic/text_layer.html b/examples/basic/text_layer.html
index 128baed..5ccfb31 100644
--- a/examples/basic/text_layer.html
+++ b/examples/basic/text_layer.html
@@ -23,11 +23,11 @@
 			}
     
     Text Layer | VuePDF
-    
-    
+    
+    
   
   
-    

Text Layer

<script setup>
+    
-    
+    
   
 
diff --git a/examples/basic/xfa_layer.html b/examples/basic/xfa_layer.html
index 0d2ff83..ad3df2d 100644
--- a/examples/basic/xfa_layer.html
+++ b/examples/basic/xfa_layer.html
@@ -23,11 +23,11 @@
 			}
     
     XFA Forms | VuePDF
-    
-    
+    
+    
   
   
-    

XFA Forms

<script setup>
+    
-    
+    
   
 
diff --git a/examples/index.html b/examples/index.html
index 0efeab3..699a00f 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -23,11 +23,11 @@
 			}
     
     Examples List | VuePDF
-    
-    
+    
+    
   
   
-    
-    
+    
+    
   
 
diff --git a/examples/loaded_events/loaded.html b/examples/loaded_events/loaded.html
index 87f4610..42dfd8a 100644
--- a/examples/loaded_events/loaded.html
+++ b/examples/loaded_events/loaded.html
@@ -23,11 +23,11 @@
 			}
     
     Loaded Event | VuePDF
-    
-    
+    
+    
   
   
-    
+    
   
 
diff --git a/examples/text_events/text_highlight.html b/examples/text_events/text_highlight.html
new file mode 100644
index 0000000..c19b334
--- /dev/null
+++ b/examples/text_events/text_highlight.html
@@ -0,0 +1,57 @@
+
+
+  
+    
+    
+    
+    
+    
+    Highlight Event | VuePDF
+    
+    
+  
+  
+    

Highlight Event

WARNING

Highlight event payload has too much data to display on screen, open the console instead.

<script setup>
+import { VuePDF, usePDF } from '@tato30/vue-pdf'
+import '@tato30/vue-pdf/style.css'
+import { ref } from 'vue'
+
+const { pdf } = usePDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf')
+
+const highlightText = ref('Trace-based')
+const highlightOptions = ref({
+  completeWords: false,
+  ignoreCase: true,
+})
+
+function onHighlight(value) {
+  console.log(value)
+}
+</script>
+
+<template>
+  <div>
+    <input v-model="highlightText">
+    <VuePDF :pdf="pdf" text-layer :highlight-text="highlightText" :highlight-options="highlightOptions" @highlight="onHighlight" />
+  </div>
+</template>
+
+ + + diff --git a/guide/composables.html b/guide/composables.html index 53e4905..3aac179 100644 --- a/guide/composables.html +++ b/guide/composables.html @@ -23,8 +23,8 @@ } Composables | VuePDF - - + +

Composables

usePDF

This package provides a default composable named usePDF that loads and prepare the PDF Document for it usage with VuePDF component, also let you get some basic information and properties about the document.

<script setup>
@@ -93,6 +93,6 @@
   </div>
 </template>
 
- + diff --git a/guide/events.html b/guide/events.html index 63f5d2c..4738ba6 100644 --- a/guide/events.html +++ b/guide/events.html @@ -23,11 +23,11 @@ } Events | VuePDF - - + + -

Events

loaded

<VuePDF :pdf="pdf" @loaded="onLoaded" />
+    

Events

loaded

<VuePDF :pdf="pdf" @loaded="onLoaded" />
 

Emitted when page has finished rendering task in view, the value contains page information.

Value example:

{
   "viewBox": [0, 0, 595.276, 841.89],
   "scale": 1,
@@ -38,7 +38,8 @@
   "width": 841.89,
   "height": 595.276
 }
-

annotation

<VuePDF :pdf="pdf" @annotation="onAnnotation" />
+

highlight

<VuePDF :pdf="pdf" @highlight="onHighlight" />
+

Emitted when a text has been searched in page using highlight-text and highlight-options, this event return a list of matches and the page where the text was found with its textDivs and textContent.

Check the example: Highlight Event

annotation

<VuePDF :pdf="pdf" @annotation="onAnnotation" />
 

Emitted when user has interaction with any annotation.

Annotation event data depends on what type of annotation has triggered the event, in general, the events value follows this structure:

PropertyValue
typePossible values: internal-link, link, file-attachment, form-text, form-select, form-checkbox, form-radio, form-button
dataAnnotation associated data

internal-link emitted when user clicks a link that redirects to another content within the document.

{
   "type": "internal-link",
   "data": {
@@ -123,6 +124,6 @@
   }
 }
 
- + diff --git a/guide/introduction.html b/guide/introduction.html index e9b2472..f17888d 100644 --- a/guide/introduction.html +++ b/guide/introduction.html @@ -23,8 +23,8 @@ } Introduction | VuePDF - - + +

Introduction

VuePDF is a Vue 3 client-side component for pdf.js that allows you to flexibly display PDF pages within your project.

Installation

npm i @tato30/vue-pdf
@@ -48,7 +48,7 @@
 <template>
   <VuePDF :pdf="pdf" text-layer annotation-layer />
 </template>
-

Check the examples:

You can also create your own custom styles and set them in your project, use this examples as guide:

XFA Forms v1.7

XFA forms also can be supported by enabling them from usePDF.

<script setup>
+

Check the examples:

You can also create your own custom styles and set them in your project, use this examples as guide:

XFA Forms

XFA forms also can be supported by enabling them from usePDF.

<script setup>
 import { VuePDF, usePDF } from '@tato30/vue-pdf'
 import '@tato30/vue-pdf/style.css'
 
@@ -73,6 +73,6 @@
 # Run code with hot reload
 npm run dev
 
- + diff --git a/guide/methods.html b/guide/methods.html index 69fb4e3..2f21bc4 100644 --- a/guide/methods.html +++ b/guide/methods.html @@ -23,8 +23,8 @@ } Methods | VuePDF - - + +

Methods

reload

Allows to reload page render task, useful to update parent width when fit-parent prop is used

<script setup>
@@ -52,6 +52,6 @@
   <VuePDF ref="VPDF" :pdf="pdf" />
 </template>
 
- + diff --git a/guide/props.html b/guide/props.html index f00b18f..cd49379 100644 --- a/guide/props.html +++ b/guide/props.html @@ -23,19 +23,31 @@ } Props | VuePDF - - + + -

Props

pdf

Type: PDFDocumentLoadingTask
Required: true

The PDFDocumentLoadingTask obtained from usePDF

<VuePDF :pdf="pdf" />
+    

Props

pdf

Type: PDFDocumentLoadingTask
Required: true

The PDFDocumentLoadingTask obtained from usePDF

<VuePDF :pdf="pdf" />
 

page

Type: int
Required: false
Default: 1

Page to render, this prop must be a page number starting at 1

<VuePDF :pdf="pdf" :page="1" />
 

scale

Type: int
Required: false
Default: 1

Page scale

<VuePDF :pdf="pdf" :scale="0.5" />
-

fit-parent

Type: boolean
Required: false
Default: false

Fit page with parent width, this prop replace scale in width calculation

<VuePDF :pdf="pdf" fit-parent />
+

fit-parent

Type: boolean
Required: false
Default: false

Fit page with the parent width. This prop replace scale in size calculation and has more precedence than width

<VuePDF :pdf="pdf" fit-parent />
+

width

Type: number
Required: false
Default: null

Scale the page with a width in px. This prop replace scale in size calculation and has more precedence than height

<VuePDF :pdf="pdf" :width="500" />
+

height

Type: number
Required: false
Default: null

Scale the page with a height in px. This prop replace scale in size calculation.

<VuePDF :pdf="pdf" :height="500" />
 

rotation

Type: int
Required: false
Default: Document Default

Rotate the page in 90° multiples eg. (90, 180, 270)

<VuePDF :pdf="pdf" :rotation="90" />
 

text-layer

Type: boolean
Required: false
Default: false

Enable text selection in page

<VuePDF :pdf="pdf" text-layer />
-

annotation-layer

Type: boolean
Required: false
Default: false

Enable document annotations like links, popups, widgets, etc.

<VuePDF :pdf="pdf" annotation-layer />
+

highlight-text v1.9

Type: string
Required: false
Default: null

Highlight on the page the searched text

<VuePDF :pdf="pdf" text-layer hightlight-text="javascript" />
+

highlight-options v1.9

Type: object
Required: false
Default:

{
+  completeWords: false,
+  ignoreCase: true
+}
+

Settings for how to search the highlight-text

<VuePDF :pdf="pdf" text-layer hightlight-text="javascript" :highlight-options="{
+    completeWords: true,
+    ignoreCase: false
+  }"
+/>
+

annotation-layer

Type: boolean
Required: false
Default: false

Enable document annotations like links, popups, widgets, etc.

<VuePDF :pdf="pdf" annotation-layer />
 

watermark-text

Type: string
Required: false
Default: null

Prints a watermark pattern over canvas.

<VuePDF :pdf="pdf" watermark-text="Sample" />
-

watermark-options v1.8

Type: object
Required: false
Default:

{
+

watermark-options

Type: object
Required: false
Default:

{
   columns: 4,
   rows: 4,
   rotation: 45,
@@ -66,6 +78,6 @@
 
 <VuePDF :pdf="pdf" annotation-layer :annotations-map="annotationMap" />
 
- + diff --git a/guide/slots.html b/guide/slots.html index 4782bea..451d923 100644 --- a/guide/slots.html +++ b/guide/slots.html @@ -23,8 +23,8 @@ } Slots | VuePDF - - + +

Slots

loading: default

Slot to display when page is rendering

<template>
@@ -35,6 +35,6 @@
   </VuePDF>
 </template>
 
- + diff --git a/index.html b/index.html index 0b0a895..1a822c6 100644 --- a/index.html +++ b/index.html @@ -23,11 +23,11 @@ } Home | VuePDF - - + + - +